share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.04.13 TUE

AWS Elemental MediaConnect が SRT に対応したよ!

木村 智一

WRITTEN BY 木村 智一

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 社の最新のスマホアプリです。
下記から入手可能です。

Haivision Play Pro is the free SRT player for your mobile streaming needs. Configure, monitor, and view your streams all from your mobile device. Learn more

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秒を切ります。

元記事はこちら

AWS Elemental MediaConnect が SRT に対応したよ!

木村 智一

木村 智一

動画一筋! 犬と闘う streampack チームリーダー

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。