[UPDATE] AWS Elemental MediaConnectで個々のOutputごとに映像出力の停止ができるようになりました!
はじめに
清水です。高品質で信頼性と安全性に優れたライブ動画伝送サービスであるAWS Elemental MediaConnectで、個々のOutputごとに映像出力の停止が可能になるアップデートがありました。2024/07/15付けでAWS What's Newにポストされています。
ライブ動画の伝送を行うMediaConnect、1つのFlowへの入力(Source)に対して複数Outputを設定することが可能です。映像を複数のReceiverに分配する構成ですね。
従来まではOutput個別に映像出力を停止する、ということができませんでした。特定の伝送先で一時的にコンテンツの共有が不要になったりした場合などでも、MediaConnect側で送信を停止する、ということができなかったわけです。一時的にでも特定の送信先には映像を伝送したくない、といった場合には、Flow自体を停止してOutputリソース自体を削除するなどの対応をする必要がありました。
今回のアップデートで、MediaConnect側の操作で個々のOutputごとに映像の送信を停止することが可能になりました。一時的に送信先でコンテンツの共有が不要だったり、映像を伝送したくないタイミングがあれば、OutputリソースのStatusを変更するだけで容易に映像伝送の停止が行えます。もちろん再開もできます。出力の有効、無効を切り替えるかたちですね。
本エントリでは、このMediaConnectのOutputごとに出力の停止が可能になったアップデート(Individual output stopping)について、実際に試してみましたのでまとめてみます。
検証用MediaConnectリソースの作成
Outputごとの出力停止の動作検証について、次の構成で確認します。Contribution encoderにはOBS Studioを使い、SRTプロトコルで映像をMediaConnect Flowに打ち上げます。SourceのプロトコルはSRT Listenerとしました。
またMediaConnect FlowにはOutputを2つ用意します。こちらも2つともSRT Listenerプロトコルを指定します。SRT Callerな動画プレイヤーをReceiverとして準備し(後述しますが、今回はVLC media playerとOBS Studioのメディアソースを使用しました)、伝送されている映像の再生を確認しつつ、2つのうち片方のOutputを停止し、動画プレイヤーで再生されている映像が停止することを確認します。
まずは動作検証に用いるMediaConnectのリソースの準備からはじめます。
FlowとSourceの作成
MediaConnectリソース、FlowとSourceを作成します。マネジメントコンソールのMediaConnectの画面、Flows一覧ページから[Create flow]ボタンで進みます。
Detailsの項目で適切なNameを入力します。Availability ZoneはAny (default)
で進めました。またSourceの項目について、Source typeはStandard source
を選択しました。SourceのNameも適切な値を入力します。またSouceのProtocolはSRT listener
を選択、Inbound portは5000
としました。Allowlist CIDR blockについても映像打ち上げ元IPアドレスを設定し、[Create flow]ボタン押下でFlowリソースを作成します。
Flowリソースが作成できました。続いてこのFlowリソースのOutputを設定していきます。
Outputの作成
Outputsの項目に進み、[Add output]ボタンを押下します。
Add outputのダイアログが現れます。Nameを適切に入力(2つのOutputをつくるので、ここでは末尾が-1
な値にしました)、Output typeはStandard output
を選択します。ProtocolではここでもSRT listener
を選択し、Portでは5011
を指定しました。以降、こちらを Output-1 と本エントリ内で称します。
Output statusの項目がありますが、ここが今回のアップデートポイントですね。Enabledのまま作成を続けます。CIDR allow listについても接続許可対象となるIPアドレスを指定しておきます。Encryptionは無効のまま[Add output]ボタンでOutputを作成します。
1つ目のOutputが作成できました。続いてもういちど[Add output]ボタンを押下し、2つ目のOutputを作成します。
2つ目のOutputについて、基本的には1つ目と同じ設定で作成します。ただし、Nameについては末尾を-2
、またPortについては5012
を指定しました。以降、こちらは Output-2 と本エントリ内で呼びます。
2つのOutputが作成できました。これでMediaConnectリソースの準備ができ、検証の準備完了です。
なお、Outputsの項目について、右側に隠れてしまっている部分を表示すると以下のようになります。Statusの項目があり、それぞれEnabled
となっていますね。
2つのOutputに映像が伝送されていることの確認
MediaConnectのFlow、Source、そして2つのOutputリソースが作成できました。FlowをStartさせActive Stautsにし、Sourceに対して映像を打ち上げます。今回はOBS StudioでSRTプロトコルを使って映像を打ち上げました。なお、後述するように伝送された映像の視聴確認にもOBS Studioを使用していますが、これとは別のPCで起動したOBS Studioを使用しています。
映像の伝送を開始したら、Source healthがConnected
になっていることや各メトリクスが問題ないことを確認しておきます。
続いてMediaConnectに伝送した映像の確認についてです。今回は2つのOutputを作成しました。それぞれを1台のPCで確認するため、1つ目のOutputの再生にはVLC media player、2つ目のOutputの再生にはOBS Studioのメディアソースを使用しました。以下、伝送した映像の再生のための手順をまとめます。
VLC media playerは[ネットワークを開く]のメニューから進みます。URLにsrt://[Listener address]:[Port]
を指定します。Listener addressはMediaConnectのOutputsの項目から各にします。今回であれば、1つ目に作成したOutputを使用するのでsrt://35.XXX.XXX.90:5011
となります。[開く]ボタンを押下すると伝送がはじまり映像が再生されます。
OBS StudioでのSRTで受信した映像の視聴について、まずはソースで[メディアソース]を追加します。「ローカルファイル」のチェックを外し、「ソースがアクティブになったときに再生を再開する」のチェックを有効にします。入力の欄に、こちらもsrt://[Listener address]:[Port]
の形式でURLを指定します。今回であれば2つ目に作成したOutputを使用するので、srt://35.XXX.XXX.90:5012
となります。その他の項目はデフォルト値まま、[OK]ボタンで伝送された映像の再生が開始されます。
以下のように、(1つのPC上で)2つのSRTプロトコルで伝送されている映像の視聴確認ができました。
ここから、本エントリの本題であるMediaConnectのIndividual Output Stoppingを確認していきます。
Individual Output Stoppingを確認してみる
マネジメントコンソールからOutputをDisabledに変更
2つのOutputをVLC media playerならびにOBS Studioのメディアソースで再生している状況をMediaConnectのOutputリソース側から確認してみましょう。以下のように、StatusがEnabled
となっています。
先ほどOutputリソース確認時に少し触れましたが、このStatusを変更することでOutput個別の出力の制御が可能です。VLC media playerで再生している1つ目のOutput(Output-1)を選択して[Update]ボタンを押下します。出現するダイアログで設定を変更してみましょう。
Output statusをEnalbed
からDisabled
に変更して[Save]します。
Output-1のStatusがDisabled
となりました。
再生されている映像についても確認してみます。以下のスクリーンショットのように、左側の映像(VLC media playerの映像、Output-1で伝送されているもの)について、映像が停止しました。右側の映像(OBS Studioの映像、Output-2で伝送されているもの)については映像伝送が続行していますので、映像内の時刻が進んでいます。スクリーンショット右上のmacOS時計表示とも比較するとわかりやすいかと思います。MediaConnect FlowがActive
の状態のまま、Output-1のみ伝送する映像を停止することができました。
停止した映像出力の再開についても確認してみます。Output-1のOutput statusをDisabled
からEnabled
に変更して[Save]します。Output一覧画面のOutput-1のStatusがEnabled
に戻りました。これで映像出力も再開します。
VLC media playerで受信している映像の時刻がその時点の時刻となり、映像伝送が再開している状態が確認できました。
AWS CLIからOutputをDisabledに変更
AWS CLIでもOutputの停止操作を確認してみます。AWS CLIの実行にはAWS CloudShellを使用しました。
[cloudshell-user@ip-10-134-4-42 ~]$ aws --version
aws-cli/2.17.15 Python/3.11.9 Linux/6.1.96-102.177.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
まずはaws mediaconnect describe-flow
コマンドでFlowならびにOutputの状態を確認します。
引数にFlowのARNを指定し、以下の書式で実行します。
$ aws mediaconnect describe-flow \
--flow-arn <value>
Flow、Source、そしてOutputの情報が確認できます。Ouptputについては2つとも、"OutputStatus": "ENABLED"
となっていることが確認できますね。
[cloudshell-user@ip-10-134-4-42 ~]$ aws mediaconnect describe-flow \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow
{
"Flow": {
"AvailabilityZone": "ap-northeast-1c",
"EgressIp": "35.XXX.XXX.90",
"Entitlements": [],
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow",
"MediaStreams": [],
"Name": "individual-output-stopping-flow",
"Outputs": [
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-1",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-1",
"Port": 5011,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
},
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-2",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2",
"Port": 5012,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
}
],
"Source": {
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
},
"Sources": [
{
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
}
],
"Status": "ACTIVE"
}
}
続いてAWS CLIによるOutputの停止です。aws mediaconnect update-flow-output
コマンドを使用します。
引数でFlowのARNとOutputのARN、そしてStatusをENABLED
もしくはDISABLED
で指定します。
$ aws mediaconnect update-flow-output \
--flow-arn <value>
--output-arn <value>
--output-status [ENABLED|DISABLED]
Output-2の出力を停止してみましょう。実行時に引数で--output-status DISABLED
を指定します。戻り値で"OutputStatus": "DISABLED"
となっていることが確認できますね。
[cloudshell-user@ip-10-134-4-42 ~]$ aws mediaconnect update-flow-output \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow \
> --output-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2 \
> --output-status DISABLED
{
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow",
"Output": {
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-2",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2",
"Port": 5012,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "DISABLED"
}
}
aws mediaconnect describe-flow
でFlow全体の情報も確認してみます。Output-1については"OutputStatus": "ENABLED"
、Output-2については"OutputStatus": "DISABLED"
という状態です。
[cloudshell-user@ip-10-134-4-42 ~]$ aws mediaconnect describe-flow \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow
{
"Flow": {
"AvailabilityZone": "ap-northeast-1c",
"EgressIp": "35.XXX.XXX.90",
"Entitlements": [],
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow",
"MediaStreams": [],
"Name": "individual-output-stopping-flow",
"Outputs": [
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-1",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-1",
"Port": 5011,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
},
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-2",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2",
"Port": 5012,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "DISABLED"
}
],
"Source": {
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
},
"Sources": [
{
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
}
],
"Status": "ACTIVE"
}
}
実際に伝送している映像についても確認しましょう。右側のOutput-2、OBS Studioで受信している映像が停止しました。(OBS Studioについては、映像受信が停止すると画面が黒くなりました。VLC media playerと挙動が異なる点に注意です。)
映像の出力の再開もaws mediaconnect update-flow-output
コマンドを使用します。引数で--output-status ENABLED
を指定しましょう。戻り値でOutput-2が"OutputStatus": "ENABLED"
となったことが確認できます。
[cloudshell-user@ip-10-134-4-42 ~]$ aws mediaconnect update-flow-output \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow \
> --output-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2 \
> --output-status ENABLED
{
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow",
"Output": {
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-2",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2",
"Port": 5012,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
}
}
aws mediaconnect describe-flow
でも確認してみます。2つのOutputが"OutputStatus": "ENABLED"
となっていますね。
[cloudshell-user@ip-10-134-4-42 ~]$ aws mediaconnect describe-flow \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow
{
"Flow": {
"AvailabilityZone": "ap-northeast-1c",
"EgressIp": "35.XXX.XXX.90",
"Entitlements": [],
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-flow",
"MediaStreams": [],
"Name": "individual-output-stopping-flow",
"Outputs": [
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-1",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-1",
"Port": 5011,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
},
{
"ListenerAddress": "35.XXX.XXX.90",
"Name": "individual-output-stopping-output-2",
"OutputArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:output:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-output-2",
"Port": 5012,
"Transport": {
"CidrAllowList": [
"106.XXX.XXX.XX5/32"
],
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"OutputStatus": "ENABLED"
}
],
"Source": {
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
},
"Sources": [
{
"IngestIp": "35.XXX.XXX.90",
"IngestPort": 5000,
"Name": "individual-output-stopping-source",
"SourceArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:source:1-xxxxxxxxxxxxxxxxxxxxxxxxxxxe5:individual-output-stopping-source",
"Transport": {
"MaxBitrate": 160000000,
"MinLatency": 2000,
"Protocol": "srt-listener"
},
"WhitelistCidr": "106.XXX.XXX.XX5/32"
}
],
"Status": "ACTIVE"
}
}
Output-2から伝送されているOBS Studioの映像も再開しました。
まとめ
AWS Elemental MediaConnectの新機能、Individual output stoppingについてお届けしました。これまでできなかった特定のOutputのみ出力を無効にすることが可能になりました。Flow自体のStatusを変更する必要はありません。また出力の再開も容易に行えます。
複数の送信先に映像を伝送しコンテンツを共有している場合などで、一部の送信先だけは一定期間コンテンツ共有が不要(もしくは映像を伝送したくない)といった場合に、Outputリソースの操作のみで伝送の無効・有効を切り替えることができます。映像伝送を停止することでデータ転送コストの削減にもつながります。積極的に活用していきたいですね。