動画配信技術Advent Calendarの14日目です。
といってもこのアドベントカレンダーめちゃくちゃ過疎っていて僕が最初の投稿になります。
観ている人どこまでいるんだろう・・・・
2018/07/03追記
なんだか地味にみなさんに閲覧いただけてるようで、じわじわと閲覧数もいいねも増えています。
ニッチなモノではありますが、需要は0ではないんですね。
最後に新たに一部追記を書かせていただきました。
定点カメラを様々な用途で利用している企業も多いと思います。
例えばですが、防災用途だったりテレビのお天気のバックに流す映像用途だったり・・・・
その定点カメラの映像をインターネット上でも公開できないか?という相談がいくつか来ます。
基本的にはHDMIやRCA端子(赤白黄のケーブル)に変換をかけてもらって、エンコーダを用意していただくというのが通常回答になりますが、
予算などさまざまな要因があり上記の事ができないといった事もあると思います。
今回はRTSPをRTMPに変換してストリーム配信をしてみましょうという事で書きます。
#必要なモノ(物理)
RTSPサーバ機能を有しているカメラ
配信サーバ
変換サーバ(LANが2つ以上orVLANが利用できる環境を推奨)
※スペック的に問題がなければ変換サーバと配信サーバは同一のものでも構いません
#必要なモノ(ソフト)
OS:LinuxOS
RTMP/HLS配信:nginx(配信サーバにインストール)
RTSP→RTMP変換:ffmpeg(変換サーバにインストール)
#配信サーバ
nginxでのRTMP/HLS配信は昨年のnginxアドベントカレンダーで掲載した
nginxでストリーミングサーバを立ててライブ配信する。
を参照に構築ください。
Adobe Media ServerやWowzaを利用しても問題ありません。
#変換サーバ
ffmpegのインストールはソースから入れるのは結構事前準備(依存ライブラリが多い)が大変ですが根気よく。
(参考)CentOS6でインストールしたもの
Yasm>libx264>libfdk-aac>mp3lame>libvopus>libogg>liborbis>libvpx>libfaac>ffmpeg>MP4Box
準備が完了したら以下のコマンドを
ffmpeg -i rtsp://ユーザ名:パスワード@カメラのIP/カメラ設定名.amp -c h264 -an -r フレームレート -s 映像サイズ -b:v 映像ビットレート -f flv rtmp://配信サーバIP/プロジェクト名/ストリームキー
例) ffmpeg -i rtsp://hoge:fuga@192.168.0.1/camera.amp -c h264 -an -r 15 -s 720x406 -b:v 512k -f flv rtmp://10.0.0.1/live/camera1
パラメータ | 設定項目 | 例の設定内容 |
---|---|---|
-c | 映像コーデックの指定 | H.264でエンコード |
-an | 音声コーデック | なしに設定 |
-r | フレームレートの指定 | 15fpsに設定 |
-s | 映像サイズ | 720x406に設定 |
-b:v | 映像ビットレート | 512Kbpsに設定 |
-f | アウトプット | flv(rtmp)に設定 |
定点カメラなどはフルHD(1080p)などで配信設定されている場合もあるので配信用にサイズは調整するのが望ましいです。
フレームレートはお好みですが、定点カメラなどであればそんなに高いフレームレートも必要にならないと思います。
エンコードを開始したら各端末で確認をしてみましょう!
#今後書いていきたい事
今回、カメラのサーバが何らかの原因で停止した場合、ffmpegが停止してしまうためサーバが復旧してもエンコードの自動復旧ができません。
rtmpdumpを利用してその状況を監視し、もし異常であればffmpegを立ち上げ直す等の回避策を現在考えています。
判明したらここでご紹介できればと思っています。
#ということで↑について書いてみた(2018/07/03追記)
結論として、RTMP配信サーバから常に取りに行くような形にしてみました。
配信側のnginx.confの1935ポートの部分を下記のような形で書きます。
rtmp {
server {
listen 1935;
application live1 {
exec /usr/local/bin/ffmpeg -i rtsp://hoge:fuga@192.168.0.1/camera.amp -c h264 -an -r 15 -s 720x406 -b:v 512k -f flv rtmp://10.0.0.1/live/camera1 2>>/tmp/log;
live on;
wait_video on;
}
}
}
execとしてffmpegのコマンドを書いてやることで対応しました。
今の所動作しています。止まってもまた再開すれば始まります。