ffmpeg/v4l2 Logitech C920のキーフレームレートをYouTubeライブに調整

ffmpeg/v4l2 Logitech C920のキーフレームレートをYouTubeライブに調整

Logitech c920からffmpegを介してYouTubeにビデオをライブストリーミングしようとしています。 Twitchで動作する設定があり、YouTubeは次のメッセージでストリームを拒否します。

4秒以下のキーフレーム頻度を使用してください。現在、キーフレームが十分に頻繁に送信されないため、バッファリングが発生します。現在のキーフレーム頻度は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でまともなストリーミング品質を維持しました。

関連情報