nginx-rtmpで動画の転送先を動的に変更する(on_publish)
以前、pushで別のサーバーへ動画を転送してみました。nginx-rtmpで動画の転送(push)
$appや$nameといった変数が利用できますが、
「/live/to_a_serve」は「rtmp://a.example.com/live/livekey」
「/live/to_b_serve」は「rtmp://b.example.com/live/livekey」
というような柔軟な転送先の指定は行なえません。
調べてみたところ、認証で使用したon_publish
nginx-rtmp 動画配信にパスワード認証を設定する(on_publish)
こちらを用いて転送先を指定できるようです。
https://stackoverflow.com/questions/43568168/how-to-change-nginx-rtmp-stream-name-after-call-on-publish
レスポンスコード302を指定して転送先を応答すればよさそう。
nginx-rtmpの設定
nginxの設定を変更します。
$ sudo vi /etc/nginx/nginx.conf
on_publishでpush.phpを呼び出すよう構成しました。
- rtmp {
- server {
- listen 1935;
- chunk_size 4096;
- access_log /var/log/rtmp_access.log;
- application live {
- live on;
- record off;
- on_publish http://localhost/push.php;
- notify_method post;
- }
- }
- }
設定を反映します。
$ sudo service nginx reload
呼び出されるpush.phpでは転送先を応答します。
・push.php
- <?php
- //file_put_contents('/tmp/on_publish.txt', var_export($_POST, true), FILE_APPEND);
- header('Location: rtmp://192.168.11.103:1935/live/another_key');
接続時、どんなデータがpostされるかダンプしてみました。
on_publishを設定したサーバーに対し動画の配信を開始すると、こんなデータがpostされています。
- array (
- 'app' => 'live',
- 'flashver' => 'FMLE/3.0 (compatible; FMSc/1.0)',
- 'swfurl' => 'rtmp://192.168.11.102/live',
- 'tcurl' => 'rtmp://192.168.11.102/live',
- 'pageurl' => '',
- 'addr' => '192.168.11.3',
- 'clientid' => '1',
- 'call' => 'publish',
- 'name' => 'livekey',
- 'type' => 'live',
- )
転送先のrtmp://192.168.11.103:1935/live/another_keyを確認すると、
ちゃんと動画の閲覧が行えました。
【参考URL】
https://stackoverflow.com/questions/43568168/how-to-change-nginx-rtmp-stream-name-after-call-on-publish
https://github.com/arut/nginx-rtmp-module/blob/master/ngx_rtmp_notify_module.c#L1005
- 関連記事
-
- ffmpeg mp4ファイルをrtmpでストリーム配信する
- nginx-rtmp on_publishで呼び出すurlにhttps接続を使用する
- nginx-rtmpで動画の転送先を動的に変更する(on_publish)
- nginx-rtmp 動画配信にパスワード認証を設定する(on_publish)
- nginx-rtmpで動画の転送(push)
コメント