使用FFMPEG将我的WebCam视频流式传输到YouTube

时间:2015-11-13 02:11:04

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

我一直在尝试使用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

知道这些是什么意思,或者如何修复它们?

3 个答案:

答案 0 :(得分:2)

您的命令有一些问题:

  • 您没有音频流。使用dshow时,您还需要按照here的说明指定audio

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

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

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

    YouTube recommends

      

    <强> 720P

         

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

    你应该至少放1800k

  • 关于您使用libfaac的音频。为了在AAC编码recommended以使用libfdk_aac

  • 时获得最佳效果

答案 1 :(得分:1)

使用FFmpeg将IP Camera直播到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。登录。点击我的频道&gt;视频管理器&gt;现场直播。注意“流名称/密钥”。

  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)"
    

答案 2 :(得分:1)

如果您的网络摄像头的IP地址带有完整的HD 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

通过这种方式,您可以将具有静音音频的直接摄像机屏幕转发到YouTube,并且CPU使用率最低。

一些限制:

  1. 当您的网络关闭时(例如您的ISP刷新网络,更改公共IP或路由器重新启动),ffmpeg将丢失信号(webcamera和/或YouTube RTSP)。
  2. 正如我所看到的,有时YouTube会停止接收流并将最后的数据转换为视频文件(存档流式视频),之后会为实时流创建新的标识符。这会影响ffmpeg的操作(RTSP连接丢失)并影响您插入YouTube直播流代码的网页。 (因为我发现YouTube只能处理最多12小时的视频)。
  3. 在这两种情况下,ffpmeg都无法检测到网络或流问题。因此,如果您想要流式传输无休止的流,则很难正确自动化。

    • 不知何故,您需要检测网络错误。
    • 不知何故,您需要检测YouTube何时停止收听RTSP。
    • 不知何故,你需要检测ffmpeg是否与相机失去了通信。
    • 最后,当所有服务再次运行时,你需要重新启动ffmpeg。

    暂时我正在使用一个小的cron作业,在每个小时重新启动ffmpeg。