调整 ffmpeg/v4l2 Logitech C920 到 YouTube Live 的关键帧速率

调整 ffmpeg/v4l2 Logitech C920 到 YouTube Live 的关键帧速率

我正在尝试通过 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 下保持了不错的流媒体质量。

相关内容