szkがVJやITや、趣味のゲームや自作PCのはなしをするところ。最近バイクをはじめた

ストリーミング配信サーバを自前で構築する(Linux & SRS_RTMP編)

こんにちは、szkです。

前回紹介したのは主流かつ、従来式というべき「Nginx」を用いたサーバ構築でした。
記事を記載している中でFAIOさんからこのようなリプライを頂きました。

リプライでは「ほぇ~そうなんですねぇ」といった感じで話を合わせたものの
ぶっちゃけて言うと「なんだそのワード!?」って感じだったのでこっそり調べてみました。

SRT

次世代映像伝送プロトコル「SRT」とは何かー株式会社エクスプローラ

どうやらRTMPの後釜を狙って作られており、IT視点で話すのであればUDPでストリームするけど最初の段階でネゴシエーションは発生させるという規格。
動きそのものはIPパケットじゃないけど、HDMIのそれに近しい気がします。
何を中身でやってるのかはさっぱりだけどUDPのくせに再送があるというのも興味深い。

ちなみにOBSのフォーラムに一連の取り扱い方が記載されていますので、興味ある方は見ておくと良いと思います。

Streaming With SRT Protocol

つまるところ通信規約の名称です。

SLS(SRT Livestream Sever)

SRTサーバプロダクトでOpensource。
上記のOBSのリファレンスにはこれがサーバとして紹介されています。
今回は使用しません。

つまるところ、SRTを扱えるソフトウェアの製品名です。

SRS

Simple RTMP Server(かな?)という名前のサーバーソフト。
SLSと名前がそっくりで間際らしいが別物。
ちなみにこの子もSRTを扱えるようすです。
SLSもそうですが、前回の記事でいう「Nginx」に当たるポジションのワードですね。

SRS(github)

つまるところ、RTMPをはじめとするストリーミングサーバ、でSRTも扱えるソフトウェアの製品名です。

 

・・・と、ここまで書いてSRTのサーバ構築を書くんだろうな、と皆さんお思いかもしれませんが
使ってみた結果思った以上にSRSが速攻構築終わる良プロダクトでしたのでそっちから紹介します。

SRSの構築

まず、前提として「前回のCentOS7の構築まで」が終わっている想定となります。
1935ポートを使う場合はポートがバッティングしますのでnginxのポートを変更し、サービスを停止しておいた方が良いと思います。

手順については正直公式gitの手順通りなのでそちらを見て頂いた方が良いと思います。

必要なパッケージのインストール

yum install wget gcc pcre-devel openssl openssl-devel git make unzip tar

gitでSRSをダウンロード&インストール

git clone https://gitee.com/winlinvip/srs.oschina.git srs && cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull
./configure && make

以上で完了です。

起動

cd ./srs/trunk/
./objs/srs -c conf/rtmp.conf

起動は上のコマンドで一発起動します。
この状態ですでにRTMPの待ち受けが開始されている状態です。

[2020-04-29 00:16:20.061][Trace][1468][0] XCORE-SRS/3.0.140(OuXuli)
[2020-04-29 00:16:20.062][Trace][1468][0] config parse complete
[2020-04-29 00:16:20.063][Trace][1468][0] write log to console
[2020-04-29 00:16:20.063][Trace][1468][0] SRS/3.0.140(OuXuli), The MIT License (MIT)
~中略~
[2020-04-29 00:16:20.063][Trace][1468][0] srs checking config...
[2020-04-29 00:16:20.063][Trace][1468][0] ips, iface[0] eth0 ipv4 0x11043 192.168.1.247, iface[1] eth0 ipv6 0x11043 240d:1a:37e:7500:ab8a:36e4:9302:2ab2, iface[2] eth0 ipv6 0x11043 fe80::7447:7537:4072:6d451.574037e-316th0
[2020-04-29 00:16:20.063][Trace][1468][0] devices, intranet eth0 192.168.1.247, internet eth0 240d:1a:37e:7500:ab8a:36e4:9302:2ab2, intranet eth0 fe80::7447:7537:4072:6d451.574037e-316th0
[2020-04-29 00:16:20.063][Warn][1468][0][0] stats network use index=0, ip=192.168.1.247
[2020-04-29 00:16:20.063][Warn][1468][0][0] stats disk not configed, disk iops disabled.

このようなログが出力され待機状態になります。

OBSからの出力

構成図

OBSから上のような構成で配信を行います。
今回はのっけからグローバルサイトでのテストです。

ポート開放などが必要になりますので適宜サーバ側、及び管理されているネットワークのルータ設定等で行ってください。

肝心の出力設定は次の通り。

サーバー rtmp://{SRSサーバのグローバルIP}/live
ストリームキー 任意の文字列

ポートを変更していない場合、ポート番号の入力は不要なので注意。

出力が開始されるとコンソール側に上のような表示がされることを確認します。
ここまで確認できれば「サーバまで来ている」状態となります。

RTMPでの視聴(OBS)

メディアソースを利用して実際に配信を受信してみます。
この操作は配信集約PCにて行います。

ここでの入力は配信集約PC→LAN内のSRSへアクセスを行いますからローカルIPをします。
一方でこちらはポートの指定が必要となりますのでご注意下さい。
live/より後ろにはストリームキーの値が入ります。

結果

流石RTMPは早いですね。
ノーチューニングで1秒のラグでした。
手っ取り早くラグが少ない配信をしたい場合は前回の方法よりもこちらの方が楽かつ精度も高められそうかと思います。


この記事を書いてる人→

szkのアバター

▼検索


▼カテゴリアーカイブ

▼人気記事

▼月別アーカイブ


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です