本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
さくらのクラウドにnginx rtmp-module で映像配信サーバを構築
1.統計情報が確認でき
2.録画スタートストップ
3.録画状況の確認(Ajax非同期通信でファイルサイズを確認)
ができるダッシュボードホームページを作成する
統計情報は1分ごとに書き換え(ホームページを自動で再読み込み)
録画状況の確認は、非同期通信でファイルサイズに変化があったら書き換える
nginx.confの設定
ステータスページは、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>