crtmpserverでAXISカメラの映像を配信する

前回の Ubuntuでcrtmpserverを試す(その3) に引き続き、Ubuntuにインストールしたcrtmpserverパッケージを使用して、以下を参考にAXIS社製の監視カメラの映像を配信して見た。

www.computerglitch.net

処理フロー:[AXIS M3045-WV] → RTSP/RTP → [crtmpserver] → RTMP → [flowplayer]

【AXIS M3045-WVについて】

以下に記載の通り、有線LANと無線LANに対応したカメラで、今回は無線LAN設定を行った上で有線LANを接続した。

www.axis.com

【crtmpserverの設定】

/etc/crtmpserver/applications/flvplayback.lua の externalStreams に以下の設定を追加する。

    externalStreams =
    {
        {
            uri="rtsp://uername:password@address/axis-media/media.amp",
            localStreamName="M3045-WV",
            forceTcp=true
        }
    }

上記username、password、addressには実際のユーザー名、パスワード、カメラのIPアドレス(またはホスト名)を入れること。
設定を追加した後は service crtmpserver restart で再起動すること。

 【sample4.htmlの作成】

前回の Ubuntuでcrtmpserverを試す(その3) で作成したsample3.htmlと同じディレクトリに以下の内容でsample4.htmlを作成する。

<html>
    <head>
        <title>Play RTMP via crtmpserver</title>
        <script src="../flowplayer-3.2.13.min.js"></script>
    </head>
    <body>
        <a style="display:block;width:854px;height:480px;" id="player"></a>
        <script>
            $f("player", "../flowplayer-3.2.18.swf", {

                clip: {
                    url: 'M3045-WV',
                    live: true,
                    provider: 'rtmp'
                },

                plugins: {
                    rtmp: {
                        url: '../flowplayer.rtmp/flowplayer.rtmp-3.2.13.swf',
                        netConnectionUrl: 'rtmp://192.168.1.28/flvplayback'
                    }
                }
            });
        </script>
    </body>
</html>

上記 192.168.1.28 はサーバーのIPアドレスなので、インストール環境に合わせて適宜変更して欲しい。

【ブラウザで再生】

ブラウザで http://サーバーのIPアドレス/flowplayer/example/sample4.html にアクセスしてRTMPを再生する。

【動作確認】

  • FlowPlayerでの再生では遅延が3秒程度だったが、AndroidiOSのプレーヤーではもっと大きな遅延が発生した。
  • 3つのプレーヤーで同時に接続しても、crtmpserverのCPU使用率は1%に満たなかった。
  • カメラのLANケーブルを取り外すと一度映像が停止し、カメラの無線LANが自動的に有効になると映像が開始された。次にLANケーブルを取り付けると再び映像が停止し、カメラの有線LANが自動的に有効になると映像が開始された。

【まとめ】

crtmpserverがカメラへの接続リトライを行ってくれるので実用性が高いと思う。
サービスを停止せずにexternalStreamsをダイナミックに設定できないものか。