Amazon Web Services ブログ

Amazon Chime SDK Meetings Media Capture Pipelineの利用方法

Amazon Chime SDKの新機能により、デベロッパーはミーティング内容をキャプチャできるようになります。この新しい機能であるメディアキャプチャパイプラインは、会議音声、動画、およびコンテンツ共有ストリームを会議のイベントやデータメッセージとともにキャプチャし、デベロッパーによって指定されたAmazon Simple Storage Service(Amazon S3またはS3)バケットに保存します。Amazon Chime SDKを使用したメディアキャプチャパイプラインは、デフォルトで次のような機能を提供します。(キャプチャしている間に)ミックスされた会議音声ストリームをキャプチャする、アクティブなスピーカーがビデオ利用可能な場合、スピーカーの動画をキャプチャする、そして、コンテンツ共有ストリームについても利用可能な場合、キャプチャすることができます。デベロッパーは、アクティブなスピーカーの動画をオフにするようリクエストすることで、代わりに各参加者がアクティブな時に個々の動画ストリームをキャプチャすることができます。すべてのミーティングアーティファクトは、デベロッパーが指定したS3バケットに、最大5秒のチャンクファイルで会議中保存されます。

以前、お客様自身のAmazon Elastic Container Service (Amazon ECS)インフラストラクチャでAmazon Chime SDKを使用してクライアント側の記録を有効にする方法を紹介するブログを公開しました。ここでは、デベロッパーは、サーバーレスアプリケーションをコンテナにデプロイして維持し、ブラウザーに組み込まれたAPIを使用して会議を記録、ブラウザーセッションを単一動画ストリームとしてキャプチャする必要があります。しかし、新しいメディアキャプチャパイプライン機能を使用すると、デベロッパーは新しいAPIを呼び出してメディアキャプチャを開始するだけで済むため、追加インフラストラクチャを懸念する必要がなくなりました。

概要

メディアキャプチャは、CreateMediaCapturePipeline APIを呼び出すことによって開始できます。APIリクエストでAmazon Chime SDKミーティングとS3バケットを指定すると、メディアキャプチャパイプラインサービスは会議のコンテンツのキャプチャを開始し、指定したS3バケットにアップロードします。DeleteMediaCapturePipeline APIを呼び出してメディアキャプチャパイプラインを停止する、もしくは、Amazon Chime SDKミーティングが終了すると、会議のキャプチャが停止します。

このブログ記事では、新しいメディアキャプチャパイプラインの機能について説明します。メディアキャプチャパイプラインを手動で開始して、進行中のAmazon Chime SDKミーティングをキャプチャし、キャプチャされたアーティファクトで何ができるかを見ていきます。また、Reactページにボタンを設置し、この新機能を試す簡単なデモアプリをデプロイするためのAWS Cloud Development Kit(CDK)パッケージを含めました。

注:このデモをデプロイし、この記事で作成したデモからのトラフィックを受信すると、AWSの料金が発生することがあります。

このブログで紹介したデモでAmazon Chime SDKミーティングを記録またはキャプチャすることは、電子コミュニケーションの記録に関する法律または規制の対象となる場合があります。記録されたセッションについては全参加者に適切に通知する、またセッションやコミュニケーションが記録されている場合、それを通知し同意を得るなど、記録に関して適用されるすべての法を遵守することは、お客様およびお客様のエンドユーザーの責任です。

ウォークスルー:メディアキャプチャパイプライン

4つの新しいAPIがメディアキャプチャパイプライン機能としてAmazon Chimeの下のAWS SDKに追加されました。

CreateMediaCapturePipeline
DeleteMediaCapturePipeline
GetMediaCapturePipeline
ListMediaCapturePipeline

これらのAPIの詳しい使用方法については、AWS API リファレンスをご覧ください。

前提条件

  • (このブログ記事で使用されている)AWS SDKまたはAWSコマンドラインインターフェイスのどの言語においても基本的な知識があること。更新できていない場合は、最新の情報を取得してください。
  • Amazon Chime SDK for JavasciptまたはAmazon Chime SDK for Mobileの基本的な知識があること。
  • Amazon Chime SDKミーティングを作成済みであること (付属のCDK デモ参照)
  • AWSアカウントの管理者ロール、またはchime:*,s3:GetBucketPolicyおよびs3:GetBucketLocationを許可するポリシーを持ったロールがあること。

