シェアする

Raspberry Pi + nginx で低負荷RTMPサーバを構築する

シェアする

そもそもRaspberry PiでRTMPサーバを構築するのはかなり無理がある話で、接続クライアントが増えれば増える程、酷い時はRaspberry Piが落ちてしまう危険がある。

nginxを利用したRTMPサーバならRaspberryPiでも耐えうるRTMPサーバが構築出来てしまう
※メモリ消費が非常に優秀で100接続でも10MB程度の消費で収まる程

という事で以下に設定方法と直ぐ利用出来るサンプルを用意する

⒈nginxの構築

前に記事にした
高速かつ軽量で高機能なWEBサーバ【nginx】をRaspberry Piで運用する

では残念ながら動作しない、ソースからビルドし、RTMPモジュールを追加しなければならない
ついでに最新のnginxが入るので以下を行う

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

それぞれ解凍します。

$ tar xvzf nginx-x.x.x.tar.gz
$ unzip master.zip

ビルドします。

$ cd nginx-x.x.x/
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
$ make
$ sudo make install

⒉nginxに専用の設定を加える

/etc/nginx/sites-availableの中に、RTMPサーバの設定を記載する[rtmp-conf]を作成する

$ sudo vi /etc/nginx/sites-available/rtmp-conf
server {
        listen      8080;

        # RTMPステータス先XSLで出力される
        location /stat {
            rtmp_stat all;

            # Use this stylesheet to view XML as web page
            # in browser
            rtmp_stat_stylesheet stat.xsl;

            # 配信ステータス確認ページのパスファイル指定
            auth_basic "Restricted";
            auth_basic_user_file [サーバのルートディレクトリ]/stats/.htpasswd;
        }

        location /stat.xsl {
            root [サーバのルートディレクトリ]/stats/;
        }
     #location /his が配信先ディレクトリ、視聴先になる。
        location /hls {
            # Serve HLS fragments
            alias /tmp/nginx-rtmp;
        }
}
rtmp {
        server {
                listen 1935;
         #RTMPへのサクセスログ吐き出し先
                access_log logs/rtmp_access.log;

                ping 30s;
                ping_timeout 10s;
                #chunk_size 8192;
                #max_streams 10;
                drop_idle_publisher 15s;

                application live {
                        live on;

                        wait_video on;
                        #wait_key on;
                        meta copy;
                        #idle_streams off;
                        #publish_notify on;

                        #配信エンコーダーからの接続はローカルのみ(放送主)
                        allow publish 127.0.0.1;
                        allow publish 192.168.0.0/16;
                        allow publish 172.16.0.0/12;
                        allow publish 10.0.0.0/8;

                        deny publish all;

                        hls on;
                        hls_path live/ts;
                        hls_continuous on;
                        hls_playlist_length 18s;
                }
        }
}

/etc/nginx/sites-enabledの中に、作成した設定ファイルのシンボリックリンクを作る。シンボリックリンクの名前は、設定ファイルと同じ名前、今回の場合は[rtmp-conf]とする。

sudo ln -s /etc/nginx/sites-available/rtmp-conf /etc/nginx/sites-enabled

後はnginxを再起動するだけでRTMPサーバが出来上がる、とってもお手軽だ

sudo service nginx restart

後はエンコーダや配信ソフトで[rtmp://raspberrypiのip:1935/his/hoge]を配信先にすれば配信出来る
[hoge]の部分は半角英数字のみなら好きに変えられる、日本語は試していない
■ffmpegの場合の例

ffmpeg -loglevel verbose -re -i XXX.flv -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://raspberrypiのIP:1935/hls/hoge

視聴側は[http://raspberrypiのipもしくはドメイン:8080/his/hoge.m3u8]で視聴出来る

現在の配信ステータス確認は[http://http://raspberrypiのip:8080/stat]で見れる

たったこれだけで自家製RTMPサーバが出来上がってしまう、負荷もあまり無くとても良さげ
PHPとFlashPlayerを組み合わせる事で会員制の配信サイトを構築する事もとても簡単に出来てしまう
といっても最近は無料のストリーミングサービスが充実してきているので需要は無いかもしれないが
ストリーミングサービスを構築しようと考えている人の一つの手段となれば良いかと。
今回は記事にしない(面倒)がnginxは負荷分散処理が可能なので無論RTMPも可能であるという事
だから本格的な配信サービスを構築する基礎にも充分なりえる訳だ。

スポンサーリンク

シェアする

フォローする

スポンサーリンク

コメント

  1. […] Raspberry Pi + nginx で低負荷RTMPサーバを構築する | VariedTasteFinder […]