h264_omxがnginx-rtmpから利用できない問題。一応の解決策が見つかりました。方法は、『nginx.confで設定するuserをデフォルトのwww-dataではなく、piなどシェルスクリプト、コマンドを実行できるユーザーにする』でした。nginxはデフォルトではユーザーwww-dataのもとで動くことになっています。このユーザーとユーザーpiを比べてみると、
www-dataはログインできないユーザーに設定されています。これはセキュリティの観点からいうとごく普通の対応ですが、今回はrtmpモジュールの中でexecコマンドでffmpegを実行したいので、シェルコマンドが実行できないユーザーでは困ります。ですので、このwww-dataをpiに変更してみました。
nginx.conf 1行目
変更前: user www-data;
変更後: user pi;
これで、execによってffmpegコマンドを実行できるようになりました。しかし一つ疑問があります。ログインできない(シェルコマンドを実行できない)ユーザーww-dataでnginxを利用していた時も、ffmpegを利用してlibx264ではエンコードできました。h264_omxが利用できなかっただけです・・・・。
ログインできてシェルコマンドを実行できるユーザーじゃないとGPUを利用したハードエンコードは利用できないということなのかも知れませんね。
ネットを探していたら、ffmpegコマンドをff.shなどシェルスクリプトに記述して、ff.shに実行権限を与えて、
exec\_push /etc/nginx/ff.sh;
とrtmp.confに記述すると紹介されていましたが、userにpiを設定して
exec\_push /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;
としても動かすことができました。