ZoomミーティングをMediaLiveと連携させてAWSでライブ配信してみた

ZoomミーティングのもようをAWSで構築した動画配信基盤でライブ配信してみました。Zoomの外部動画配信サービスとの連携機能を使ってMeidaLiveに映像をストリーミングします。MediaLive以降は他の映像ソースからのライブ配信構成のときと同様に処理ができます。
2020.07.31

はじめに

清水です。ZoomミーティングにはYouTube LiveやFacebook Liveなど外部動画配信サービスと連携してミーティングのもようをライブ配信する機能があります。この機能のメニュー部分、上記2つの他には"Live on Custom Live Streming Service"と記載されています。ということは……、きっとMediaLiveと連携させてAWSインフラでのライブ配信を行うこともできそうですよね!ということでやってみました!

こちらが上記ページのスクリーンショットなのですが、"Live on Custom Live Streming Service"が気になりますよね!

Zoom側の事前準備

まずはZoom側の準備です。前提としてですが、Zoomミーティングのライブ配信の条件として、アカウントがプロ以上のプランであることが条件です。(残念ながら無料の基本プランではできないようです。)今回はプロプランを契約しているアカウントでミーティングの作成を進めていきました。

またZoom側の設定でミーティングのライブストリーミング配信を許可する必要があります。設定画面、「ミーティングにて(詳細」から「ミーティングのライブストリーム配信を許可」をonに変更、「カスタムライブストリーム配信サービス」にチェックをつけて保存します。

あとは通常通り、ミーティングをスケジュールしておきます。

AWS Media Servicesの準備

続いてAWS側ライブ配信基盤の準備を行います。今回はMediaLive + MediaPackage + CloudFrontの構成でライブ配信を行ってみます。ZoomのミーティングをMediaLiveで受けることになるので、その他にもMediaStoreを使ってのライブ配信やS3へのアーカイブの保存、さらにその他外部動画配信サービスへのRTMP出力などもできそうですね。

MediaLive + MediaPackage + CloudFrontの構成部分は以下のブログエントリ、「ライブ配信環境の構築」を参考に進めます。本エントリでは要点のみを抜粋します。

MediaPackageリソースの作成

まずはMediaPackageのChannelとEndpointを作成します。Channel作成の際に、あわせてCloudFrontディストリーションも作成をしてしまいます。またEndpointはApple HLSで作成しました。

CloudFrontについては、MediaPackageの設定から5分程度したのち、StatusがDeployedになっていることを確認しておきます。

MediaLiveリソースの作成

続いてMediaLiveのInput、Channelを作成します。まずInputの作成ですが、Input typeをRTMP (push)にします。Channel classは検証用とですのでSINGLE_PIPELINEにしました。Application nameとApplication Instanceは適切に設定しておきます。

続いてChannelの作成です。Channel templateとしてLive event (MediaPackage)を使用しました。

Inputは先ほど作成したものをアタッチ、Output groups設定でこちらも先ほど作成したMediaPackage Channelをして、MediaLive Channelを作成します。

ミーティングならびにライブ配信の開始

MediaLive Channelの開始

まずはMediaLive ChannelをStartさせます。MediaLiveのChannleは作成直後はステータスがIdleの状態です。これをStartさせることで、Running状態に遷移します。なおMediaLive使用時の定番の注意事項ですが、このRunnnig状態の間(今回であればZoom側のライブストリームを停止しても)、MediaLiveの(比較的大きな金額の)料金が発生しますので注意しましょう。

Zoomのミーティングの開始とライブ配信開始

続いてZoom側の操作です。ミーティングを開始し、画面下の「詳細」をクリック、「ライブ中 カスタムライブストリーム配信サービス」を選択します。

ブラウザで以下のページが開きますので、必要な情報を入力します。MediaLiveのInputのEndpointで得られる情報から少し変換が必要となるので注意しましょう。 *1

  • ストリーム配信のURL
    • rtmp://[IPアドレス]/[Application name] を入力します
      • 上記の例であれば、rtmp://3.XXX.XXX.XXX/zoom
  • ストリーミングキー
    • Input作成時に指定したApplication Instanceを入力します
      • 上記の例であればlivestream
  • ライブストリーム配信ページのURL
    • ライブ配信視聴用のページのURLを入力します。Zoomミーティング参加者にZoomアプリ内などで共有されるようです。
      • 今回は検証用途なので別途配信用のページは作成しません。VideoJS HTTP Streamingで再生確認を行いましたので、このURL「https://videojs.github.io/http-streaming/」を入力しておきました。

Zoomの設定ページで必要な情報を入力、[Go Live!]を押してしばらくするとライブストリーミングがはじまります。

Zoomの設定ページはライブストリーミングがはじまると、指定した配信ページのURLに遷移します。(親切設計ですね。今回はVideoJS HTTP Streamingなので、さらにHLS endpointのURLを入力する必要がありますが。)

ライブ配信の視聴確認

では実際にライブ配信されているZoomミーティングのもようを確認してみます。VideoJS HTTP StreamingでVideo URL欄にMediaPackasgeのEndpoint詳細ページで得られるCloudFront URLを入力、MineTypeがApplication/x-mpegURLであることを確認して[Load]ボタンで再生を開始します。

ZoomミーティングのもようがAWSのライブ配信基盤で視聴できましたね!画面共有でDevelopes.IOトップページを表示している状態です。右下のZoomロゴが印象的です!

ライブ配信の終了

最後にライブ配信の終了手順についても簡単にまとめておきます。Zoomミーティング自体を終了するほか、Zoomにてライブ配信のみを終了させる方法もあるようです。

またMediaLiveについてはRunningの状態だと大きな費用が発生しますので、ライブ配信を終了したら必ずStopしておきましょう。Idel状態のリソースにも費用がかかるのでご注意ください。

まとめ

Zoomミーティングの外部動画配信サービス連携機能を使って、ミーティングのもようをAWS動画配信基盤、AWS Elemental MediaLive + AWS Elemental MediaPackage + Amazon CloudFrontの構成でライブ動画配信してみました。Zoomミーティング側でのライブ配信設定をおさえておけば、他はいつものMediaLive + MediaPackage + CloudFrontでのライブ配信時と同じように設定ができるかと思います。参加者同士でリアルタイムにコミュニケーションするZoomミーティングから、多少の遅延を許し大勢の視聴を可能にするライブ配信に直接連携できるのはおもしろいし、また便利だなぁと思いました。

脚注

  1. なおこの情報の入力はミーティング管理画面でもできるようです。