BLOG

R3 Cloud Journey

AWS

Amazon IVS で投票した内容を Amazon Honeycode に保存集計することを考える

2020-07-21

先日、 Amazon Interactive Video Service (Amazon IVS) という AWSの新しいサービスがリリースされました。
このサービスを使うと AWSで 動画のライブ配信ができます。ライブ配信したいだけであれば YouTube Live でええやんという話なのですが、動画プレイヤーの SDK があわせて提供されているため、既存の Webシステムやスマホアプリに再生機能を組み込んで 一般には公開しないライブ配信を実装することができます(もちろん、公開ライブ配信もできます)

さらに Amazon Interactive Video Service (Amazon IVS) には Timed Metadata API という機能があり、動画の再生中に視聴者へ一斉通知を行うことができます。
この機能を使用すると、ニコニコ生放送の「アンケート」機能のようなものを簡単に実現することができます。今回はこの Timed Metadata API を試してみようと思います。

Amazon IVS には 誰でも簡単に試せる ワークショップ(チュートリアル) が用意されています。このワークショップの手順に従って Amazon IVS の設定を行っていきます。

配信チャンネルを作成すると https://ほげほげ.us-west-2.playback.live-video.net/api/video/v1/us-west-2.AWSアカウントID.channel.ほげほげ.m3u8 という要領の 再生URL が払い出されるので、動画プレイヤー側で この再生URLを指定するだけでライブ配信を再生することができます。同時に、チャンネルを作成すると 作成されたチャンネルには Amazon Resource Name (ARN) が付けられます。

ワークショップの Timed Metadata の項 の手順に従い、IVS の API エンドポイントに SigV4 を付けて ARN と送りたい内容を指定して HTTPリクエストを投げると プレイヤー側で受け取ることができます。

Timed Metadata API で受信したデータを表示

Web の再生サンプルは ワークショップ中に書かれている CodePen や https://github.com/aws-samples/amazon-ivs-player-web-sample にあります。
PlayerEventType.TEXT_METADATA_CUE というイベントを捕捉すれば通知を受信できるので、この中で受け取ったデータを処理します。


  player.addEventListener(PlayerEventType.TEXT_METADATA_CUE, function (cue) {
    console.log("Timed metadata: ", cue.text);
    const metadataText = cue.text;
    const position = player.getPosition().toFixed(2);
    console.log(
      `PlayerEvent - METADATA: "${metadataText}". Observed ${position}s after playback started.`
    );
    // ここで受け取った情報をもとに UIを構築するといった処理を行えば良い
    triggerQuiz(metadataText);
  });

ここから先のごにょごにょは全部自分でコーディングする必要があります。
データをクラウドへ送るのは Amplify DataStore を使うのが圧倒的に楽です。 await DataStore.save( 送りたいデータ ); と書くだけで DynamoDB にデータが入るので

ただ、DynamoDB は入れたデータを一覧表示や集計するといった用途には あまり適していないかもしれません。
単純にカウントを取りたいだけであれば、いわゆる アトミックカウンター という方法で値をインクリメントすれば良いのですが、あとで分析とかしたいのであれば 別のデータソースに(も)転記するのが良いかもしれません。

DynamoDB Streams から SQS を介して VPC Lambda で RDS へ・・ といった構成も考えられると思いますが、本当に RDB が必要なのかを考えるべきだと思います。Kinesis Data Firehose から S3(データレイク)に貯めたいケースもあるでしょうし、Google Spreadsheet や kintone, Amazon Honeycode や 場合によっては Pinpoint なんかが向いているかもしれません。

kintone に入れれば 集計や グラフなどの可視化を手軽に行える

Honeycode の API をガンガン叩くと Rate Limit に引っかかったりするかもしれませんね。SQS にいったん貯めておいて まとめて書き込むとか、Exponential Backoff and jitter  、サーキットブレーカー の仕組みが必要かもしれません。弊社はこういうシステムをいくつも作ってきたので、そろそろ新しいブレイクスルーがないかなと思う今日この頃です。

料金

Timed Metadata API を使うこと自体には費用はかからないようです。やったね。
Amazon IVS へのビデオ入力の時間と、各視聴者に配信された時間のそれぞれに費用がかかります。視聴者が増えれば増えるほど費用がかかります。

現状は 日本 > Oregon > 日本 と経由して配信されているようなので、それなりの価格が設定されているのは仕方のないことかもしれませんね。
早く日本でリーズナブルに使えるようになればいいなと思います。

AWS

アールスリーインスティテュートで、これまでになかった画期的な kintoneカスタマイズサービス gusuku Customine(カスタマイン) を開発しています。 kintone認定アプリデザイン/カスタマイズ スペシャリスト

R3のご提供サービス
自社のシステム開発・移行などをご依頼したい方
お客様とともに作りながら考える
新しいシステム開発
kintone導入・アプリ開発・カスタマイズにお困りの方
kintoneをもっと使いやすくする
gusukuシリーズ