あかはば

ドローンやMacなどなど

動画配信

【未解決】h264_omxがNginxから実行できない

更新日:

ffmpegの動画エンコーダーにはソフトエンコードとハードエンコードがあります。ソフトエンコードはプログラムとCPUのチカラでエンコード処理をします。ハードエンコードはCPUに加えてGPUのチカラも借りて処理するので、変換速度はハードエンコードの方が早いです。ffmpegでは、一般的なH.264コーデック のソフトエンコードとしてはlibx264があり、Raspberry Pi用のハードエンコードとしてはh264_omxが用意されています。

コマンドラインから

$ ffmpeg -re -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;

と実行する分にはh264_omxのラズパイ用ハードエンコードが使えるのですが、nginxの中でexec_pushとして上記コマンドを実行するとうまく動きません。h264_omxの部分をlibx264に変えるとexec_pushとして実行できます。僕が持っているRaspberry Pi 4はメモリ2GBモデルで、topコマンドで確認する限りはエンコード中メモリがいっぱいいっぱいということはないのですが、、、ハードエンコードですとspeedが1倍を超えますので、リアルタイムエンコードもコマ落ちなどなくできていると思います。libx264の場合は、1を切ります。

画質はもしかしたらソフトエンコードの方が良いかもしれませんが、nginxのRTMP設定の中でh264_omxを使ってffmpegが実行できたら良いのになと思います。

解決法がわかるまでは、Windows環境の時と同じように、コマンドラインでffmpegを実行してストリーム名multiの動画を720にトランスコード してストリーム名liveに渡すことで対処します。

$ ffmpeg -re -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;

何かわかったらまた記事にしようと思います。

-動画配信
-,

Copyright© あかはば , 2020 All Rights Reserved Powered by STINGER.