nginx でマルチビットレート

nginxでrtmpを受信し、hlsで配信するのは安定的になってきた。
これをマルチビットレート対応させたい。

ffmpeg で再エンコして、配信する事が可能になってはいるのだが、、、。
ffmpegが噛むとどうもうまくいかなくなる。

初めて数分は思った通りになるのだが、CPUにちょっとした負荷がかかるタイミングなのか、ファイルサイズの小さいtsファイルが無数にできるようになる。ちゃんとエンコードが届いていない感じ。

下記設定は
1.ビットレートは高画質で1本受け、これをそのままHLS配信
2.受けたものをそのままpush してapplication recieveに渡す
3.application receiveで、ffmpegかけて、マルチビットレート化する(これは複数本できるが、負荷を減らすため1本で試験)
4.application multiで受けてhls化する

この設定で最初の数分はうまくいく。メインのlive でhls化しているところはうまく配信が続く。ffmpegかけた後の multi では、tsファイルは最初は順調だが、15,16ファイル目あたりから、ファイルサイズの小さいtsファイルが大量にできるようになる。クライアントでは、映像が止まってしまう。

ffmpegがうまく動画変換できてないんじゃないかな。

rtmp {
server {
listen 1935;
application live {
live on;
hls on;
record off;
hls_path /usr/local/nginx/html/live/hls;

hls_type live;

push rtmp://localhost/recieve/test;
}

application recieve {
live on;

exec ffmpeg -i rtmp://localhost/recieve/$name
-c:a libfdk_aac -b:a 64k -s 320×180 -c:v libx264 -b:v 256k -f flv rtmp://localhost/multi/$name_hi;
}

application multi {
live on;
hls on;
hls_path /usr/local/nginx/html/multi;
hls_nested on;
hls_type live;
hls_cleanup off;

hls_variant _hi BANDWIDTH=320000;
}
}
}