キャプチャされたアーティファクトを受け取るS3バケットを準備

  • Amazon Chime SDKミーティングと同じAWSアカウントを所有している必要があります。
  • Amazon Chimeサービスがファイルをアップロードできるようにするには、S3バケットポリシーが必要です。S3バケットポリシーを以下のように設定することをお勧めします。[バケット名]は、実際のS3バケット名に置き換える必要があります。
  • S3バケットは、キャプチャする会議と同じリージョンにある必要があります。
{
    "Version": "2012-10-17",
    "Id": "AWSChimeMediaCaptureBucketPolicy",
    "Statement": [
        {
            "Sid": "AWSChimeMediaCaptureBucketPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "chime.amazonaws.com"
            },
            "Action": [ "s3:PutObject", "s3:PutObjectAcl" ],
            "Resource": "arn:aws:s3:::[bucket name]/*"
        }
    ]
}

メディアキャプチャパイプラインの開始

このブログ記事では、AWSコマンドラインインターフェイスを使用してAWS APIを呼び出しています。Java、Javascript、Goなど、他の言語のAWS SDKを使用する場合は、異なるシンタックスでの同様のリクエストになります。

メディアキャプチャパイプラインを開始するには、既存のAmazon Chime SDKミーティングが必要です。Amazon Chime SDKミーティングサーバーレスデモで新しいミーティングを開始する、もしくは、既存のサービスからAmazon Chime SDKミーティングを作成することもできます。次に、Amazon Chime SDKミーティングIDを取得し、Amazon Chime SDKミーティングARNを作成します。

arn:aws:chime::[ACCOUNT ID]:meeting:[MEETING ID]

コマンドラインターミナルで、chime:*およびs3:GetBucketPolicyを許可するポリシーを持つロールの~/.awsフォルダーにAWS認証情報が設定されていることを確認します。次のコマンドを実行して、メディアキャプチャパイプラインを開始します。

aws chime create-media-capture-pipeline \
    --source-type ChimeSdkMeeting \
    --source-arn arn:aws:chime::[ACCOUNT-ID]:meeting:[MEETING-ID] \
    --sink-type S3Bucket \
    --sink-arn arn:aws:s3:::[BUCKET-NAME]/[Prefix]

注:

  • source-typeは、ChimeSdkMeeting;でなければなりません。
  • source-arnは、我々が構築したミーティング用ARNです。アカウントIDは、会議をホストしているアカウントである必要があります。
  • sink-typeは、メディアキャプチャファイルが格納される場所です。S3Bucketが今のところ唯一の選択肢です。
  • sink-arnはS3パスARNです。BUCKET-NAMEは、先ほど準備したS3バケットであり、同じアカウントによって所有されている必要があります。
  • バケットポリシーが正しく設定されていれば、キャプチャしたすべての会議を同じS3バケットの下に格納するか、または各会議を異なるバケットに格納するかは、デベロッパーに選択していただけます。また、MEETING-IDをプレフィックスとして使用することをお勧めします。これにより、異なるプレフィックスのもとで、別の会議を構成することができます。

コマンドが正常に実行されると、以下の応答が続きます。MediaPipelineIdは後で使われます。

{
    "MediaCapturePipeline": {
        "MediaPipelineId": "93494fbe-48d1-447c-a923-fe483c0c534d",
        "SourceType": "ChimeSdkMeeting",
        "SourceArn": "arn:aws:chime::0000000000:meeting:23793cce-000e-44a4-82ce-f9f1ae28b309",
        "Status": "Initializing",
        "SinkType": "S3Bucket",
        "SinkArn": "arn:aws:s3:::[YOUR-BUCKET]/23793cce-000e-44a4-82ce-f9f1ae28b309",
        "CreatedTimestamp": "2021-04-30T18:53:54.076Z",
        "UpdatedTimestamp": "2021-04-30T18:53:54.077Z"
    }
}

Amazon Chime SDKのミーティングロースターには、「MediaPipeline-*」という名前の新しい出席者が表示されます。これは、会議の音声、動画、コンテンツ、データメッセージ、イベントのキャプチャに使用する出席者です。常にミュートにされます。

キャプチャが開始された直後に、キャプチャされたアーティファクトがSinkArnで定義されたS3デスティネーションにアップロードされ始めます。


注:

  • Audioフォルダには、キャプチャされた音声とアクティブなスピーカーが入ります。これは、すべての出席者のミックスされたトラック音声とアクティブなスピーカー(存在する場合)の動画ストリームが5秒にチャンクされたものです。音声のみ録音するというオプションも選択できます。音声のみのキャプチャが必要な場合は、AWSコンソールからサポートチケットを作成してカスタマーサポートにお問い合わせください。
  • data-channelフォルダには、この会議で記録されたデータメッセージが入ります。
  • meeting-eventsフォルダには、アクティブなスピーカーのイベント、追加/削除された動画/コンテンツトラック、出席者の参加/退席など、進行中のイベントデータが入ります。
  • videoフォルダには、各出席者の画面共有が入ります。メディアデータも5秒にチャンクされます。また、個々のビデオストリームのキャプチャは、デフォルトでは無効になっているため、個々のビデオストリームのキャプチャを有効にするには(追加料金が発生しますが)、AWSコンソールからサポートチケットを作成してカスタマーサポートにお問い合わせください。

