【初心者】AWS Elemental MediaConnect を使ってみる

# 1. 目的
- 新しめの映像伝送プロトコルであるSRT(Secure Reliable Transport)の検証がしたかったため、簡単に試せそうなAWS Elemental MediaConnectを使って動作確認することにした。

# 2. やったこと
- MediaConnectに、SRT通信を中継するための設定を行う。
- スマホ(Larix Broadcaster)で時計を撮影し、映像をMediaConnectに対してSRTで送信する。
- MediaConnectからPC(VLC Media Player)へ映像をSRTで配信し、PCで映像が再生できることを確認する。

# 3. AWS Elemental MediaConnect とは(自分の理解)
- 映像を中継するためのマネージドサービス。
- 「flow」(映像伝送を行うパスのようなもの)を作成し、Source(映像入力)、Outputs(映像出力)を設定することにより、入力側と出力側を接続する。SourceやOutputsには外部デバイスや他のAWSサービスなど様々なものを設定可能。

# 4. 構成図


![media構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/115db7d0-605c-6044-8695-58cd518baa07.png)

# 5. 確認手順
## 5.1 MediaConnectの設定
### flow の作成
- 最初に、flow(映像伝送を行うパスのようなもの)を新規作成する。flowの作成時には、まずSource(映像入力)について設定する。今回の主な設定は内容は以下。
    - Source type: Standard source を選択 (Sourceはスマホのエンコーダのため)
    - Protocol/Inbound port: SRT listener (SRTを選択し、portを5000番に指定)
    - Whitelist CIDR block: スマホ(wifi接続)のSRCIPを指定 (そのSRCIPからのみ映像アップロードを許可)
    - Minimum latency: 100 (SRTのバッファサイズを最小値に設定)

![media01a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/2d97c78e-75ba-5698-c471-077aeff8684a.png)
![media02a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ac9e2519-681d-3ff8-6ef6-7f5f5057f357.png)

- flow が作成される。この時点ではSourceのみが設定されており、outputsを別途追加する必要がある。

![media03a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f9b9529e-1c5c-3dc3-91d2-0b4f5c724505.png)

### outputsの追加
- 作成したflowに対して、outputs(映像出力)の設定を追加する。前手順で作成したflowではoutputsがまだ空の状態のため、「Add output」で追加する。

![media04a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ff55ecc8-eb64-6222-2e95-62b4ff5d2ab5.png)

- output側もSRTを選択し、portは5001とする。latency(buffer)やCIDR allow listも、Sourceの時同様に設定する。

![media05a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/5ea10407-a83b-d255-632f-b11567a949a4.png)

### flow を開始

- flowの画面で「Start」を押して、Sourceでの待ち受け、およびOutputsへの出力処理が可能な状態とする。

![media06a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/c965f68c-2644-ed5c-1b21-80d4202140a4.png)

- flowのStatusが「STANDBY」⇒「ACTIVE」、Sourcesのsource healthが「The flow is inactive」⇒「Disconnected」に変化する。
- flowが「ACTIVE」の間、実際に映像伝送を行っていなくても課金が発生する。

![media07a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/2762b9eb-a1ea-af2b-b314-8048ff5a179a.png)


## 5.2 送信側(スマホ)設定

- Androidスマホをwifiテザリングする。
- SRTでの映像送信を行うAndroidアプリ[「Larix Broadcaster」](https://play.google.com/store/apps/details?id=com.wmspanel.larix_broadcaster&hl=ja&gl=US)をインストールする。
- Larix Broadcaster に接続先(MediaConnectのSource)の設定を行う。
    - 接続先URL: srt://MediaConnectのIPアドレス:5000
    - SRT sender mode:  Caller (MediaConnectのSourceはListernerモードのため)
- 映像送信を開始し、接続に成功すると、MediaConnect側の Source - Source health が、「Disconnected」⇒ 「Connected」に変化する。

![media09a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/84ecf521-2bdf-fbe6-5468-ed99f87ca345.png)



## 5.3 受信側(Windows PC)設定

- PC(Windows 11)をwifi接続する。
- SRTを受信、再生できるアプリとして、「[VLC Media Player](https://www.videolan.org/vlc/index.ja.html)」 をインストールする。
- VLC Media Playerの設定画面にて、メディア - ネットワークストリームを開き、接続先URLに srt://MediaConnectのIPアドレス:5001　を指定する。
- 接続が成功し、映像再生が開始されると、MediaConnect側の Outputs - Status が「DISCONNECTED」-> 「CONNECTED」に変化する。

![media08a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f7f7c2c9-9ce1-81ab-a8f5-d848feffbec9.png)

## 5.4 映像再生の確認

- 写真は以下のプロセスを撮影したもの。
    - PCに表示されている時計をスマホで動画撮影
    - スマホアプリ(Larix BroadCaster)でMediaConnectに送信
    - PC(VLC Media Player)にてMediaConnectに接続し、映像を取得、再生
- 数字がブレていてみづらい部分あるが、元の映像（撮影対象）の時刻が「17:23:02:696」、伝送後の映像が「17:23:00:226」になっており、この環境では2秒程度の遅延で映像伝送できていることが確認できる。
- 時計のJavaScriptは「[CSSとJavaScriptでおしゃれなデジタル時計を実装する方法](https://web-dev.tech/front-end/javascript/digital-clock/)」を利用させて頂いている。

![media10a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/d84ba21d-9213-cd50-4c93-bf790620bdbe.png)

# 6.所感

- 今回は最もベーシックな部分の動作確認を行った。SRTのチューニングをするとか、他のAWSサービスとつなげて録画もできるようにするとか、いろいろ応用的なところを確認してみたい。