我正在尝试通过 ffmpeg 将视频从 Logitech c920 实时流式传输到 YouTube。我有一个可以在 Twitch 中使用的设置,但 YouTube 拒绝了该流并显示以下消息:
请使用四秒或更短的关键帧频率。目前,关键帧发送得不够频繁,这将导致缓冲。当前关键帧频率为 9.9 秒。
我的命令如下所示:
ffmpeg \
-ar 44100 \
-acodec pcm_s16le \
-f s16le \
-ac 2 -i /dev/null \
-f v4l2 \
-codec:v h264 \
-framerate 60 \
-video_size 1920x1080 \
-i /dev/video0 \
-c:v copy \
-c:a aac \
-f flv \
-strict -2 \
rtmp://a.rtmp.youtube.com/live2/$STREAM_KEY
ffmpeg 在日志中给出了以下消息:
[video4linux2,v4l2 @ 0x2965ec0] The driver changed the time per frame from 1/60 to 1/30
有谁知道如何强制相机、v4l2 或 ffmpeg 以合适的速率提供关键帧?
谢谢。
答案1
我设法使用以下命令让它在 YouTube Live 上运行:
ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f v4l2 -input_format h264 -i /dev/video0 -codec:v copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/REMOVED
我可以通过执行以下操作来设置分辨率:
v4l2-ctl --device=/dev/video0 --set-fmt-video=width=1280,height=720
ffmpeg 输出如下所示:
Stream #1:0: Video: h264 (Constrained Baseline), yuvj420p(pc), 320x240 [SAR 1:1 DAR 4:3], -5 kb/s, 30 fps, 30 tbr, 1000k tbn, 60 tbc
最终 YouTube 抱怨关键帧问题,但它设法在 1080p 下保持了不错的流媒体质量。