nginx rtmp ライブストリーミングを録画 リモート操作

nginx rtmp のライブストリーミングをサーバに録画したい。
録画する際に、いちいちコンフィグを書き換え、サーバを停止・起動していたはサービスにならない。

なんと便利な事に、htmlを作成する事で、リモート操作する事が可能

リモート操作のためには、nginx.confの設定でmanualを入れる事、

                record all manual;

https://github.com/arut/nginx-rtmp-module/wiki/Control-module
rtmp_controlを受け付けるようにする
        # rtmp control
        location /control {
            rtmp_control all;
        }

そしてここにアクセスすると、録画が開始される
http://hanako.hoge.jp:8080/control/record/start?app=multi&name=test

ここにアクセスすると、録画が止まる
http://hanako.hoge.jp:8080/control/record/stop?app=multi&name=test

severディレクティブはこんな感じ

誰でも録画されちゃうと嫌なので、basic認証がかかった位置にHTMLを配置し、refererを見てこのHTMLからアクセスがあった場合にしか録画が開始できないようにした。

    server {
       listen 8080;
       server_name localhost;

       location /on_play {

          # set connection secure link
          secure_link $arg_st,$arg_e;
          secure_link_md5 smbksecretkey$arg_app/$arg_name$arg_e;

          # bad hash
          if ($secure_link = "") {
             return 501;
          }

          # link expired
          if ($secure_link = "0") {
             return 502;
          }

          return 200;
       }

        # rtmp control
        location /control {
	    #refererを見て、このサーバからのアクセスでなければ受け付けない
	    valid_referers server_names hanako.hoge.jp;
	    if ($invalid_referer) { return 403; }
	    #リモートコントロールを受け付ける
            rtmp_control all;
        }

    }

 

rtmpディレクティブはこんな感じ

rtmp {
        server {
        listen 1935;
        buflen 5s;
        notify_method get;
        chunk_size 8192;

           application multi {
                live on;
                record all manual;
                record_path /tmp/rec;
		 #作成する録画ファイルにタイムスタンプを付け、同じ名前にならないようにする
                record_unique on;
                #録画した後 yamdi でキーフレーム作成の処理をする
                exec_record_done /usr/sbin/yamdi -i $path -o /tmp/rec2/$basename;
                allow publish 127.0.0.1;
                on_play http://localhost:8080/on_play;
           }
}

 

録画開始・停止htmlはこんな感じ

<html>
<body>
<a href="http://hanako.hoge.jp:8080/control/record/start?app=multi&name=test" target="_blank">Start rec</a>
<a href="http://hanako.hoge.jp:8080/control/record/stop?app=multi&name=test" target="_blank">Stop rec</a>
</body>
</html>