想要做视频直播,请教一下相关的技术问题

2016-11-03 09:46:47 +08:00
 yanest

自己大概了解了一下架构 专业摄像机 --HDMI--> USB HDMI 采集卡 --编码--> 推流服务器 -->流媒体发布服务器

现在问题是: USB HDMI 采集卡的主机上通常是如何采集的?是用 Flash Media Encoder 然后在另外一台机器上用 ffmpeg 来推流到服务器, 还是可以直接就可以用 ffmpeg 就可以捕捉到采集卡的视频然后直接推流。

2765 次点击
所在节点    问与答
11 条回复
fxxkgw
2016-11-03 10:17:33 +08:00
nignx rtmp 模块
thomaspaine
2016-11-03 10:26:35 +08:00
pc 端用 obs 推流到服务端,用 FME 也可以,但是功能太少了。服务端,可以用 nginx 的 rtmp 模块,可以用 red5 ,可以用 crtmpserver
ETiV
2016-11-03 10:26:37 +08:00
但 USB 视频采集卡,对电脑来说,跟普通摄像头一样,都是视频输入设备。

所以 ffmpeg 直接推问题不大

但你难道直接将摄像头画面输出吗?不需要给画面上叠加个字幕啥的?
douyang
2016-11-03 10:34:42 +08:00
yanest
2016-11-03 10:38:33 +08:00
@thomaspaine 直接用 OBS 就可以完成编码和推流吗?之前听过的一版方案是 FME 输出裸流,然后用 FFMPEG 编码推流。
@ETiV 就是想直播个年会,内嵌在微信公众号中。
thomaspaine
2016-11-03 10:56:10 +08:00
@yanest 以前上学的时候搞过直播晚会,用的是采集卡+OBS ,没问题的,而且还不是 USB 采集卡,是 PCI 的板卡,接口是 SDI 。用 FME+FFMPEG 也不是不行,太麻烦了。
cst4you
2016-11-03 13:14:51 +08:00
@yanest 一台 PC+obs 可以满足你的需求
serve99
2016-11-03 18:01:59 +08:00
方式 1 :
1. 你现场布一台采集画面用的电脑(运行 FMLE ,在输入端的选项中选择采集卡,采集卡当然也接好摄像机),此时,你现场的那台电脑就取到你摄像机的画面了。
2. 在以上的 FMLE 有一个输出选项,填入你 [流媒体服务器,假设是 rtmp://www.abc.com/live] 及 [流名称,假设是 livestream] ,就可以将你采集到的画面发到服务器进行直播了;
3. 在你的服务器端,建一个站点,用来观看访问,假设是站点中直播观看地址是 http://www.abc.com/live.html ,你这个 live.html 中要用支持 rtmp 直播的播放器来调用你的直播画面,此时会要用到第 2 步中的 [服务器地址] 和 [流名称] (播放器的话,像国外的 flowerplayer 和国内的极酷阳光播放器,均支持 rtmp 协议流直播)。
4. 以上完成后,就可以通过 http://www.abc.com/live.html 来观看你的直播了。

方式 2 :
用 OBS 来发起直播(但这个偏向于发起桌面屏幕的直播);

方式 3 :
用 HDMI 编码器实际也可以直接发起直播的,像电视台节目在线直播一般就是用这种的; hdmi 有一个管理界面,当中设定 [流媒体服务器] 和 [流名称] 就可以了,其他步骤与方式 1 类似。
yanest
2016-11-09 14:56:48 +08:00
@thomaspaine
@fxxkgw
用 nginx 的 rtmp 搭建了服务器,现在遇到一个问题,当推流端遇到网络不稳定丢包的时候, nginx rtmp 上的直播流就会僵死在上面,显示有推送流,但是没有流量。 使用 OBS 客户端没法再继续推流,需要停止等好久一阵 nginx rtmp 上的流才会自行消失,才能继续打开 obs 推流。
配置如下:

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
root /data/nginx/nginx-rtmp-module/;
}

location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root html;
add_header Cache-Control no-cache;
}
#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
rtmp {
server {
listen 1935;
# publish_time_fix off;
application live {
live on; #stream on live allow
record off;
hls on;
hls_path /data/nginx/local/nginx/html/hls;
allow publish all; # control access privilege
allow play all; # control access privilege
}
}
}
thomaspaine
2016-11-09 22:33:46 +08:00
@yanest 我那时候搞直播是内网,网络质量不担心。如果你的网络环境差,可以考虑先推送到一个网络质量好的服务器 A 上, A 上只有 RTMP 的服务,然后直播服务器 B 从 A 上拉流过去转换成 hls 直播
linuxvivian
2017-07-13 11:37:38 +08:00
如果你的前端是摄像机的话,HDMI 接口。 用采集卡的方案,那就是 PC+采集卡+直播推流软件,就是现场直播,用 PC 来链接的话,不便携,现在都是上那种硬件编码器小盒子,也不贵,直接推送 RTMP。 流媒体系统的话,开源的有 red5, ngix,国外知名品牌的话,有 adobe 的 FMS, wowza 等,用国内的可以考虑 800li media server。

要是想省事,直接用云服务平台,现在有很多,baidu 一搜索一大堆。 ;)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/317631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX