Nginx でマルチビットレート配信

1種類のビットレートでエンコードした映像を、映像配信サーバでさらに複数のビットレート(マルチビットレート)に変換して映像配信を行う。
rtmpでも、hlsもOK。hls配信すれば、iPhoneでも楽々見れる。

仕組み

エンコーダ⇒nginx⇒ffmpegで再エンコードnginx⇒クライアント

となっているため、ffmpegをインストールする必要がある。

ffmpegのインストール
https://www.assetbank.co.uk/support/documentation/install/ffmpeg-debian-squeeze/ffmpeg-debian-jessie/
deb http://www.deb-multimedia.org jessie main non-free
deb-src http://www.deb-multimedia.org jessie main non-free

apt-get install build-essential libmp3lame-dev libvorbis-dev libtheora-dev libspeex-dev yasm pkg-config libfaac-dev libopenjpeg-dev libx264-dev

wget http://ffmpeg.org/releases/ffmpeg-3.1.3.tar.bz2

tar xvjf ../software/ ffmpeg-3.1.3.tar.bz2

cd ffmpeg-3.1.3

./configure –enable-gpl –enable-postproc –enable-swscale –enable-avfilter –enable-libmp3lame –enable-libvorbis –enable-libtheora –enable-libx264 –enable-libspeex –enable-shared –enable-pthreads –enable-libopenjpeg –enable-libfaac –enable-nonfree

make

make install

# /sbin/ldconfig

○nginx マルチビットレートに対応させる
http://nginx-rtmp.blogspot.jp/2013/07/hls-variant-playlist.html
コンフィグ最終行に追加
vi /etc/nginx/nginx.conf
rtmp {
server {
listen 1935;

application src {
live on;

exec ffmpeg -i rtmp://192.168.0.98/src/$name
-c:a libfdk_aac -b:a 64k -s 320×180 -c:v libx264 -b:v 256k -f flv rtmp://192.168.0.98/hls/$name_low
-c:a libfdk_aac -b:a 128k -s 640×360 -c:v libx264 -b:v 512K -f flv rtmp://192.168.0.98/hls/$name_mid;
}

application hls {
live on;

hls on;
hls_path /usr/local/nginx/html/live/hls;
hls_nested on;

hls_fragment 10s;

hls_variant _low BANDWIDTH=320000;
hls_variant _mid BANDWIDTH=640000;
}
}
}
ここまでで、何とか1本送ると、マルチビットレートになった

この状態でもマルチビットレート映像受信状況を確認できる
vlc player などで
メディアネットワークストリームを開く
rtmp:// 192.168.0.98/hls/test_low
rtmp:// 192.168.0.98/hls/test_mid

これはあくまでもrtmp配信(hlsじゃない)

○web player(videojs) で映像を受信する
videojsは、基本的にrtmpは再生できるが、hlsを受信再生するためには、

videojs でhlsが扱えるようにする
apt-get install npm git

git clone https://github.com/videojs/videojs-contrib-hls
cd videojs-contrib-hls
npm i
npm run build

git clone https://github.com/videojs/videojs-contrib-media-sources.git
cd videojs-contrib-media-sources
npm i
npm run build

とする事で、
dist/ の中に
videojs-contrib-media-sources.min.js
videojs-contrib-hls.min.js

ができるので、Playerからアクセスできる位置に配置する

○videojs を組み込んだhtml
まだ、内容的には中途半端だけど、とりあえずこれでhls配信ができるようになった

vi /usr/local/nginx/html/live/m3u8.html

○ブラウザからの確認
http://192.168.0.98/live/m3u8.html

○ffmpegでの再生
ffplay /usr/local/nginx/html/live/hls/test.m3u8

※nodejsをアップデートしたかったら(結局やらなかった)
n という管理ツールでnodejsをアップデートする方法を試してみた。


まずは普通にaptでパッケージを入れる
# apt-get update
# apt-get install nodejs
# apt-get install npm
npm自身をアップデートする
# npm update -g npm
nをインストールする
# npm cache clen
# npm install -g n
nからnodejsを更新する(最新の安定版にする)
# n stable
シンボリックリンクを張る
# ln -sf /usr/local/bin/node /usr/bin/node
手順1で入れたnodejsを削除する
# apt-get autoremove nodejs

1件のコメント

コメントは停止中です。