[UPDATE] AWS Elemental MediaConnectで個々のOutputごとに映像出力の停止ができるようになりました!

[UPDATE] AWS Elemental MediaConnectで個々のOutputごとに映像出力の停止ができるようになりました!

1つのFlowに対して複数のOutputが設定可能なMediaConnectで、Outputごと映像出力の有効・無効の切り替えが可能になりました。特定の送信先に対して一時的に映像の伝送を停止することができます。データ転送コストの削減にもつながります。
Clock Icon2024.07.26

はじめに

清水です。高品質で信頼性と安全性に優れたライブ動画伝送サービスであるAWS Elemental MediaConnectで、個々のOutputごとに映像出力の停止が可能になるアップデートがありました。2024/07/15付けでAWS What's Newにポストされています。

ライブ動画の伝送を行うMediaConnect、1つのFlowへの入力(Source)に対して複数Outputを設定することが可能です。映像を複数のReceiverに分配する構成ですね。

io00

従来までは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を停止し、動画プレイヤーで再生されている映像が停止することを確認します。

io99

まずは動作検証に用いる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リソースを作成します。

io01

io02

Flowリソースが作成できました。続いてこのFlowリソースのOutputを設定していきます。

Outputの作成

Outputsの項目に進み、[Add output]ボタンを押下します。

io03

io04

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を作成します。

io05

io06

1つ目のOutputが作成できました。続いてもういちど[Add output]ボタンを押下し、2つ目のOutputを作成します。

io07

2つ目のOutputについて、基本的には1つ目と同じ設定で作成します。ただし、Nameについては末尾を-2、またPortについては5012を指定しました。以降、こちらは Output-2 と本エントリ内で呼びます。

io08

2つのOutputが作成できました。これでMediaConnectリソースの準備ができ、検証の準備完了です。

io09

なお、Outputsの項目について、右側に隠れてしまっている部分を表示すると以下のようになります。Statusの項目があり、それぞれEnabledとなっていますね。

io10

2つのOutputに映像が伝送されていることの確認

MediaConnectのFlow、Source、そして2つのOutputリソースが作成できました。FlowをStartさせActive Stautsにし、Sourceに対して映像を打ち上げます。今回はOBS StudioでSRTプロトコルを使って映像を打ち上げました。なお、後述するように伝送された映像の視聴確認にもOBS Studioを使用していますが、これとは別のPCで起動したOBS Studioを使用しています。

映像の伝送を開始したら、Source healthがConnectedになっていることや各メトリクスが問題ないことを確認しておきます。

io56

続いて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となります。[開く]ボタンを押下すると伝送がはじまり映像が再生されます。

io12

io52

OBS StudioでのSRTで受信した映像の視聴について、まずはソースで[メディアソース]を追加します。「ローカルファイル」のチェックを外し、「ソースがアクティブになったときに再生を再開する」のチェックを有効にします。入力の欄に、こちらもsrt://[Listener address]:[Port]の形式でURLを指定します。今回であれば2つ目に作成したOutputを使用するので、srt://35.XXX.XXX.90:5012となります。その他の項目はデフォルト値まま、[OK]ボタンで伝送された映像の再生が開始されます。

io14

io53

以下のように、(1つのPC上で)2つのSRTプロトコルで伝送されている映像の視聴確認ができました。

io55

ここから、本エントリの本題であるMediaConnectのIndividual Output Stoppingを確認していきます。

Individual Output Stoppingを確認してみる

マネジメントコンソールからOutputをDisabledに変更

2つのOutputをVLC media playerならびにOBS Studioのメディアソースで再生している状況をMediaConnectのOutputリソース側から確認してみましょう。以下のように、StatusがEnabledとなっています。

io18

先ほどOutputリソース確認時に少し触れましたが、このStatusを変更することでOutput個別の出力の制御が可能です。VLC media playerで再生している1つ目のOutput(Output-1)を選択して[Update]ボタンを押下します。出現するダイアログで設定を変更してみましょう。

io19

Output statusをEnalbedからDisabledに変更して[Save]します。

io37

Output-1のStatusがDisabledとなりました。

io21

再生されている映像についても確認してみます。以下のスクリーンショットのように、左側の映像(VLC media playerの映像、Output-1で伝送されているもの)について、映像が停止しました。右側の映像(OBS Studioの映像、Output-2で伝送されているもの)については映像伝送が続行していますので、映像内の時刻が進んでいます。スクリーンショット右上のmacOS時計表示とも比較するとわかりやすいかと思います。MediaConnect FlowがActiveの状態のまま、Output-1のみ伝送する映像を停止することができました。

io32

停止した映像出力の再開についても確認してみます。Output-1のOutput statusをDisabledからEnabledに変更して[Save]します。Output一覧画面のOutput-1のStatusがEnabledに戻りました。これで映像出力も再開します。

io23

io24

VLC media playerで受信している映像の時刻がその時点の時刻となり、映像伝送が再開している状態が確認できました。

io34

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と挙動が異なる点に注意です。)

io35

映像の出力の再開も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の映像も再開しました。

io36

まとめ

AWS Elemental MediaConnectの新機能、Individual output stoppingについてお届けしました。これまでできなかった特定のOutputのみ出力を無効にすることが可能になりました。Flow自体のStatusを変更する必要はありません。また出力の再開も容易に行えます。

複数の送信先に映像を伝送しコンテンツを共有している場合などで、一部の送信先だけは一定期間コンテンツ共有が不要(もしくは映像を伝送したくない)といった場合に、Outputリソースの操作のみで伝送の無効・有効を切り替えることができます。映像伝送を停止することでデータ転送コストの削減にもつながります。積極的に活用していきたいですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.