Nginx rtmp配信 ffmpegを利用したマルチビットレート化成功

Nginxをrtmpサーバとして利用し、エンコーダから受信した1つのストリーミングをNginx側でffmpegを利用して再エンコし、3つに分ける。

http://nginx-rtmp.blogspot.jp/2013/07/hls-variant-playlist.html

利用するサーバ Cloudn上
Ubuntu Server v16.04.01 64bitにおいて

nginxをリスタート

再生用VideoJS HTMLの配置

sourceのrtmp urlは

の4種類をそれぞれのファイルで準備する

追記(経緯) 最初はエラーが出てうまくいかなかった。

webページにある通りの設定

/tmp/log

ffmpeg -formats |lessを見ると

とあるので、ffmpeg のオプションをlibfdk_aacからaacへ変更

まだ映像がでないので、エラーログを見ると

/tmp/log

となっていて、

aac -strict -2とした。

つまりこんな感じ

ただ、エンコードされrtmpで映像が確認できるようになったが、どのビットレートもちょいちょい止まる。そこで、サーバ性能を疑い、Cloudnで、一番高い8コア 16Gメモリにパワーアップして配信を開始してみたけどやっぱりだめ。

試しに、これもやってみた。

http://qiita.com/yayugu/items/d7f6a15a6f988064f51c

ffmpeg入れ変えた。

無数にこのエラーが出ている事を確認した。

とりあえずググって

http://comments.gmane.org/gmane.comp.video.ffmpeg.user/55889

So if it must be FLV _format_:
-c:v libx264 -f flv
or in your case:
-c:v copy -f flv

へぇ、コーデックはcopyってかける事を知り、

としたら止まることなく配信できると思ったら、ビデオサイズは全く変わっていない事に気づいた。つまり再エンコしてない状態だと思う。

色々と調べると、ffmpegエンコの際にもバッファを持てる事が分かり以下を追加。

rtbufsize が映像受取時のバッファ(溢れないように)
vbf-bufsizeが、エンコ時に動きが激しい時などに利用されるバッファ

を設定した。これで改善するかと思ったら、いい時と悪い時があり、最終的に再エンコを1本にしたら安定して配信できるようになった。

さらに設定を重ね、ビットレートにもbufferを持てる事が分かった

http://www.wikihouse.com/netvista/index.php?%BA%C7%BF%B7ffmpeg%2F%B9%E2%C5%D9%A4%CA%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3%20-bufsize

レートコントロールのバッファサイズ (in bits)。デフォルト=0 (指定なし)。
※配信ビットレートの2倍までにする事

これをつける事で2つまでの再エンコはできるようになった。ただ、3つめを加えるとどうしても、映像が時々止まってしまう。

最後の決め手になったのがこれ、

https://trac.ffmpeg.org/wiki/EncodingForStreamingSites
-preset

This provides the compression to encoding speed ratio.
ultrafast,superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo

エンコードの圧縮スピード比率を変える事ができる。恐らくだけど、これを早い側 「今回の設定ではこれveryfast」にすると、CPU使用率が上がるのと圧縮スピードを優先させ、その代わり品質は落ちるのだと思う。

ちなみに Cloudn 最安プランでこの設定を動かすと

Plan v1(1CPU/2GB RAM) 月額上限3,400円

と、かなり高負荷で安定稼働は見込めない。

Plan v2(2CPU/4GB RAM) 月額上限6,200円に変更して

30%程度で推移するのでこれなら使えそう。

Cloudn料金

http://www.ntt.com/business/services/cloud/iaas/cloudn/price.html#tab1-4

参考
http://www.wikihouse.com/netvista/index.php?%BA%C7%BF%B7ffmpeg%2F%B9%E2%C5%D9%A4%CA%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3
https://trac.ffmpeg.org/wiki/StreamingGuide
https://sites.google.com/site/streamsetting/home/ffmpeg