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を呼び出すよう構成しました。


  1. rtmp {
  2.     server {
  3.         listen 1935;
  4.         chunk_size 4096;
  5.         access_log /var/log/rtmp_access.log;
  6.         application live {
  7.             live on;
  8.             record off;
  9.             on_publish http://localhost/push.php;
  10.             notify_method post;
  11.         }
  12.     }
  13. }



設定を反映します。


$ sudo service nginx reload




呼び出されるpush.phpでは転送先を応答します。

・push.php


  1. <?php
  2. //file_put_contents('/tmp/on_publish.txt', var_export($_POST, true), FILE_APPEND);
  3. header('Location: rtmp://192.168.11.103:1935/live/another_key');



接続時、どんなデータがpostされるかダンプしてみました。
on_publishを設定したサーバーに対し動画の配信を開始すると、こんなデータがpostされています。


  1. array (
  2. 'app' => 'live',
  3. 'flashver' => 'FMLE/3.0 (compatible; FMSc/1.0)',
  4. 'swfurl' => 'rtmp://192.168.11.102/live',
  5. 'tcurl' => 'rtmp://192.168.11.102/live',
  6. 'pageurl' => '',
  7. 'addr' => '192.168.11.3',
  8. 'clientid' => '1',
  9. 'call' => 'publish',
  10. 'name' => 'livekey',
  11. 'type' => 'live',
  12. )



転送先のrtmp://192.168.11.103:1935/live/another_keyを確認すると、
ちゃんと動画の閲覧が行えました。

a38_01.png


【参考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

関連記事

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