Amazon Kinesis Video Streams with WebRTC を使用して、RasPIで動画を送ってみました。
[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などでも提供されているので、より利用しやすいと個人的には思います。