Raspberry Pi 4 2GBモデルを使ってffmpeg h264_omxのハードエンコードにてリアルタイムにトランスコード して配信中継しているわけですが、プロセス重複の問題もあり、nginx-rtmpからffmpegコマンドを実行するのではなく、外部にてffmpegを起動してストリームを読み込んでnginxに渡すという方法をとることにしています。
さて、Raspberry Piにsshにて接続したMacbook Proのターミナル画面を見ていますと、何やらエラーらしきものがズラズラ出て参ります。
30fps / h264_omx でエンコード
参照画像が失われているとか色々・・・・
ネットで調べてみますと、これはコマ落ちというかパケット落ちのような状態で、どうやらRaspberry Piの処理が追いついていない様子です。
確かにspeedの項目も0.958など1を下回った数値となっています。1x以上がリアルタイムに処理できているという数値ですので、1を下回るということはリアルタイムに処理ができてないということになります。
今度はフレームレートを30fpsから24fpsに下げて試してみましょう。
24fps / h264_omx でエンコード
Speedは1.02と1を上回っています。
特に問題なさそうです。
前のイベントログが残っています。ご承知おきください。
ソフトエンコードでやってみるとどんな感じでしょうか?
30fps / libx264 でエンコード
あれ?speedが1を上回っていますね。しかし、、、
動画のビットレートが上がらず、フレームレートが低いと叱られます。
24fpsでも試してみましょう。
24fps / libx264 でエンコード
Speedは1.06と1を上回っています。が、、、
映像のフレームレートが低いと叱られます。
まとめるとこんな感じです。
h264_omx | libx264 | |
---|---|---|
30fps | コマ落ち/パケットロス | フレームレートが低いと叱られる |
24fps | ◯ | フレームレートが低いと叱られる |
Raspberry Pi 4 2GBモデルでリアルタイムにトランスコード して配信中継するには、24fpsでh264_omxのハードエンコードするのがベストという結論になりました。
もしかしたらffmpegのオプションでこの辺りの問題が解決するのかもしれません。詳しい方ぜひご教示ください。以下に使っているffmpegコマンドを以下に示します。
/usr/bin/ffmpeg -i rtmp://localhost:1935/multi/test -c:v h264_omx -vb 6000k -vf scale=-1:720 -acodec copy -f flv rtmp://localhost:1935/live/test;