V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yanest
V2EX  ›  问与答

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

  •  
  •   yanest · 2016-11-03 09:46:47 +08:00 · 2907 次点击
    这是一个创建于 2974 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    11 条回复    2017-07-13 11:37:38 +08:00
    fxxkgw
        1
    fxxkgw  
       2016-11-03 10:17:33 +08:00
    nignx rtmp 模块
    thomaspaine
        2
    thomaspaine  
       2016-11-03 10:26:35 +08:00
    pc 端用 obs 推流到服务端,用 FME 也可以,但是功能太少了。服务端,可以用 nginx 的 rtmp 模块,可以用 red5 ,可以用 crtmpserver
    ETiV
        3
    ETiV  
       2016-11-03 10:26:37 +08:00 via iPhone
    但 USB 视频采集卡,对电脑来说,跟普通摄像头一样,都是视频输入设备。

    所以 ffmpeg 直接推问题不大

    但你难道直接将摄像头画面输出吗?不需要给画面上叠加个字幕啥的?
    yanest
        5
    yanest  
    OP
       2016-11-03 10:38:33 +08:00
    @thomaspaine 直接用 OBS 就可以完成编码和推流吗?之前听过的一版方案是 FME 输出裸流,然后用 FFMPEG 编码推流。
    @ETiV 就是想直播个年会,内嵌在微信公众号中。
    thomaspaine
        6
    thomaspaine  
       2016-11-03 10:56:10 +08:00
    @yanest 以前上学的时候搞过直播晚会,用的是采集卡+OBS ,没问题的,而且还不是 USB 采集卡,是 PCI 的板卡,接口是 SDI 。用 FME+FFMPEG 也不是不行,太麻烦了。
    cst4you
        7
    cst4you  
       2016-11-03 13:14:51 +08:00
    @yanest 一台 PC+obs 可以满足你的需求
    serve99
        8
    serve99  
       2016-11-03 18:01:59 +08:00   ❤️ 1
    方式 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
        9
    yanest  
    OP
       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
        10
    thomaspaine  
       2016-11-09 22:33:46 +08:00
    @yanest 我那时候搞直播是内网,网络质量不担心。如果你的网络环境差,可以考虑先推送到一个网络质量好的服务器 A 上, A 上只有 RTMP 的服务,然后直播服务器 B 从 A 上拉流过去转换成 hls 直播
    linuxvivian
        11
    linuxvivian  
       2017-07-13 11:37:38 +08:00
    如果你的前端是摄像机的话,HDMI 接口。 用采集卡的方案,那就是 PC+采集卡+直播推流软件,就是现场直播,用 PC 来链接的话,不便携,现在都是上那种硬件编码器小盒子,也不贵,直接推送 RTMP。 流媒体系统的话,开源的有 red5, ngix,国外知名品牌的话,有 adobe 的 FMS, wowza 等,用国内的可以考虑 800li media server。

    要是想省事,直接用云服务平台,现在有很多,baidu 一搜索一大堆。 ;)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3486 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 04:33 · PVG 12:33 · LAX 20:33 · JFK 23:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.