[Amazon Kinesis Video Streams] Dockerイメージのプロデューサーライブラリで動画配信(Raspberry Pi編)

2019.03.26

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

1 はじめに

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

昨日は、Amazon Kinesis Video Streamsへ映像を配信するためのプロデューサーライブラリをMac上のDockerイメージで利用する要領を試してみました。

今日は、Raspberry Piで同じくDockerイメージによる動画の配信を試して見ました。

Raspberry Piでの、Dockerイメージのpullには、数分を要しましたが、コンパイルすると・・・

「3-4時間ほどかかります。。。」(※ Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【Raspberry Pi】より

という感じらしいので、Dockerに頼るメリットは大きいかも知れません。

なお、Raspbianは、昨年11月の最新版(Raspbian GNU/Linux 9 (stretch)) 2018-11-13-raspbian-stretch.img を使用しました。

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

Raspberry PiでDockerを起動して、Kinesis Video Streamsに配信しています。 カメラは、RTSPプロトコルでネットワークカメラを使用しています。

2 AWS CLI/Docker

(1) AWS CLIインストール

AWS ECRからDockerイメージをpullするため、AWS CLIの最新(1.16.131)をセットアップしました。

pi@raspberrypi:~ $ sudo apt-get install awscli
pi@raspberrypi:~ $ sudo pip3 install awscli --upgrade
pi@raspberrypi:~ $ aws --version
aws-cli/1.16.131 Python/3.5.3 Linux/4.14.79-v7+ botocore/1.12.121

pi@raspberrypi:~ $ aws configure
AWS Access Key ID [None]: xxxxxx
AWS Secret Access Key [None]: xxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

(2) Docker

Dockerのバージョンは、18.09.0 となっていました。ユーザーpiにパーミッションを与えて再起動しています。

pi@raspberrypi:~ $ curl -sSL https://get.docker.com | sh
pi@raspberrypi:~ $ docker -v
Docker version 18.09.0, build 4d60db4

pi@raspberrypi:~ $ sudo groupadd docker
pi@raspberrypi:~ $ sudo usermod -g docker pi
pi@raspberrypi:~ $ sudo reboot

3 Dockerによる動画配信

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

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

(1) Dockerログイン

pi@raspberrypi:~ $ aws ecr get-login --no-include-email --region us-west-2 --registry-ids 546150905175
docker login -u AWS -p xxx= https://546150905175.dkr.ecr.us-west-2.amazonaws.com
pi@raspberrypi:~ $ docker login -u AWS -p xxx= https://546150905175.dkr.ecr.us-west-2.amazonaws.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/pi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

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

たぶんRaspberry PiのIOのせいだと思いますが、数分かかりました。

pi@raspberrypi:~ $ docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi:latest

Digest: sha256:e2e66221ca45b01fe0b49e346866b3480505e535e5e121342a0b80ec2737ff99
Status: Downloaded newer image for 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi:latest

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

pi@raspberrypi:~ $ docker images
REPOSITORY                                                                                 TAG                 IMAGE ID            CREATED             SIZE
546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi   latest              d7784b3a08a2        4 weeks ago         1.12GB

(3) Dockerイメージの実行

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

--deviceでデバイスを定義していますが、すいません、使ってません。

pi@raspberrypi:~ $ docker run -it --device=/dev/video0 --device=/dev/vchiq -v /opt/vc:/opt/vc 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi /bin/bash
root@0074308227b4:/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build#

(4) Dockerイメージの状態

ログインすると、プロデューサーライブラリのinstall-scriptスクリプトの実行が完了して、コンパイルなどが終わった状態となっています。 また、カレントディレクトリは、/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-buildとなっています。

# pwd
/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build

# ls -la
・・・略・・・・
drwxr-xr-x  3 root root    4096 Feb 23 02:56 downloads
-rwxr-xr-x  1 root root   28498 Feb 22 01:20 install-script
-rwxr-xr-x  1 root root  462256 Feb 23 02:58 kinesis_video_gstreamer_audio_video_sample_app
-rwxr-xr-x  1 root root  371160 Feb 23 02:58 kinesis_video_gstreamer_sample_app
・・・略・・・・

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

# ls -la downloads/local/lib/ | grep kvssink
-rwxr-xr-x  1 root root  714204 Feb 23 03:02 libgstkvssink.so

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

# source set_kvs_sdk_env.sh

(5) 配信

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

# export AWS_DEFAULT_REGION=ap-northeast-1

kinesis_video_gstreamer_sample_appで配信します。カメラは、前回と同じくrtspサーバとなっているネットワークカメラです。

# AWS_ACCESS_KEY_ID=xxxx AWS_SECRET_ACCESS_KEY=xxxx ./kinesis_video_gstreamer_sample_app TestStream rtsp://192.168.0.105/

4 最後に

実は、当初、Raspberry PiにUSB接続した、Webカメラを使用して作業をはじめました。

pi@raspberrypi:~ $ ls -la /dev/video*
crw-rw----+ 1 root video 81, 0 Mar 26 05:30 /dev/video0

Dockerイメージ実行時も、パラメータに --device=/dev/video0 とすることで、しっかり認識は出来ていたのですが、どうも、Kinesis Video Streamsでスムーズに表示することが出来ませんでした。 挫折して、rtspサーバに変えると、それなりの遅延で動作していたので、Raspberry Piの性能限界というわけではなさそうです。

どうも考慮が足りていないようなのですが・・・何かヒントがありましたら、是非、教えてやってください。

でも、Docker凄い。

5 参考リンク

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