この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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分程度で完了できるので、「とりあえずプロデューサーが必要」という場合には、お勧めだと思いました。