Amazon Kinesis Video Streams with WebRTC を使用して、RasPIで動画を送ってみました。

2019.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

[2019/12/18] @voluntas 様から、貴重なご指摘を頂き、修正及び、加筆させて頂きました。

https://twitter.com/voluntas/status/1206930210731393024

1 はじめに

CX事業本部の平内(SIN)です。

AWS re:Invent 2019 では、Kinesis Video Streams での WebRTC サポートが発表されました。

[アップデート] Kinesis Video Streams が WebRTC をサポートする様になりました! #reinvent

Kinesis Video Streamsだと、どうしても数秒のタイムラグが避けられなかったのですが、WebRTCだと、ほぼリアルタイムだと言うことで期待絶大です。

今回は、上記の記事と同じ内容で恐縮ですが、Raspberry Piでマスターとなるサーバーを立ち上げてみて動画の配信用にマスターを起動してみて、どれぐらいの使用感かを試してみました。

実際に、動作している様子が以下です。表示されている時計の時刻をみると、この構成で1秒弱であることが分かります。

注:遅延が発生しているのは、RaspberryPIの性能の問題です。KinesisVideoStreamsのコンソールには、作成したチャンネルにブラウザからマスターとビューワーで接続テストする機能があり、下記は、それを表示している様子です。この状態では、動画はP2Pで送られるため、遅延は、殆どありません。

2 Raspberry PI

使用したRaspberry PIは、「3 Model B+」で、最新の、Raspbian(2019-09-26)を使用しました。

型番

$ cat /proc/cpuinfo | grep Revision
Revision : a020d3 <= RasPI3 Model B+

Linux OSのディストリとバージョン

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster

カーネル

$ uname -a
Linux raspberrypi 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l GNU/Linux

3 Kinesis Video Starems

WebRTC-Streamと言う名前で、シグナルチャンネルを作成しました。

詳細情報を確認すると、ARNは、WebRTC-Stream/1576555300930となっていました。

4 ユーザー作成

アクセスキーとシークレットで利用するためのユーザーを作成しました。

パーミッションについて、リソースを今回作成したチャンネルのみに絞っていますが、Actionは、とりあえず * となっています。事後、最小限のパーミッションを確認していきたいと思います。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "kinesisvideo:*",
"Resource": "arn:aws:kinesisvideo:ap-northeast-1:XXXXXXXXXXXX:channel/WebRTC-Stream/1576555300930"
}
]
}

5 amazon-kinesis-video-streams-webrtc-sdk-js

Raspberry PIでの作業は、下記に記載のあるとおりです。

https://docs.aws.amazon.com/kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-sdk-js.html

pi~ $ git clone https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js.git
pi ~$ cd amazon-kinesis-video-streams-webrtc-sdk-js
pi ~$ npm install
pi ~$ npm run develop

途中、1件だけモジュール不足のエラーが出てたので、足しました。

Error: Cannot find module 'fork-ts-checker-webpack-plugin'
fork-ts-checker-webpack-plugin
pi ~$ npm install fork-ts-checker-webpack-plugin

6 起動

npm run developで、ローカルにWebサーバが立ち上がりますので、http://localhost:3001/でアクセスします。

アクセスキー、シークレット、チャンネル名を入力して、Start Masterをクリックすると、Masterとして起動します。

Kinesis Video Streamsのコンソールに戻って、メディア再生ビューワーで、配信されている動画ビューワーとして動画を確認することができます。

7 最後に

Webカメラの配信用に、Kinesis Video Streamsのプロデューサーを Raspberry PI で動作させると、ちょっと重たくて辛い感じ経っだのですが、with WebRTCは、非常に軽快に動いています。WebRTCを利用すると、動画の配信用としては、利用に耐えると感じました。

また、こちらのSDKは、C++ C だけでなく、JavaScriptなどでも提供されているので、より利用しやすいと個人的には思います。

参考:https://docs.aws.amazon.com/kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-how-it-works.html