5

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

命令

我已经设法使用 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 发送错误 10053

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

4

3 回答 3

2

您的命令有一些问题:

  • 您没有音频流。使用时dshow您还需要按照此处audio的说明进行指定。

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

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

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

    YouTube推荐

    720p

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

    你至少应该放1800k.

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

于 2015-11-13T09:16:24.370 回答
2

如果您有一个 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。

于 2017-03-12T12:25:24.610 回答
1

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

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

  2. 在 Ubuntu 上编译 FFmpeg https://gist.github.com/faleev/3435377

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

  4. 对于静态视频文件:

    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)"
    
  5. 对于仅输出 rtsp 视频的 IP 摄像机流式传输视频:

    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)"
    
于 2016-03-15T09:06:04.487 回答