nginx rtm-module ダッシュボードを作る

さくらのクラウドにnginx rtmp-module で映像配信サーバを構築
1.統計情報が確認でき
2.録画スタートストップ

3.録画状況の確認(Ajax非同期通信でファイルサイズを確認)

ができるダッシュボードホームページを作成する

統計情報は1分ごとに書き換え(ホームページを自動で再読み込み)
録画状況の確認は、非同期通信でファイルサイズに変化があったら書き換える

ステータスページは、8080で公開し、適当にアクセスされないようにする。それからreferer制御もして、localhost以外からのアクセスは受け付けないようにする。

nginx.conf
    server {
       listen 8080;
       server_name localhost;

        # rtmp control 録画スタート、ストップコントロールできるようにする localhost以外からのアクセスは受け付けない
        location /control {
                valid_referers server_names sakura.hoge.or.jp;
                if ($invalid_referer) { return 403; }
                rtmp_control all;
        }

        location /stat {
                valid_referers server_names sakura.hoge.or.jp;
                if ($invalid_referer) { return 403; }
                rtmp_stat all;
                rtmp_stat_stylesheet /stat.xsl;
        }

        location /stat.xsl {
            root html;
        }

    } 

#映像配信部分

           application multi {
                live on;
                #録画を手動でできるようにする
                record all manual;
                #ファイル名をユニークにし、上書きされないようにする
                record_unique on;
                record_path /tmp/rec;
                #録画が完了したら、yamdiを利用してflvのキーを生成しなおす(これをすると、解像度情報が正しくなりシークもできるようになる)
                exec_record_done /usr/sbin/yamdi -i $path -o /tmp/rec2/$basename;
           }

※rec,rec2ディレクトリの権限はwww-data で書き込みできるようにしておく事

sudo mkdir rec
sudo mkdir rec2
sudo chown www-data:www-data rec
sudo chown www-data:www-data rec2

ダッシュボードテンプレートファイルの配置

stat.xslはテンプレートの役割をする。htmlフォルダ(ルートフォルダ)にコピーしておく

sudo cp ~/nginx-rtmp-module/stat.xsl /usr/local/nginx/html/

jQueryの準備

録画状況の確認を行う。ファイルに変更があったら再読み込みするため。

# wget https://code.jquery.com/jquery-3.1.1.min.js

ダウンロードしたファイルは/usr/local/nginx/html/jsフォルダにでも配置します。

PeriodicalUpdaterをダウンロード、これもjsフォルダに配置します

js# git clone https://github.com/RobertFischer/JQuery-PeriodicalUpdater.git
js/JQuery-PeriodicalUpdater# mv jquery.periodicalupdater.js ../

このスクリプトでファイルに変更があれば、再読み込みする皓ができます。

Cronで2秒ごとにファイルサイズテキストを作成

* * * * *  for i in `seq 0 2 59`;do (sleep ${i}; sudo sh -c "ls -l /tmp/rec > /usr/local/nginx/html/dashbord/rec.txt") & done;

これで1分間隔で再読み込みする

ダッシュボードHTMLを作成します

ミソはここ。60秒ごとに全体を再読み込みします。

<SCRIPT LANGUAGE="JavaScript">
setTimeout("location.reload()",1000*60);
</SCRIPT>

実際のダッシュボードです

<html>
  <head>
    <script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
    <script type="text/javascript" src="js/jquery.periodicalupdater.js"></script>

<SCRIPT LANGUAGE="JavaScript">
<!--
setTimeout("location.reload()",1000*60);
//-->
</SCRIPT>

    <script type="text/javascript">
      $(function(){
        $.PeriodicalUpdater('./rec.txt',{
          method: 'get',
          minTimeout: 1000,
          type: 'html',
          multiplier:1,
          maxCalls: 0
        },

        function(data){
          $("#rec_txt").text(data);
        });
      });

    </script>

  </head>
  <body>
    <H3>Sakura Dashbord</H3>
        <!-- 録画スタートストップURLリンク -->
        <a href="http://sakura.hoge.or.jp:8080/control/record/start?app=multi&name=test" target="_blank">Start rec</a>
        <a href="http://sakura.hoge.or.jp:8080/control/record/stop?app=multi&name=test" target="_blank">Stop rec</a>
        <div  style="clear:both;font-size:12px;" id="rec_txt">rec status</div>
        <div style="clear:both;font-size:10px;">
             <iframe frameBorder="0" seamless src="http://sakura.hoge.or.jp:8080/stat" width="1300px" height="600px"></iframe>
        </div>

  </body>
</html>