シェアする

nginxでrtmp配信サーバを構築する【完全版】

VPSもしくは自宅鯖で配信サーバの構築から配置までを一通り紹介する

但し、実際に公開して配信するには著作権に十分注意する事、著作保護された楽曲を流す場合は必ずJasracとの契約を結ぶ事(そうしないと罰則アリ)

プライベートで公開するとしてもそのサーバが外部(WWW)から接続出来る場合は同様に罰則対象となるので注意

今回はCentosでもUbuntuでもほぼ変わらない、各自足らない部分は補足する事

また、今回の紹介で出来るのは配信し、とりあえず見れるようになるだけ

実際にサービスとして展開する場合はRTMPに対するビットレート制限や登録機構など各自用意する必要がある

■構築環境

OS:Centos latest

VPS:Conoha VPS 2G RAM

スポンサーリンク

1.RTMPモジュールを追加したnginxをインストールする

※既にインストールしていて、WEBを稼働している場合※
※以下のコマンドで既存nginxのビルドオプションをチェック※

nginx -V

次にnginx,rtmpモジュールをDLし展開

wget http://nginx.org/download/nginx-1.8.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

tar xvzf nginx-1.8.0.tar.gz
unzip master.zip

先程確認したビルドオプションに【–add-module=../nginx-rtmp-module-master】を加え、ビルドする
新規の場合とりあえず【–with-http_ssl_module –add-module=../nginx-rtmp-module-master】で良い

cd nginx-1.8.0/

./configure 先程確認したオプション  --add-module=../nginx-rtmp-module-master
make -j2

ビルドが完了したらしっかり追加されているかチェック

./objs/nginx -V

現在のサービスで利用している設定が通るかチェック

sudo ./objs/nginx -t -c /etc/nginx/nginx.conf

バイナリのアップグレード

sudo make install

現在のマスタープロセスPIDを確認しUSR2シグナル、WINCHシグナル、QUITシグナルの順で旧プロセスから新プロセスへの移行を行う

//rootが実行しているnginxプロセスのPIDを確認
ps aux |grep nginx
//確認したプロセスへUSR2シグナルを送信(新プロセスとの並列起動)
sudo kill -USR2 PID番号
//次にWINCHシグナルを送信、少し待つと良い(リクエスト処理終了次第旧プロセス破棄)
sudo kill -WINCH PID番号
//最後にQUITを送信し旧マスターを破棄
sudo kill -QUIT PID番号

以上でRTMPモジュールの入ったnginxへ何の障害も無く置き換わる

2.NginxへRTMPモジュールの設定を加える

設定ファイルへrtmpセクションを追加します【nginx.conf】

rtmp {
        server {
                listen 1935;
                application live {
                    live on;
                    hls  on;
                    record off;
                    hls_path /var/www/vhosts/default/live/hls;

                    hls_fragment 1s;

                    hls_type live;
                }
        }
}

各項目を説明します

  • listen:rtmpポートを指定します、1935はrtmpでデフォルトに利用されます
  • application:ここで指定した名称がURLの一部になります 今回の例の場合【rtmp://xxxxxxx/live】
  • live:ライブストリーミングを有効にします
  • hls:HTTP Live Streamingの略で主にモバイル端末向けのファイルを生成する
  • record:録画を残すかどうか
  • hls_path:hlsファイルを生成するパス、この指定は必ずWEB上からアクセス出来るパス(ドキュメントルート以下)でなければならない
  • hls_fragment:hlsファイルを生成する頻度、短い程低遅延だが鯖への負荷が高く、長いと負荷が少なくなるが遅延大
  • hls_type:hlsファイルの生成タイプ、今回rtmpストリーミングなのでlive

これで大体解ったと思います。

その他指定できるオプションは以下を参照して下さい

nginx-rtmp-module - NGINX-based Media Streaming Server

3.視聴用のプレイヤーを設置する

とりあえず視聴できる様にしたいので既に出来上がっているプレイヤーを用意します

//ヘッダーに記載
<link href="http://vjs.zencdn.net/4.6/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/4.6/video.js"></script>

//配置したい場所へ記載
<video id="rtmp_test" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="800" height="450" data-setup="{}">
<source src="rtmp://xxxxxxxx/nginxで設定したapplication名/好きな英数字" type="rtmp/mp4" />
</video>

各項目説明します

  • id:この要素の名前、好きな名前でOK(英数字ハイフンアンダーバーのみ)
  • class:video.js用指定
  • autoplay:自動再生機能
  • controls:コントロールUIの表示
  • width:横幅
  • height:縦幅
  • data-setup:その他オプションコマンド追記部
  • src:RTMPURL、この部分は以下の構成で決まる
    rtmp://ドメイン/nginx.confで設定したrtmpアプリケーション名/好きな英数字
    配信ツールで設定する場合は以下の様になる
    ストリーミングURL:rtmp://ドメイン/nginx.confで設定したrtmpアプリケーション名
    ストリームキー:好きな英数字
  • type:配信タイプ、”rtmp/mp4″はPC、”application/x-mpegURL”はモバイル

仕組みのまとめ

rtmp://自分のドメイン/nginx.confで設定したrtmpアプリケーション名/好きな英数字

ストリーミングURL:rtmp://ドメイン/nginx.confで設定したrtmpアプリケーション名
ストリームキー:好きな英数字

つまりnginx.confでAPP名を指定したら後の文字列は【接続側が自由に決める事が出来る】という事

但し、同時にWEBプレイヤー側でも同じURLにしなければ当然視聴は出来ないので

簡単にPHPで登録機構を設け、上記の例でいう【live/】以降をユーザー個別に生成、プレイヤー側も同様のURLで生成してあげれば簡単に登録制配信サーバが出来上がる。

一通り流れさえ掴めればとても簡単に配信サイトを組む事が出来るだろう

余談

wordpressと組み合わせて簡単に会員制ライブ配信サイトなんて出来そうですね、今度暇があれば作ってみようと思います

※追記

rtmpよりもWEBRTCの方が面白く手軽だったので乗り換えてみた

今度記事書きます

スポンサーリンク

シェアする

フォローする

スポンサーリンク

コメント

  1. […] oduleはついていないので、nginxのビルドからやり直す必要がある。 同じようなことをしている方はそれなりにいるが、このサイトが最もわかりやすかった。 http://variedtastefinder.jp/blog/?p=1782 […]