[Amazon Kinesis Video Streams] DockerイメージのプロデューサーライブラリでRTSPサーバの動画を配信してみました。

2019.03.25

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

1 はじめに

こんにちは、AIソリューション部の平内(SIN)です。

Amazon Kinesis Video Streamsへ映像を配信するためのプロデューサーライブラリは、JavaとC++のコードがAWSより提供されています。 これを使用した動画配信の要領は、既に、ここDevIOでも紹介されているとおりです。

Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【MacBook Pro】– ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent

Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【Raspberry Pi】– ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent

プロデューサーライブラリでは、GStreamerのプラグインの形で、Kinesisにストリームを送信するシンクを提供していますが、配信には、ある意味このモジュールが必須と言えると思います。

作業としては、GitHubのコードをCloneしてスクリプトを実行するだけというものですが、予め依存関係のセットアップなどが必要で、ちょっと面倒だったりします。

今回は、この辺の作業が全部完了しているDockerイメージを使用して、動画を配信する要領を試して見ました。ちなみに、このDockerイメージもAWSで提供されいるものです。

最初に動作しているようすです。

MacでDockerを起動して、Kinesis Video Streamsに配信しています。 Dockerイメージからは、Macのカメラが見えなかったので、ネットワークカメラをRTSPプロトコルで使用しています。

2 Dockerコンテナでの配信

下記にDockerで利用する方法が紹介されています。そのまま、なぞっただけです。

例: Kinesis ビデオストリーム プロデューサー SDK GStreamer プラグイン - Docker コンテナで GStreamer エレメントを実行します。

(1) Dockerログイン

$ aws ecr get-login --no-include-email --region us-west-2 --registry-ids 546150905175
docker login -u AWS -p xxxxxxxx https://546150905175.dkr.ecr.us-west-2.amazonaws.com
$ docker login -u AWS -p xxxxxxxx https://546150905175.dkr.ecr.us-west-2.amazonaws.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded

(2) イメージのダウンロード

$ sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest
latest: Pulling from kinesis-video-producer-sdk-cpp-amazon-linux
Digest: sha256:611a6ccb5f60dfdd60473db591eba9738b42b9e864acd3df570b7124d597f4d0
Status: Image is up to date for 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest

イメージが追加されたことを確認しています。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux latest 36a8d19a8ca5 10 days ago 2.82GB

(3) Dockerイメージの実行

macOS で Docker イメージを実行します。

$ sudo docker run -it --network="host" 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash
bash-4.2#

(4) Dockerイメージの状態

ログインすると、プロデューサーライブラリのinstall-scriptスクリプトの実行が完了して、コンパイルなどが終わった状態となっています。

bash-4.2# pwd
/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build
bash-4.2# ls -la
・・・略・・・・
drwxr-xr-x 28 root root 4096 Mar 15 01:08 downloads
-rwxr-xr-x 1 root root 25047 Mar 15 00:54 install-script
-rwxr-xr-x 1 root root 130664 Mar 15 01:08 kinesis_video_gstreamer_audio_video_sample_app
-rwxr-xr-x 1 root root 122512 Mar 15 01:08 kinesis_video_gstreamer_sample_app
・・・略・・・・

GStreamer のプラグイン(シンク)として動作するkvssinkも既に出来上がっています。

# ls -la downloads/local/lib/ | grep kvssink
-rwxr-xr-x 1 root root 195704 Mar 15 01:08 libgstkvssink.so

環境変数に必要なパスを設定することで利用可能になります。

$ export LD_LIBRARY_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATH
$ export PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:$PATH
$ export GST_PLUGIN_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$GST_PLUGIN_PATH

(5) 配信

リージョンがデフォルトで、オレゴンになっているので、東京に変更します。

$ export AWS_DEFAULT_REGION=ap-northeast-1

kinesis_video_gstreamer_sample_appで配信します。(RTSPサーバが、192.168.0.105で動作しています)

$ AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=xxx ./kinesis_video_gstreamer_sample_app TestStream rtsp://192.168.0.105/

3 RTSPサーバ

簡単ですが、今回使用したRTSPサーバについてです。

iPhoneにインストールして使用できる、Live-Reporterを利用させて頂きました。

Live-Reporter - 監視カメラ

インストール・起動するだけで、簡単にRTSPサーバになって動画配信が可能です。

画面上にアドレスも表示されていますので、そのまま使用できます。

4 最後に

Kinesis Video Streamsの配信も、Dockerイメージを利用すると、 何もしなくても出来てしまう感じです。Raspai用のイメージも提供されていたので、次、試してみたいと思います。 Docker凄い。

5 参考リンク

例: Kinesis ビデオストリーム プロデューサー SDK GStreamer プラグイン

世界初の本格的iOSカメラサーバーアプリ「Live-Reporter」

Live-Reporter使い方


弊社ではAmazon Connectのキャンペーンを行なっております。

また音声を中心とした各種ソリューションの開発支援も行なっております。