Amazon Chime SDKのビデオ会議の録画を試してみた

2020.11.06

こんにちは、CX事業本部の若槻です。

Amazon Chime SDKでは、会議の映像を録画する機能は標準ではありません(2020/11現在)が、AWSの機能を組み合わせて録画機能を実現するデモがAWS公式で紹介されています。

今回は、AWS公式のデモを参考にAmazon Chime SDKのビデオ会議の録画機能を実装してみました。

アウトプット

会議画面を録画して動画ファイルをS3バケットに保存する「録画機能」を開始および終了するRest APIを作成します。会議画面の表示はボットユーザーが参加者として会議に参加することにより行います。

構成は次のようになります。ボットユーザーの会議参加、録画はECSタスク上で行います。 image 画像はHow to Enable Client-Side Recording Using the Amazon Chime SDK | Business Productivityより引用

構成図にはありませんが、ECSクラスターに必要となるAmazon VPC、subnets、security group、auto-scaling groupもスタックデプロイ時に作成されます。

Rest APIの実行は、今回は会議画面からでなくPostmanのクライアントアプリから実行します。

録画対象の会議が実施される会議アプリ自体は下記で既に作成したデモアプリを使用します。

やってみた

Amazon ECRにリポジトリを作成

次のコマンドを実行してAmazon ECRにリポジトリを作成します。

aws ecr create-repository --repository-name <repository-name>

作成されたリポジトリのrepositoryUriを控えます。

% aws ecr create-repository --repository-name amazon-chime-sdk-recording-demo 
{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxxxxxxxxxx:repository/amazon-chime-sdk-recording-demo",
        "registryId": "xxxxxxxxxxxx",
        "repositoryName": "amazon-chime-sdk-recording-demo",
        "repositoryUri": "xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo",
        "createdAt": "2020-11-05T17:16:02+09:00",
        "imageTagMutability": "MUTABLE",
        "imageScanningConfiguration": {
            "scanOnPush": false
        }
    }
}

コンソールを見るとECRにリポジトリが作成されています。 image

録画デモのソースコードのダウンロード

% git clone https://github.com/aws-samples/amazon-chime-sdk-recording-demo.git
% cd amazon-chime-sdk-recording-demo

Dockerイメージのビルド、ECRリポジトリへのプッシュ

次のコマンドを実行してDockerイメージをビルドして、ECRリポジトリへプッシュします。

make ECR_REPO_URI=<repositoryUri>

実行してしばらくすると、スクリプトが完了してプッシュされたイメージのImage URIが表示されるので控えます。

% make ECR_REPO_URI=xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo

...

latest: digest: sha256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy size: 1576
Image URI in ECR repository: xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo:latest

コンソールを見るとECRのリポジトリにイメージがプッシュされています。 image

スタックのデプロイ

次のコマンドを実行してAmazon Chime SDKの録画機能のスタックをデプロイします。

node ./deploy.js -b <my-bucket> -s <my-stack> -i <my-docker-image-uri> -r <region>

デプロイが成功するとAPI GatewayのエンドポイントURLが表示されるので控えます。

% node ./deploy.js -b recording-demo-cnf-deploy-bucket -s recording-demo-cnf-stack -i xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo:latest -r ap-northeast-1

...

Successfully created/updated stack - recording-demo-cnf-stack in ap-northeast-1


Recording API Gateway invoke URL: https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/recording

Adding ECS capacity provider and enabling managed scaling & termination protection
Deployment complete

API認証用IAMユーザーの作成

録画機能のAPI実行時の認証に使用する管理者権限を持ったIAMユーザーを作成します。

% aws iam create-user --user-name chime-recording-user
% aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --user-name chime-recording-user

IAMユーザーのアクセスキーを作成し、アクセスキーIDとシークレットを控えます。

$ aws iam create-access-key --user-name chime-recording-user
{
    "AccessKey": {
        "UserName": "chime-recording-user",
        "AccessKeyId": "XXXXXXXXXXXXXXXXX",
        "Status": "Active",
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "CreateDate": "2020-11-05T13:45:43+00:00"
    }
}

Amazon Chime SDKの会議の開始

前回の記事で実装したAmazon Chime SDKのデモアプリで、録画対象とするWeb会議を開始します。 image

デモアプリが未実装の場合は前回の記事または以下を参考に実装してください。

開始したAmazon Chime SDKの会議のURLhttps://xxxxxxx.execute-api.us-east-1.amazonaws.com/Prod/v2/m=<meetingTitle>を控えます。

録画の開始

先程作成したAPI GatewayのRest APIを実行してAmazon Chime SDKの会議の録画を開始します。

Rest APIの実行はPostmanのクライアントアプリを使用します。未導入の場合はここからPostmanのアプリをダウンロード、インストールします。

メソッドはPOST、URLはスタックデプロイ時に控えたエンドポイントURLを指定します。[Authorization]タブで、[TYPE]はAWS Signature、[AccessKey]と[SecretKey]は先程作成したアクセスキーの値、[AWS Region]はスタックをデプロイしたリージョンを指定します。 image

[Params]タブで、クエリパラメータとして[recordingAction]はstart、[meetingURL]はURLエンコードしたAmazon Chime SDKの会議のURLを指定します。[Send]をクリックしてPOSTリクエストを実行すると、ECRタスクARNがレスポンスされ、会議の録画が開始されます。 image

会議の参加者一覧を見ると、録画用のBotユーザー「<< Meeting Recorder >>」が会議に参加者として参加しています。 image

録画の終了、録画ファイルの保存

先程Postmanでの録画開始時のリクエストのクエリパラメータを変更します。[Params]タブで、[recordingAction]はstop、[taskId]は録画開始時のリクエストでレスポンスされたECSタスクのIDを指定します。[Send]をクリックしてPOSTリクエストを実行すると、ECRタスクの情報がレスポンスされ、会議の録画が終了します。 image

会議の参加者一覧を見ると、録画用のBotユーザーが退出していなくなっています。 image

録画ファイルはS3バケットchime-meeting-sdk-<aws-account-id>-<region>-recordingsYYYY/MM/DD/HHキーにmp4ファイルとして保存されます。 image

ダウンロードしたmp4を再生してみるとちゃんと会議の画面が音声付きで録画できています。 image

ただし、録画画面上だと参加者名などの日本語文字が文字化けしてしまっているため、この部分は改善が要りそうです。

おわりに

AWS公式のデモを参考にAmazon Chime SDKのビデオ会議の録画機能を実装してみました。

会議の録画機能は標準機能としてあるに越したことはありませんが、AWSの機能をフル活用すれば標準機能と遜色ない機能として実装できるのは良いですね。

参考

以上