AWS Elemental MediaConnect が SRT に対応したよ!
2021/4/1 記事修正
AWS Elemental MediaConnect でいつの間にか SRT (Secure Reliable Transport)をサポートするようになってました。
SRT とは?
Secure Reliable Transport は Haivision 社によって独自に開発された、オープンソースの技術で、UDP プロトコルを利用しつつ TCP と同様の信頼性の高い伝送を実現しています。
低遅延を維持しながら、パケットロスやエラー回復、訂正機能を持つ動画伝送用のプロトコルです。
要は、Zixi や RIST (Reliable Internet Stream Transport) といった、QoS を考慮した動画伝送用プロトコルのひとつです。
【出典】
https://en.wikipedia.org/wiki/Secure_Reliable_Transport
https://www.haivision.com/products/srt-secure-reliable-transport/
AWS Elemental MediaConnect ではこれまで下記プロトコルをサポートしてましたが、あらたにここに SRT listner が加わりました。
- RTP/RTP-FEC
- Zixi
- RIST
- SRT listener (<= New!!)
listener
と銘打ってあるように、今回サポートされたのは SRT Listener Mode のみで Caller は対応していません。
それでは早速触ってみます。
構成
Action CAM - HDMI -> Jetson Nano (GStreamer) - SRT -> MediaConnect -> iPhone (Haivision Play Pro)
アクションカムをカメラとして、HDMI で Jetson Nano に入力し、GStreamer で SRT を生成し MediaConnect に流し込みます。
Player は iPhone にインストールした元祖 Haivision 社が提供している Play Pro という無料アプリで視聴します。
Jetson Nano
今回、手元にあった Jetson Nano + GStreamer という組み合わせにしましたが、SRT が送信できるものであれば何でもよいです。
(Jetson やラズパイは GStreamer を動かすまでが結構めんどいです)
有名所では他に下記のものが対応しています。
- ffmpeg
- VLC
- OBS
Haivision Play Pro
Haivision 社の最新のスマホアプリです。
下記から入手可能です。
Android については Android 9 以降が対象で、Android 8 以前は前バージョンの Haivision Play が利用できます。
Player についてはその他、下記でも視聴できます。
- ffplay
- VLC
MediaConnect
まずは暗号化 (passphrase) 無しで Flow を作成します。 passphrase 無しの場合は簡単です。
Create Flow - Source
Flow を作成します。 Source で SRT listener
を選択し、ポートとか White List とか設定します。
とりあえず遅延最短設定で試したいので、Minimum latency を最小設定値 100ms で設定します。
Source
Create Flow - Output
Source を設定すると Flow が作成されます。
続いて同 Flow に Output を設定します。
同様に SRT listener
を選択し、ポートとか White List とか設定します。
こちらも Minimum latency を 100ms で設定します。
Output
MediaConnect の設定はこれだけ。
5分もかかりませんね。
配信
それでは早速流してみましょう。
Encoder
Jetson Nano
下記 GStreamer コマンドを実行します。
gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! videorate ! 'video/x-raw, width=(int)1920, height=(int)1080, framerate=30/1' ! nvvidconv ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, framerate=30/1' ! omxh264enc bitrate=8000000 ! video/x-h264 ! h264parse ! queue ! mpegtsmux alignment=7 ! srtclientsink uri=srt://{MediaConnect Flow IP}:6000 latency=100
Player
iPhone
Haivision Play Pro で視聴します。
参考までに ffplay でも視聴可能です。
ffplay srt://{MediaConnect Flow IP}:8000
視聴
分かりやすいようにブラウザで時計を表示してそれを Haivison Play Pro で視聴しました。
当たり前ですが、問題なく視聴できます。
そして、おそらく MediaConnect における遅延最小設定で 1018ms でした。
まとめ
自分の周りでも SRT 案件が増えてきており、これまで対応できるソリューションが少なく、おのずと選択肢が限られていた為、MediaConnect のサポートがきて嬉しい限りです。
その中でいくつか気になった点を挙げます。
暗号化 (passphrase) も可能
ストリーム暗号化も可能です。
ただ、平文で passpharase を入力するのではなく、MediaConnect の他の暗号化と同様に、AWS Secrets Manager で Secret を作成、 IAMポリシー、ロールを作成してからそれらの ARN を指定する、といったちょっと手間がかかる方法です。
ひとつの Output に、ひとつの Player しか接続できない
MediaConnect の Output は Listener として動作しますが、これに接続できる Player (Caller) は一つだけのようです。
上記のように仮に srt://{MediaConnect Flow IP}:8000
に Player が接続していると、後から来た Player は視聴できません。
もし複数の Player で視聴する場合は、Player の数だけ Output を作成する必要があります。
SRT Caller Mode
今回サポートされたのは Listener Mode のみなので、MediaConnect Flow から他に対して Push 的に送りつける機能は現状ありません。
例えば、Wowza も SRT をサポートしていますが、Ingest は Listener Mode しか対応していないので、MediaConnect から Wowza に SRT を送ることはできません。
遅延
【追記】 2021/3/31 に遅延問題は修正されました。
上で示したように、Source と Output の latency をそれぞれ最小設定値 100ms とし、Encoder および Player 側でも 100ms とした場合でも、自分のテスト環境では約 4.5 秒の遅延が発生しました。
単純に latency 設定値での増加分は合計で 200ms なので、その他の部分で結構時間がかかっていると思われます。
ちなみに Encoder と Player が同設定で Haivision SRT Gateway を使った場合、遅延は最短で1秒を切ります。
Author And Source
この問題について(AWS Elemental MediaConnect が SRT に対応したよ!), 我々は、より多くの情報をここで見つけました https://qiita.com/tomopyonsama/items/00bfd5352821c420ccf6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .