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でまともなストリーミング品質を維持しました。