メディアキャプチャパイプラインの削除

メディアキャプチャパイプラインを停止するには、次のコマンドを実行します。media-pipeline-idは、create-media-capture-pipelineレスポンスの戻り値です。

aws chime delete-media-capture-pipeline \
    --media-pipeline-id 93494fbe-48d1-447c-a923-fe483c0c534d

APIが呼び出されるとMediaPipelineの出席者は会議を退出し、キャプチャが停止します。新しいメディアキャプチャパイプラインが同じSinkARNで開始されない限り、新しくキャプチャされたアーティファクトはS3バケットにアップロードされません。

注:会議を終了すると、メディアキャプチャパイプラインも停止します。

通知

メディアキャプチャパイプラインには、次の6つの異なるステータスがあります。
Initializing(初期化中)  | InProgress(進行中 ) | Failed(失敗) | TemporarilyFailed(一時失敗) | Stopping(停止中) | Stopped(停止)

これらのステータスの詳細については、AWSデベロッパーガイドを参照してください。ステータスが変更されるたびに、Amazon Simple Notification Service (Amazon SNS) トピック、CreateMeeting APIを呼び出すときにデベロッパーによって指定されたAmazon Simple Queue Service (Amazon SQS) キュー、またはAmazon Chimeサービスの下のAmazon EventBridgeのイベントソースに通知が送信されます。

キャプチャされたアーティファクトの使用

それでは、各フォルダの下にあるアーティファクトを見てみましょう。

audioフォルダには、5秒ごとにチャンクされた、会議のアクティブなスピーカーの動画とミックスされた音声トラックが入っています。ファイル名の形式は、yyyy-MM-dd-HH-mm-ss-SSS.mp4です。

videoフォルダには、デフォルトで、ファイル名に含まれる出席者IDの一部として「#content」のサフィックスを持つコンテンツ共有ストリームが入っています。

ファイル名の形式はyyyy-MM-dd-HH-mm-ss-SSS-[ATTENDEE-ID]#content.mp4です。

meeting-eventsフォルダとdata-channelフォルダには、それぞれイベントメッセージとデータチャネルメッセージが入っています。これらのアーティファクトは、会議の記録中にイベントまたはメッセージが発生した場合にのみ表示されます。

会議のアーティファクトを組み合わせるためのデモ

また、これらの新機能の動作を確認するために使用できるAWSCloud Development Kit (AWS CDK) のデプロイも含めました。具体的には、以下のものが含まれます。

  • S3バケット — キャプチャされたメディアと処理されたメディアを格納するためのシンクとして使用されます。
  • AWS Lambdaの作成 — ミーティングを作成し、Amazon Chime SDKミーティングにユーザーが参加するために使用されます。
  • Lambdaの記録 — メディアキャプチャパイプラインを開始および停止するために使用されます。
  • Lambdaの処理 — 動画を別のチャンクから単一のmp4ファイルに処理するために、録画が停止した後に使用されます。
  • Amazon API Gateway — クライアント側のブラウザーからLambdaをトリガーするために使用されます。
  • AWS SDK Layer — Lambdaでは現在利用できないAmazon Chime APIにアクセスするために、Create and Record Lambdaによって使用されます。
  • Pythonレイヤー ffmpegで支援するため、Process Lambdaによって使用されます。
  • FFMPEG レイヤー — Process Lambda でファイルを連結するために使用されます。Amazon Linux 2用のFFMPEG/FFProbeの静的ビルド。serverlessrepoからデプロイされたFFmpeg 4.1.3をバンドルします。

デモのデプロイと使用手順は、githubリポジトリにあります。このデモでは、Node.JS LambdaのAWS SDKバージョンのCreateMediaCapturePipelineおよびDeleteMediaCapturePipelineを使用して、メディアキャプチャパイプラインを作成および削除します。また、Amazon Chime SDKミーティングを作成し、参加するためには、Reactクライアントを使用します。最後に、録音が停止しましたら、Python Lambdaを使用して複合メディアファイルを作成します。

結論

このブログでは、デベロッパーが独自のコンテナフリートを維持することなくAmazon Chime SDKミーティングをキャプチャできる、新しいメディアキャプチャパイプライン機能について紹介しました。また、デモをデプロイして、メディアキャプチャ機能を試したり、メディアアーティファクトを組み合わせたりする方法についても学習しました。

次のステップとして、メディアキャプチャパイプラインデベロッパーガイドで詳細と要件を確認することをお勧めします。


参考リンク

AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)

AWSのメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。

翻訳は BD山口、SA小林が担当しました。原文はこちらをご覧ください。