ねこライブ配信システム crtmpserver配信の主役(その4)







今回は、映像の配信サーバ、crtmpserver についてです。ストリーミングを実現すときに必要な中核のソフトウエアになります。




crtmpserverは高速、軽量なビデオ配信サーバとしてリリースされているソフトウエアです。




EvoStreamサーバという商用のソフトウエアのオープンソース版として提供されているものです。




残念ながら配布サイトは1年ほど前からなぜかアクセスできなくなっています。しかしUbuntuではパッケージとしてインストールできます。




crtmpserverは使ってみた結果、とても優秀なソフトウエアと思っていますが、更新が続けられている様子がないので、




新規に長く使うなら、別のストリーミングサーバを検討するのもひとつでしょう。




Nginxのrtmpモジュールを使う。Red5を使う。などが考えられるでしょう。




3年前に設置したときの手順はのこっていないので、Ubuntuサーバを立て直してインストール実験をしてみた結果を書いています。




UbuntuServerはUbuntu 16.04.1 LTSの64ビットバージョンでためしてみました。




以下のコマンドでアップデートの状態を取得しておきます。




sudo apt-get update





実行するとこんな風なメッセージが出てきて終了します。(サーバのバージョンや状態によりメッセージは変化します。)




daimao@vm:~$ sudo apt-get update
[sudo] password for daimao:
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1,201 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages [1,196 kB]
取得:6 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu xenial/main Translation-ja [290 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu xenial/main Translation-en [568 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [8,344 B]
取得:10 http://jp.archive.ubuntu.com/ubuntu xenial/restricted i386 Packages [8,684 B]
取得:11 http://jp.archive.ubuntu.com/ubuntu xenial/restricted Translation-en [2,908 B]
取得:12 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [7,532 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu xenial/universe i386 Packages [7,512 kB]
取得:14 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [207 kB]
取得:15 http://jp.archive.ubuntu.com/ubuntu xenial/universe Translation-ja [1,034 kB]
取得:16 http://jp.archive.ubuntu.com/ubuntu xenial/universe Translation-en [4,354 kB]
取得:17 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages [201 kB]
取得:18 http://jp.archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [144 kB]
取得:19 http://jp.archive.ubuntu.com/ubuntu xenial/multiverse i386 Packages [140 kB]
取得:20 http://jp.archive.ubuntu.com/ubuntu xenial/multiverse Translation-ja [8,704 B]
取得:21 http://jp.archive.ubuntu.com/ubuntu xenial/multiverse Translation-en [106 kB]
取得:22 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [464 kB]
取得:23 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages [456 kB]
取得:24 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main Translation-en [184 kB]
取得:25 http://jp.archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [6,828 B]
取得:26 http://jp.archive.ubuntu.com/ubuntu xenial-updates/restricted i386 Packages [6,804 B]
取得:27 http://jp.archive.ubuntu.com/ubuntu xenial-updates/restricted Translation-en [2,272 B]
取得:28 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [388 kB]
取得:29 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe i386 Packages [383 kB]
取得:30 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe Translation-en [145 kB]
取得:31 http://jp.archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [8,080 B]
取得:32 http://jp.archive.ubuntu.com/ubuntu xenial-updates/multiverse i386 Packages [6,876 B]
取得:33 http://jp.archive.ubuntu.com/ubuntu xenial-updates/multiverse Translation-en [3,580 B]
取得:34 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [4,672 B]
取得:35 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [87.2 kB]
取得:36 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages [4,660 B]
取得:37 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main Translation-en [3,200 B]
取得:38 http://jp.archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [2,512 B]
取得:39 http://jp.archive.ubuntu.com/ubuntu xenial-backports/universe i386 Packages [2,508 B]
取得:40 http://jp.archive.ubuntu.com/ubuntu xenial-backports/universe Translation-en [1,216 B]
取得:41 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [6,828 B]
取得:42 http://security.ubuntu.com/ubuntu xenial-security/restricted i386 Packages [6,804 B]
取得:43 http://security.ubuntu.com/ubuntu xenial-security/restricted Translation-en [2,272 B]
取得:44 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [73.2 kB]
取得:45 http://security.ubuntu.com/ubuntu xenial-security/universe i386 Packages [69.5 kB]
取得:46 http://security.ubuntu.com/ubuntu xenial-security/universe Translation-en [41.1 kB]
取得:47 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [2,744 B]
取得:48 http://security.ubuntu.com/ubuntu xenial-security/multiverse i386 Packages [2,908 B]
取得:49 http://security.ubuntu.com/ubuntu xenial-security/multiverse Translation-en [1,232 B]
27.4 MB を 9秒 で取得しました (3,030 kB/s)
パッケージリストを読み込んでいます... 完了
daimao@vm:~$ sudo apt-get install crtmpserver
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  crtmpserver-apps crtmpserver-libs liblua5.1-0 libtinyxml2.6.2v5
以下のパッケージが新たにインストールされます:
  crtmpserver crtmpserver-apps crtmpserver-libs liblua5.1-0 libtinyxml2.6.2v5
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 146 個。
1,096 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,108 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 liblua5.1-0 amd64 5.1.5-8ubuntu1 [102 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libtinyxml2.6.2v5 amd64 2.6.2-3 [29.7 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 crtmpserver-libs amd64 1.0~dfsg-5.1 [790 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 crtmpserver-apps amd64 1.0~dfsg-5.1 [150 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 crtmpserver amd64 1.0~dfsg-5.1 [24.4 kB]
1,096 kB を 0秒 で取得しました (1,304 kB/s)
以前に未選択のパッケージ liblua5.1-0:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 60211 個のファイルとディレクトリがイン ストールされています。)
.../liblua5.1-0_5.1.5-8ubuntu1_amd64.deb を展開する準備をしています ...
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を展開しています...
以前に未選択のパッケージ libtinyxml2.6.2v5:amd64 を選択しています。
.../libtinyxml2.6.2v5_2.6.2-3_amd64.deb を展開する準備をしています ...
libtinyxml2.6.2v5:amd64 (2.6.2-3) を展開しています...
以前に未選択のパッケージ crtmpserver-libs を選択しています。
.../crtmpserver-libs_1.0~dfsg-5.1_amd64.deb を展開する準備をしています ...
crtmpserver-libs (1.0~dfsg-5.1) を展開しています...
以前に未選択のパッケージ crtmpserver-apps を選択しています。
.../crtmpserver-apps_1.0~dfsg-5.1_amd64.deb を展開する準備をしています ...
crtmpserver-apps (1.0~dfsg-5.1) を展開しています...
以前に未選択のパッケージ crtmpserver を選択しています。
.../crtmpserver_1.0~dfsg-5.1_amd64.deb を展開する準備をしています ...
crtmpserver (1.0~dfsg-5.1) を展開しています...
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
man-db (2.7.5-1) のトリガを処理しています ...
systemd (229-4ubuntu7) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を設定しています ...
libtinyxml2.6.2v5:amd64 (2.6.2-3) を設定しています ...
crtmpserver-libs (1.0~dfsg-5.1) を設定しています ...
crtmpserver-apps (1.0~dfsg-5.1) を設定しています ...
crtmpserver (1.0~dfsg-5.1) を設定しています ...
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
systemd (229-4ubuntu7) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
daimao@vm:~$






crtmpserverのインストールを実行します。
sudo apt-get install crtmpserver





crtmpserverの設定ファイルのあるフォルダの一覧
daimao@vm:~$ cd /etc/crtmpserver
daimao@vm:/etc/crtmpserver$ ls
applications  crtmpserver.lua            log_appenders.lua
conf.d        enabled_applications.conf
daimao@vm:/etc/crtmpserver$





設定ファイルはapplicationフォルダのflvplayback.luaです。



カメラ2台での利用例の設定ファイルです。






configuration=
{
        daemon=false,
        pathSeparator="/",

        logAppenders=
        {
                {
                        name="console appender",
                        type="coloredConsole",
                        level=6
                },
                {
                        name="file appender",
                        type="file",
                        level=2,
                        fileName="./logs/crtmpserver",
                        fileHistorySize=10,
                        fileLength=1024*1024,
                        singleLine=true
                }
        },

        applications=
        {
                rootDirectory="applications",
                {
                        description="FLV Playback",
                        name="flvplayback",
                        protocol="dynamiclinklibrary",
                        default=true,
                        aliases=
                        {
                                "vod",
                        },
                        acceptors =
                        {
                                {
                                        ip="0.0.0.0",
                                        port=1935,
                                        protocol="inboundRtmp"
                                },
                                {
                                        ip="0.0.0.0",
                                        port=1111,
                                        protocol="inboundTcpTs",
                                        targetStreamType="live",
                                        localStreamName="camera1"
                                },
                                {
                                        ip="0.0.0.0",
                                        port=1112,
                                        protocol="inboundTcpTs",
                                        targetStreamType="live",
                                        localStreamName="camera2"
                                },
                        },
                        externalStreams =
                        {
                        },
                        validateHandshake=false,
                        keyframeSeek=true,
                        seekGranularity=1.5, --in seconds, between 0.1 and 600
                        clientSideBuffer=12, --in seconds, between 5 and 30
                        --generateMetaFiles=true, --this will generate seek/meta files on application startup
                        --renameBadFiles=false,
                        mediaFolder="/mnt/hdd/media",
                 },
        }
}




我が家では複数のカメラから同時にストリームを送り込んでいます。 このストリームを識別するためにcameraA,cameraBとか名前を付与することが必要になります。



受信するときには rtmp://crtmpserver/applicationname/cameraA というような方式で指定します。



ここでcrtmpserverはサーバのIPやホスト名。 applicationname はストリーミングサーバに付与されたアプリケーション名です。



crtmpserverの設定ファイルで指定してやることができます。



RaspberryPiからcrtmpserverに対してはmpegts方式で送信をしています。



普通ならrtmp方式で送り込んでやればよいのですが、RaspbeeryPi側のgstreamerを使ってrtmpsinkを使って送り込もうとすると、なぜかストリーム名を付与するmeta情報を付与することができませんでした。



仕方がないので、一度mpegts方式で、あらかじめ決めたポート(設定例では1111)にカメラAとして、別のポートにカメラB(設定例では1112)としてストリームを送り込み、



それぞれにMeta情報を設定ファイル中で指定しておきます。(localStreamName="camera2")



こんな設定ができたら、サーバをスタートさせます。
sudo service crtmpserver start




raspberrypiからのストリーミングがcrtmpserverに入力されていれば、それぞれ上記に説明したrtmp://crtmpserver/flvplayback/cameraA という形式で映像を受信することができます。
映像を受信する方法はいろいろありますが、代表的なものではvlc があります。



我が家で使用しているのはWebページで利用できる、FlowPlayerです。



詳しい内容は次の記事で説明したいと思います。



アタチは鰹節のほうがいいですニャっ。



ねこライブ配信システム 全体(その1)
ねこライブ配信システム gstreamerでカメラから転送(その2)
ねこライブ配信システム v4l-utilsでカメラ制御(その3)
ねこライブ配信システム crtmpserver配信の主役(その4)
ねこライブ配信システム WEBで動画再生FlowPlayer(その5)
ねこライブ配信システム 便利ツールffmpegの準備(その6)
ねこライブ配信システム ffmpegでサムネイル生成(その7)

コメントを残す

メールアドレスが公開されることはありません。


五 × 3 =