Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【RaspberryPi】 min-install-script編

2020.01.28

はじめに

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分程度で完了できるので、「とりあえずプロデューサーが必要」という場合には、お勧めだと思いました。