[Amazon Kinesis Video Streams] Dockerイメージのプロデューサーライブラリで動画配信(Raspberry Pi編)
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凄い。