【问题标题】:Using FFMPEG to stream my WebCam's video to YouTube [closed]使用 FFMPEG 将我的网络摄像头视频流式传输到 YouTube [关闭]
【发布时间】:2016-02-14 13:38:37
【问题描述】:

我一直在尝试使用 ffmpeg 将我的网络摄像头的视频流式传输到 YouTube,到目前为止,我所管理的只是来自 YouTube 的“确认”,上面写着绿色的“开始”。然而,它很快就变灰了,实际的流从未真正从离线状态改变。

我正在使用此命令尝试对其进行流式传输:

ffmpeg -rtbufsize 1500M -r 25 -f dshow -s 1280x720 -i video="USB2.0 HD UVC WebCam" -vcodec h264 -b:a 600k -acodec libfaac -ab 128k -f flv "rtmp://a.rtmp.youtube.com/live2/user.useruser.codecodecode"

CMD

我已经设法使用 ffmpeg 将视频流式传输到 YouTube,它只是无法工作的相机。知道我可能做错了什么吗?

这是我现在使用的命令 ffmpeg -r 18 -f dshow -s 1280x720 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -vcodec h264 -b:v 1800k -acodec aac -strict experimental -f flv "rtmp://a.rtmp.youtube.com/live2/useruser.useruser.codecodecodecode"

我现在使用 -acodec aac 而不是 libfaac 或 libfdk_aac,因为我遇到了“未知编码器”错误

然而,它正在流式传输几秒钟,现在我收到以下错误: WriteN, RTMP send error 10053

知道这些是什么意思,或者如何解决它们吗?

【问题讨论】:

    标签: youtube ffmpeg webcam rtmp youtube-livestreaming-api


    【解决方案1】:

    您的命令有一些问题:

    • 您没有音频流。使用dshow 时,您还需要指定audio,如here 所述。

      ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone name here"

      如果您不打算捕获音频,请放置静音音轨。

    • -b:a-ab 相同——音频比特率。您必须使用-b:v 来指定视频比特率。 600k 对于 1280x720px @ 25fps H.264 视频流来说太低了。

      YouTuberecommends:

      720p

      视频比特率范围:1,500 - 4,000 Kbps

      你应该至少输入1800k

    • 关于您使用的音频libfaac。为了在编码AAC 时获得最佳效果,使用recommendedlibfdk_aac

    【讨论】:

    • 谢谢,这帮了我很大的忙,但我现在在开始流式传输后立即收到“RTMP 发送错误 10053”错误。知道这是什么吗? (我已经用正在发生的事情的屏幕截图更新了我的帖子)
    • 我有这个问题...
    • 这可能意味着流被延迟直到丢弃。我在您的屏幕截图中看到低 fps。你的电脑能胜任这项任务吗?
    • 如果您不打算捕获音频,请放置静音音轨 -->您能解释一下原因吗?
    • @Mulvya 返回当我写这个答案时,YouTube Live 摄取点需要一个音频流。其次,如果没有音频流,则在使用 HLS 时 Apple 设备上的播放可能会失败,因为他们期望混合视频和音频(在旧版本的协议中)。见stackoverflow.com/questions/33328829/…
    【解决方案2】:

    使用 FFmpeg 将 IP 摄像机实时流式传输到 Youtube。 - 对于 Ubuntu 用户(我做了什么)

    1. 在 ubuntu 12.04 或 14.04 https://gist.github.com/xdamman/e4f713c8cd1a389a5917

    2. 上安装最新的 ffmpeg
    3. 在 Ubuntu 上编译 FFmpeg https://gist.github.com/faleev/3435377

    4. 打开 Youtube。登录。点击我的频道 > 视频管理器 > 直播。注意“流名称/密钥”。

    5. 对于静态视频文件:

      ffmpeg -re -i "(input-file)"  -acodec libmp3lame  -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/(Stream name/key)"
      
    6. 对于来自 IP 摄像机的流式视频,仅输出 rtsp 视频:

      ffmpeg -re -i input-file  -rtsp_transport tcp -i "rtsp://password@(streamaddress with local IP)"  -acodec libmp3lame  -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/(Stream name/key)"
      

    【讨论】:

    • 在第 5 点,输出是视频 + 音频。 如何仅将视频(不带音频)从 IP 摄像机流式传输到 youtube? 我尝试使用 -an 选项,但 youtube 上没有显示视频,尽管 ffmpeg 仍在运行。
    【解决方案3】:

    如果您有一个 IP 地址为全高清 x264 视频源的网络摄像头,没有音频,并且您想将您的直接摄像头屏幕流式传输到 YouTube,您不需要始终将视频转码/重新编码为较低的分辨率。 YouTube 可以接受某些相机的直接视频流。唯一的事情是您必须添加一个额外的空/静音音轨。如果您的网络有足够的带宽,它应该可以工作。

    我在带有 Ubuntu 16.04 的 Pine64+ 上使用这个 CLI 命令并且它正在工作:

    ffmpeg -re -rtsp_transport tcp -i "rtsp://<user>:<pass>@<camera_ip>:<port>" /
           -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 /
           -c:a libmp3lame -ab 128k -ar 44100 /
           -c:v copy -threads 2 -bufsize 512k /
           -f flv "rtmp://a.rtmp.youtube.com/live2/<your-live-stream-key>"
    

    (这里有一些关于 Libavfilter 输入虚拟设备的信息:https://www.ffmpeg.org/ffmpeg-devices.html#lavfi

    使用此功能,您可以以最少的 CPU 使用率将带有无声音频的直接摄像头屏幕转发到 YouTube。

    一些限制:

    1. 当您的网络出现故障时(例如您的 ISP 刷新网络、更改您的公共 IP 或您的路由器重新启动),ffmpeg 将失去信号(网络摄像头和/或 YouTube RTSP)。
    2. 正如我所见,YouTube 有时会停止接收流并将最后的数据转换为视频文件(存档流视频),然后为实时流创建新标识符。这会影响 ffmpeg 的操作(RTSP 连接丢失)并影响您插入 YouTube 直播代码的网页。 (我发现 YouTube 只能在一个片段中处理最多 12 小时的视频)。

    在这两种情况下,ffpmeg 都无法检测到网络或流问题。因此,如果您想流式传输永无止境的流,则很难正确自动化。

    • 您需要以某种方式检测网络错误。
    • 您需要以某种方式检测 YouTube 何时停止在 RTSP 上收听。
    • 您需要以某种方式检测 ffmpeg 是否与摄像头失去通信。
    • 最后,当所有服务再次正常工作时,您需要重新启动 ffmpeg。

    目前我正在使用一个小的 cron 作业,它每隔几个小时重新启动一次 ffmpeg。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 2016-10-23
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多