Amazon Web Services ブログ
vMix on Amazon EC2でライブビデオ制作環境を構築する
ライブビデオは企業がユーザーやステークホルダーとエンゲージメントを高めるために利用される効果的で注目を浴びているメカニズムです。ビジネス上の制約でコンテンツ制作者が自宅を含むスタジオの外でライブコンテンツを制作することが求められる中、AWSのライブビデオ制作ソリューションは様々な業界の企業が迅速に適応できるよう支援していきたいと考えております。
このブログでは、Amazon Elastic Compute Cloud(Amazon EC2)上のvMixとAWS Elemental Media Servicesを使用して、独自のクラウドベースのライブプロダクションおよびストリーミングプラットフォームを構成する方法を紹介します。
前提条件
構築を行うにあたり、次のコンポーネントが必要になります:
- お客様のAWSアカウント
- g4dn.2xlarge EC2 インスタンス (Microsoft Windows Server 2019 Base AMI installed)
- NVIDIA GRID ドライバー
- Microsoft Windows RDP クライアント
- Teradici GPU Graphics Agent (別途ライセンスが必要)
- Teradici PCoIP client をお客様のローカルクライアントにインストール
- Microsoft .NET Framework version 3.5
- vMix ライブ制作&ストリーミングソフトウェア(別途ライセンスが必要, 60 日のフリートライアルあり)
- Newtek NDI Tools (もしNDIをビデオ転送のプロトコルとしてご利用になられたい場合)
- VLC Media Player
コストに関する免責事項
このソリューションを構築するために必要なAWSリソースは無料ティアではカバーされず、実行中は追加コストが発生します。このソリューションの実行中に使用されるAWSサービスのコストはお客様の責任となります。長期間の課金を避けるため終了後はリソースのクリーンアップを忘れずに行ってください。
GPU最適化EC2インスタンスのプロビジョニングと設定
ライブビデオ制作用のインスタンスのプロビジョニングと設定にはさまざまなオプションがあります。
- 手作業で構築する代わりに、AWS Marketplaceにアクセスして、Teradiciが提供する構築済みのAMIをサブスクライブすることができます。このAMIには、NVIDIA GRIDドライバとTeradici CASソフトウェアがインストール、設定、ライセンスされており、全体的な使用コストの一部となっています。
- Amazon WorkSpacesでは、Windows GraphicsまたはGraphicsProワークステーションを使用して仮想グラフィックスワークステーションを設定することができます。このワークステーションにはNVIDIAドライバがインストールされていますが、Teradiciの手動設定が必要です。
- Microsoft Windows Server 2019 Base AMIがインストールされたGPUに最適化されたEC2インスタンスをプロビジョニングできますがこれも手動での設定が必要です。
AWS MarketplaceからTeradici Cloud Access Software for Windows AMIを購入した場合、この初期設定セクションをスキップすることができます。それ以外の場合このブログ記事では、g4 GPU最適化EC2インスタンスを使用して、base AMIからライブプロダクションスタジオを手動で構築することに焦点を当てています。
g4インスタンスはライブビデオアプリケーション向けの多目的グラフィックワークステーションで、ライブビデオストリームの入出力に適したハードウェアビデオエンコードおよびデコード(H.265などの高度な圧縮コーデックを最大12ビットの深度で使用)を同時にサポートします。また、2,560個のCUDAコアを搭載しており、複数のライブ映像やグラフィックビデオ、アニメーションを、最大でUHD(Ultra-High Definition)以上の解像度でリアルタイムに同時合成することができます。また、g4インスタンスは、NVIDIA GRID機能をサポートしており、コマンド&コントロール用の低遅延で高品質なPCoIPプロトコルを実行する一方で、CPUをライブプロダクションのオーディオおよびオペレーション処理に割り当てることができます。
始めにソリューションのコアインフラを担う、g4インスタンスをプロビジョニングします。
1. AWSマネジメントコンソールで、EC2を選択しg4dn.2xlarge (またはより高スペック)Microsoft Windows Server 2019 Base AMI EC2インスタンスをプロビジョニングします。
2. このインスタンスのセキュリティグループを設定する際には、TeradiciとRDPクライアントを使ってアクセスできるように、自分のIPアドレスからインスタンスへのトラフィックを許可するようにしてください。このチュートリアルでは、送信元を自分のIPアドレスに限定して、すべてのトラフィックを許可します。
3. インスタンスがプロビジョニングされ、2/2のステータスチェックが完了したら、お好みのRDPクライアントを使ってインスタンスに接続します。これは、このチュートリアルに必要な正しいドライバーやソフトウェアをより簡単にインストールするためです。接続情報はEC2インスタンスを選択して「Connect」を選択すると、DNS名、ユーザー名、パスワードがわかります。
4. インスタンスへの接続が完了したら、NVIDIA GRIDドライバをインストールします。
5. これを行うには、AWS Command Line Interface(AWS CLI)をインストールします。
6. PowerShell AWS configureでAWS CLIの認証情報を設定します。
aws configure
7. Amazon S3からNVIDIA GRIDドライバをダウンロードします。「PowerShell」→「管理者として実行」を選択し、以下をPowerShellに貼り付けて実行します。
$Bucket = "ec2-windows-nvidia-drivers"$KeyPrefix = "latest"$LocalPath = "C:\Users\Administrator\Desktop\NVIDIA"$Objects = Get-S3Object -BucketName $Bucket -KeyPrefix $KeyPrefix -Region us-east-1 foreach ($Object in $Objects) {$LocalFileName = $Object.Key if ($LocalFileName -ne '' -and $Object.Size -ne 0) {$LocalFilePath = Join-Path $LocalPath $LocalFileName Copy-S3Object -BucketName $Bucket -Key $Object.Key -LocalFile $LocalFilePath -Region us-east-1}
8. これにより、NVIDIA GRIDのインストーラがダウンロードされます。次のパスにあるインストーラをコマンドから実行します。
C:\Users\Administrator\Desktop\NVIDIA\391.57_grid_win10_server2016_64bit_international.exe
9. コマンドプロンプトでマシンを再起動します。
cmd shutdown /r
10. vMixをダウンロードするには、インスタンス上で.NET Framework 3.5が有効になっている必要があります。Server Managerで[管理]を選択し、[役割と機能の追加]を選択して有効にします。「Select installation type(インストールタイプの選択)」を選択し、「Role-based or feature-based installation(役割ベースまたは機能ベースのインストール)」を選択します。機能の選択」ページで、「.Net Framework 3.5 Features for installation」を選択します。
11. vMixをインストールします。
12. NDI toolsをインストールします。
Teradiciを使ってEC2インスタンスへアクセスする
次にRDPクライアントの代わりにTeradici Graphics Agentを使ってライブプロダクションスタジオにアクセスするようにインスタンスを設定します。Teradici Graphics Agentは、業界をリードするPCoIPテクノロジーに基づいて構築されたクラウドアクセスソフトウェアです。RDPに比べてスムーズで低レイテンシーのデスクトップ仮想化体験を提供します。
1. RDPを使ってEC2インスタンスにアクセスし、Teradici Graphics Agent Hostをダウンロードしてインストールします。これはPCoIPクライアントにホストインスタンスのピクセル出力を安全に配信するために使用します。
2. ローカルマシンにTeradici PCoIPクライアントをダウンロードします。このクライアントはリモートのEC2インスタンスへの安全な接続を可能にします。
3. EC2にアクセスするためのRDPクライアントを停止し、代わりにTeradiciクライアントを使用します。IPアドレスまたはドメイン名、接続名、ユーザー名とパスワード(求められた場合)を入力してインスタンスに接続します。
トラブルシューティングのヒント: 接続できない場合はVPNを使用しているかどうかを確認してください(VPNがインスタンスへのアクセスを妨げている可能性があります)。VPNを使用しておらず、それでも接続できない場合は、インスタンスのセキュリティグループを確認し、自分のIPアドレスから必要なポートへのアクセスが許可されていることを確認してください。
ローカルカメラソース、グラフィック、音楽の設定
それではvMixでどんなことができるのかをご紹介しましょう。vMixには画像、グラフィックオーバーレイ、リモートおよびローカルのカメラソース、音楽など、さまざまな種類の入力を追加することができます。ここで例としてグラフィックオーバーレイのサンプルを追加してみましょう。「Add Input」で入力の追加を選択し、「Title/XAML」を追加して、追加するタイトルオーバーレイを選びます。見出しや説明文も編集できます。以下はBig Buck Bunny[AH1]をグラフィックオーバーレイを使って再生しているサンプル映像です。
「Add Input」を選択し、「Audio」を選択してオーディオファイルを選択すると、MP3やWAVファイルを挿入してBGMやオーディオクリップを追加することができます。
また「Camera」を選択し、ローカルのカメラソースを選択することでローカルのカメラソースを追加することができます。
ライブ放送を設定する場合は「Video Call」入力を使って、キャスターやプロデューサーがvMixに電話をかけることができます。eスポーツイベントのように、放送に参加している人のリモートデスクトップ画面にアクセスする必要がある場合は、vMix Desktop Captureを使って、プレイヤーのデスクトップ映像をライブストリーミングすることができます。
Tip: vMixとTeradiciを使う際によりよいパフォーマンスを得るために、vMix設定の「Performance」タブで「Display Method」を「smooth」に変更してください。
リモートカメラソースの設定
ローカルソースと入力を追加する方法は前節で説明しました。ここからはリモートのカメラソースを設定して、NDIビデオストリームをvMixに送信します。これには以前にvMixのEC2インスタンスにインストールしたNewTek NDI Toolsが使用されます。
NDI(Network Device Interface)は、ライブ映像を伝送するためのネットワーク・プロトコル・スタックです。NDIの生みの親であるVizRT社は、ソフトウェアの実装に対してロイヤリティーフリーのライセンスを付与しています。VizRT社は、Windows、Linux、MacOS用のSDKを公開しており、NDIはvMixに統合されています。
NDIは、100Mbps(1080i50)から250Mbps(UHDp60)のビットレートで、低遅延のi-フレームのみのビデオ圧縮を採用しています。ビデオフレームはマルチチャンネルの非圧縮オーディオと、カメラタリーやPTZFテレメトリなどのメタデータメッセージとともに多重化されます。バージョン4.0以降のNDIは、マルチTCPを採用しAWSネットワーク上での信頼性の高い伝送を実現しています。
NDIはmDNSを使ったビデオアプリケーション間の自動ストリーム検出をサポートしています。VPC内のNDI対応g4インスタンス間でストリームを自動的に検出したい場合は、マルチキャストを有効にしたトランジットゲートウェイをVPCに接続してください。
またNewTek NDI Tools ソフトウェア・スイートに含まれている NDI Access Manager を使用して、インスタンス間でビデオ・ストリームを手動で検出することもできます。手動でのストリーム検出は、TCPポート5960を介して送信デバイスと受信デバイスの間で直接行われます。
デバイス間のオーディオ/ビデオ・ペイロード・パケットのストリーミングは、TCPポート5961および5962で開始されます。追加のストリームが確立された場合は、後続のポートが段階的に割り当てられます。
このチュートリアルではNDIを使用して、ブロードキャスト品質のビデオを高品質かつ低レイテンシーで配信することができます。このブログ記事では、NewTek NDIツールを使ってNDIビデオストリームを手動で検出する方法を紹介します。
1. リモートのカメラソースを設定するために別のEC2インスタンスをプロビジョニングします。サンプル動画を再生するだけなので、AWS Free Tierの対象となるt2.microインスタンスを選択すると追加コストを避けることができます。
2. Windows 2019 Server Base AMI を選択します。
3. vMixインスタンスと同じVPCに、リモートソース用のEC2インスタンスをプロビジョニングします。
4. 2つのEC2インスタンスが相互に通信できるようにするために、2つのインスタンスを同じセキュリティグループに入れ、セキュリティグループを自己参照できるようにします。
a. self-referencing inbound rule for ALL Traffic(すべてのトラフィックの自己参照インバウンドルール)を設定に追加します。これによりセキュリティグループ内のリソースから来る全てのトラフィックが相互に通信できるようになります。
5. RDPクライアントを利用して、リモートインスタンスへアクセスします。
6. NDIツールとVLC Media Viewerをインストールし、リモートソースからのビデオ出力をシミュレートします。
7. VLCからビデオとオーディオをNewTek NDI VLC Pluginへ送る設定をします。VLC Media Playerを起動し、Tools→Preferencesを開きます。オーディオは、アウトプットをNDI audio outputへ変更します。ビデオはアウトプットをNDI video outputへ変更します。
8. 変更を保存し、VLC Media Viewerを再起動します。
9. 動画をダウンロードしてVLC Media Viewerで開きます。ビデオを再生すると、再生プログレスバーと黒い画面だけがレンダリングされ表示されます。これはビデオがネットワーク上でNDIストリームとして再生されているためです。NDI Video Monitorを開くと、ネットワーク上で実行されているNDIソースの再生が確認できます。
10. 2つのEC2インスタンスでdisable Windows Defender Firewallが設定されていることを確認ください。この設定がないとインスタンス間のコミュニケーションがブロックされる可能性があります。
11. vMixにソースを追加します。
12. Teradiciへ戻りvMixインスタンスへアクセスします。Windows programsでNDI Access Managerを開きます。Remote SourcesタブでリモートビデオのインスタンスのIPアドレスを追加します。
このプロセスではインスタンス間のNDIストリームを手動で検出することができます。vMix上で「Add Input」を選択し、「NDI / Desktop Capture」を選択すると、同じネットワーク上のNDIソースが自動的に検出されるはずです。
リモートNDIソースをインプットとして追加すると、vMixでリモートNDIソースが再生されます。
トラブルシューティング:NDIソースを受信できず、インスタンスとの通信に問題があるような場合(インスタンスへのpingが成功しないなど)、
Windows Defender Firewallが無効になっているか確認してください。それでもダメな場合は、セキュリティグループを再確認し、インスタンスが同じセキュリティグループに入っていることを確認してください。また、2つのインスタンス間の通信を許可するために、セキュリティグループが自己参照していることを確認してください。
AWS Elemental Media Servicesを利用したディストリビューションコンポーネントのセットアップ
このライブストリームを自分のウェブサイトに配信するには、AWS Elemental MediaLiveやAWS Elemental MediaPackageなどのAWS Elemental Media Servicesを組み合わせて使用することができます。コンテンツ配信用のAmazon CloudFrontと併用することで、高可用性、耐障害性、拡張性に優れたアーキテクチャを構築し、世界中の視聴者にライブストリームを配信することができます。
AWS Elemental MediaLiveは、ブロードキャストグレードのライブビデオ処理サービスです。MediaLiveは、冗長化されたライブ入力フィードを取り込み、2つのABR(Adaptive Bitrate)HTTP Live Streaming(HLS)出力ストリームにリアルタイムでトランスコードします。AWS Elemental MediaPackageは、MediaLiveからの入力フィードを取り込み、ライブストリームを様々なフォーマットにパッケージ化します。HLS、DASH(Dynamic Adaptive Streaming over HTTP)、MSS(Microsoft Smooth Streaming)、CMAF(Common Media Application Format)といった様々なフォーマットにパッケージ化します。
Amazon CloudFrontは、世界中の視聴者に低遅延かつ高速な転送速度でストリームを配信するために使用されるコンテンツ配信ネットワーク(CDN)サービスです。
このウェブ配信を立ち上げるには、AWSソリューション「Live Streaming on AWS」を使います。このソリューションは、上に示したアーキテクチャをスピンアップさせるCloudFormationテンプレートです。
1. 新しいタブで「Live Streaming on AWS Solution」を開き、AWSコンソールで「Launch solution」を選択して、CloudFormationテンプレートをデプロイします。
2. MediaLive Security GroupのInput CIDR Blockを指定します。MediaLiveにライブストリームを送信しているvMix EC2インスタンスのIPアドレスを入れます。
a. このソリューションを展開する際には、デプロイメントガイドに従って、このアーキテクチャとCloudFormationのパラメータをより詳しく理解してください。
3. CloudFormationテンプレートのデプロイには約15分かかります。CloudFormationテンプレートがCREATE_COMPLETEと表示されるまで待ちます。
このアーキテクチャにちょっとした変更を加える必要があります。デフォルトでは、AWSソリューションはサンプルのVODアセットを再生します。vMixからストリームを出力できるように、MediaLiveのRTMP入力を独自に設定する必要があります。
1. AWSマネジメントコンソールでAWS Elemental MediaLiveを開きます。
2. 左のナビゲーションパネルからInput→Create Inputを選択します。
3. 名前を入力しInput typeでRTMP (push)を選択します。
4. NetworkモードをPublicのままにして、CloudFormationテンプレートの起動時に作成した既存のセキュリティグループを使用します。
5. 「Input destinations」では、高可用性と冗長性のために2つの入力ストリームを指定できます。vmix1/aは1つ目のRTMP入力を表し、vmix2/bは2つ目のRTMP入力を表しています。
6. new inputを作成します。
7. MediaLiveの左側のナビゲーションペインで、「Channels」を選択します。AWSソリューションが作成したMediaLiveチャンネルに、先ほど作成した入力を追加する必要があります。
8. 既存のMediaLiveチャンネルを選択して詳細を表示し、「変更する前にチャンネルを停止状態にする必要があります」を選択します。
9. 停止後Channel Actions > Edit channel をドロップダウンから選択します。
10. 左側のInput Attachmentsで「Add」を選択し、MediaLive Channelに新規inputを作成します。
11. inputを選択し、「Confirm」をクリックします。Input destinationsはvMixの出力ストリームを設定する際に必要になります。
a. Input destinationsは次のようになります。
rtmp://<YOUR-IP-ADDRESS>/vmix1/a
rtmp://<YOUR-IP-ADDRESS>/vmix2/b
b. MediaLiveには、スタンダードチャンネルとシングルパイプラインチャンネルという2つの異なるモードがあります。シングルパイプラインチャンネルは、お客様のために1つのパイプラインを作成し、スタンダードチャンネルは、お客様の要件に応じて高可用性のために2つの独立したパイプラインを作成します。Live Streaming on AWSソリューションでは、標準チャネルを作成し、2つの冗長な入力先を持つ標準入力を必要とします。シングルパイプラインチャネルは、標準またはシングルパイプラインの入力で動作します。
c. 「Update channel」を選択してMediaLiveeチャンネルをリスタートします。
配信コンポーネントはAmazon CloudFrontを使用してデプロイされます。CloudFrontのURLは、以前に起動したライブ・ストリーミング・スタックのAWS CloudFormationアウトプット・セクションで見つけることができます。CloudFrontのURLである「DemoConsole」というタイトルのものを含む8つの出力が表示されます。これはライブ・ストリームを見ることができるウェブ・ディストリビューションです。
vMixのライブストリームをWeb配信に出力する
ウェブ配信用にライブ配信するためのvMix設定を行います。
1. Teradiciクライアントを使って、vMixが稼働しているEC2インスタンスにアクセスします
トラブルシューティングのヒント:EC2インスタンスへのアクセスに問題がある場合は、VPNを使用していないことを確認してください。また、ローカルマシンのIPアドレスが変更されていないことを確認してください。変更されている場合は、セキュリティグループを更新して新しいIPアドレスからのアクセスを許可します。
2. vMixの下部には、ストリームの横に歯車のアイコンがありますが、これはストリーム設定を表しています。ここからストリーム設定を開き、RTMPの出力先を指定します。
3. 送信先として「Custom RTMP Server」を選択します。URLにRTMPの入力先を追加して、”a”に最初のパイプライン、”b”に2番目のパイプラインのストリームキーを指定します。これは、AWS Elemental MediaLiveの新規入力を追加する際に指定した入力先の1つで、次のようになります。
rtmp://<YOUR-IP-ADDRESS>/vmix1/a
4. 保存して閉じ、「Stream」をクリックしてストリーミングを開始します。HSLの横にあるPreviewボタンをクリックすると、CloudFrontのウェブ配信にvMixからのライブストリーム出力が表示されます! vMixを設定して、Twitch.tv、Facebook Live、YouTube TVなどのプラットフォームにストリーミングし、複数の場所に同時に放送することもできます。
AWS Elemental MediaLiveは、vMixからの入力フィードを取り込み、出力としてライブストリーミングコンテンツをアダプティブビットレートのHTTP Live Streaming(HLS)ストリームにトランスコードします。その後、CloudFrontの配信に送られ、世界中の何百万人もの視聴者に低遅延で配信されます。
このブログ記事では入力フィードを1つだけ設定しましたが、AWS Elemental MediaLiveは、冗長性と高可用性のために最大2つの入力フィードをサポートしています。本番環境では2つの冗長性のある入力フィードを実装することがベストプラクティスです。
結論
おめでとうございます!これでAWS上にフルリモートで仮想化された独自のライブ映像制作環境を構成し、独自のウェブ配信に成功しました。
参考リンク
AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)
AWSのメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。
翻訳は BD山口とSA門田が担当しました。原文はこちらをご覧ください。