Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【RaspberryPi】 min-install-script編
はじめに
CX事業本部の平内(SIN)です。
AWS Kinesis Video Streams(以下、Kinesis Video Streams)では、C++,Java,Android用の プロデューサーライブラリが提供されています。
この中で、C++では、各種OS用のものをコンパイルすることで、GStreamer用のエレメント(シンク)を構築することが出来ます。
ここDevelopers.IOでもMacや、RaspberryPI上でこれを試している記事が公開されています。
Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【MacBook Pro】– ClassmethodサーバーレスAdvent Calendar 2017
Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【Raspberry Pi】– ClassmethodサーバーレスAdvent Calendar 2017
[Amazon Kinesis Video Streams] Dockerイメージのプロデューサーライブラリで動画配信(Raspberry Pi編)
今回やってみたのは、Raspberry Piでmin-install-scriptを使用した手順です。
下記の「重要」に記載されている話です。
Raspberry Pi で C++ プロデューサー SDK を使用する
install-scriptでコンパイルすると非常に時間がかかるので、お勧めかも知れません。
※ ↓先の記事より引用させて頂きました
ビルドを行います(3-4時間ほどかかります。。。)
2 環境
使用したRaspberry Pi のModelは、4Bです。
$ cat /proc/cpuinfo | grep Revision Revision : c03112
OSは、昨年9月の最新版(Raspbian GNU/Linux 10 (buster)) 2019-09-26-raspbian-buster-full.img を使用しました。
$ 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-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
3 セットアップ
(1) ツール等のインストール
最初に、git、cmake、g++ をapt-getでインストールします。
$ sudo apt-get update $ sudo apt-get install git $ sudo apt-get install cmake $ sudo apt-get install g++
続いてプロデューサーライブラリが必要とする依存ライブラリのインストールです。
$ sudo apt-get install libssl-dev libcurl4-openssl-dev liblog4cplus-1.1-9 liblog4cplus-dev $ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base-apps
下記は、GStreamerとそのライブラリをインストールしています。
$ sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools $ sudo apt-get install gstreamer1.0-omx
最後に、makeもインストールしています。
$ sudo apt-get install make
(2) SFSRootCAG2.pem
./java-install-scriptで、Java Producer SDKで使用されるKinesisVideoProducerJNIネイティブライブラリをビルドする際に必要となります。
https://www.amazontrust.com/repository/SFSRootCAG2.pemをダウンロードして /etc/ssl/cert.pem に配置します。
$ ls -la /etc/ssl/cert.pem -rw-r--r-- 1 root root 1424 Jan 27 16:16 cert.pem
(3) git clone
プロデューサーSDKをダウンロードし、kinesis-video-native-buildの中まで入ります。(これ以降、ここが作業ディレクトリとなります)
$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp $ cd amazon-kinesis-video-streams-producer-sdk-cpp/ $ cd kinesis-video-native-build/
clone時点でのkinesis-video-native-build内は、以下のとおりでした。
$ ls -la total 116 drwxr-xr-x 5 pi pi 4096 Jan 27 16:11 . drwxr-xr-x 12 pi pi 4096 Jan 27 16:11 .. drwxr-xr-x 3 pi pi 4096 Jan 27 16:11 cmake -rw-r--r-- 1 pi pi 20463 Jan 27 16:11 CMakeLists.txt -rwxr-xr-x 1 pi pi 2918 Jan 27 16:11 gstreamer-plugin-install-script -rwxr-xr-x 1 pi pi 27514 Jan 27 16:11 install-script -rw-r--r-- 1 pi pi 1207 Jan 27 16:11 install-script-ami -rw-r--r-- 1 pi pi 2915 Jan 27 16:11 install-script-common.sh -rwxr-xr-x 1 pi pi 1488 Jan 27 16:11 java-install-script -rw-r--r-- 1 pi pi 797 Jan 27 16:11 kvs_log_configuration -rwxr-xr-x 1 pi pi 7724 Jan 27 16:11 min-install-script drwxr-xr-x 5 pi pi 4096 Jan 27 16:11 projectFiles drwxr-xr-x 2 pi pi 4096 Jan 27 16:11 samples -rw-r--r-- 1 pi pi 997 Jan 27 16:11 vs-buildtools-install.bat -rw-r--r-- 1 pi pi 10342 Jan 27 16:11 windows-install.bat -rw-r--r-- 1 pi pi 1515 Jan 27 16:11 windows-java-install.bat
(4) min-install-script
身構えて、min-install-scriptを実行しましたが、ビックリするぐらいすぐ終わってしまいました。
$ ./min-install-script ....略 ********************************************************** Success!!! **********************************************************
kinesis-video-native-build内では、コンパイル済のモジュールがダウンロードされていることを確認できます。
$ ls -la total 1916 drwxr-xr-x 8 pi pi 4096 Jan 27 16:25 . drwxr-xr-x 12 pi pi 4096 Jan 27 16:11 .. drwxr-xr-x 2 pi pi 4096 Jan 27 16:19 certs drwxr-xr-x 3 pi pi 4096 Jan 27 16:11 cmake -rw-r--r-- 1 pi pi 14585 Jan 27 16:25 CMakeCache.txt drwxr-xr-x 4 pi pi 4096 Jan 27 16:25 CMakeFiles -rw-r--r-- 1 pi pi 20463 Jan 27 16:11 CMakeLists.txt drwxr-xr-x 4 pi pi 4096 Jan 27 16:21 downloads -rwxr-xr-x 1 pi pi 2918 Jan 27 16:11 gstreamer-plugin-install-script -rwxr-xr-x 1 pi pi 27514 Jan 27 16:11 install-script -rw-r--r-- 1 pi pi 1207 Jan 27 16:11 install-script-ami -rw-r--r-- 1 pi pi 2915 Jan 27 16:11 install-script-common.sh -rwxr-xr-x 1 pi pi 1488 Jan 27 16:11 java-install-script -rwxr-xr-x 1 pi pi 13496 Jan 27 16:22 kinesis_video_cproducer_video_only_sample -rwxr-xr-x 1 pi pi 104036 Jan 27 16:23 kinesis_video_gstreamer_audio_video_sample_app -rwxr-xr-x 1 pi pi 99332 Jan 27 16:22 kinesis_video_gstreamer_sample_app -rwxr-xr-x 1 pi pi 92104 Jan 27 16:23 kinesis_video_gstreamer_sample_multistream_app -rw-r--r-- 1 pi pi 797 Jan 27 16:11 kvs_log_configuration -rwxr-xr-x 1 pi pi 18408 Jan 27 16:22 kvs_producer_plugin_demo -rwxr-xr-x 1 pi pi 14456 Jan 27 16:21 kvs_producer_plugin_rtsp_demo -rwxr-xr-x 1 pi pi 469580 Jan 27 16:22 libcproducer.so -rwxr-xr-x 1 pi pi 129800 Jan 27 16:23 libgstkvssink.so -rw-r--r-- 1 pi pi 376780 Jan 27 16:22 libkvspic.a -rwxr-xr-x 1 pi pi 203112 Jan 27 16:22 libproducer.so -rw-r--r-- 1 pi pi 272728 Jan 27 16:21 Makefile -rwxr-xr-x 1 pi pi 7724 Jan 27 16:11 min-install-script drwxr-xr-x 5 pi pi 4096 Jan 27 16:11 projectFiles drwxr-xr-x 2 pi pi 4096 Jan 27 16:11 samples -rw-r--r-- 1 pi pi 997 Jan 27 16:11 vs-buildtools-install.bat -rw-r--r-- 1 pi pi 10342 Jan 27 16:11 windows-install.bat -rw-r--r-- 1 pi pi 1515 Jan 27 16:11 windows-java-install.bat
(5) Open JDK
JNIライブラリを使用する場合は、JDKも必要になります。
$ sudo apt-get install openjdk-8-jdk $ java -showversion openjdk version "11.0.3" 2019-04-16 OpenJDK Runtime Environment (build 11.0.3+7-post-Raspbian-5) OpenJDK Server VM (build 11.0.3+7-post-Raspbian-5, mixed mode) $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $ ./java-install-script
4 使用してみる
(1) GStreamer
GStreamerは、最初のapt-getで /usr/bin/ にインストールされています。
$ which gst-launch-1.0 /usr/bin/gst-launch-1.0
バージョンは、1.14.4となっていました。
$ gst-launch-1.0 --version gst-launch-1.0 version 1.14.4 GStreamer 1.14.4 http://packages.qa.debian.org/gstreamer1.0
USBにWebカメラを接続し、gst-device-monitor-1.0で確認すると、v4l2srcで利用可能であることが分かります。
$ gst-device-monitor-1.0 Device found: name : HD Pro Webcam C920 class : Video/Source gst-launch-1.0 v4l2src ! ...
とりあえず、autovideosinkで、カメラの入力を確認してみました。
$ gst-launch-1.0 v4l2src ! autovideosink
(2) ライブラリへのパス
作業ディレクトリ内に、シンク等のライブラリ(kvssinkの実体は、libgstkvssink.soです)がダウンロードされているので、GStreamerから利用可能にするため環境変数をセットします。
$ ls -la lib* -rwxr-xr-x 1 pi pi 469580 Jan 27 16:22 libcproducer.so -rwxr-xr-x 1 pi pi 129800 Jan 27 16:23 libgstkvssink.so -rw-r--r-- 1 pi pi 376780 Jan 27 16:22 libkvspic.a -rwxr-xr-x 1 pi pi 203112 Jan 27 16:22 libproducer.so
$ export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH $ export GST_PLUGIN_PATH=$PWD:$GST_PLUGIN_PATH
環境変数を設定すると、gst-inspect-1.0で、kvssinkが認識されていることを確認できます。
$ gst-inspect-1.0 | grep kvs kvssink: kvssink: KVS Sink
(3) Kinesis Video Streamsへの送信
gst-launch-1.0でKinesis Video Streamsへ送信します。フレームレートを少し控えめにすると、安定して送信出来ているようでした。
$ gst-launch-1.0 -v v4l2src do-timestamp=TRUE ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 ! x264enc bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name=MyStream access-key="XXXX" secret-key="XXXX" aws-region="ap-northeast-1"
5 最後に
今回は、RaspberryPi上で、min-install-scriptを使用してKinesis Video Streamsへの送信まで確認してみました。
全部コンパイルするのとは違い、間違わなければ、30分程度で完了できるので、「とりあえずプロデューサーが必要」という場合には、お勧めだと思いました。