はじめに
Android端末でストリーミング動画の再生と保存を実現する必要があったので、まずは手元のMacで試してみることにしました。
C++プロデューサーSDKをGStreamerプラグインとして使用します。
以下のREADME.mdを参考にしています。
Kinesis Video Streamとは
デバイスからAWSクラウドへのビデオのライブストリーミングに使用したり、あるいはリアルタイムのビデオ処理やバッチ指向のビデオ分析のためのアプリケーションを構築できる完全管理のAWSのサービスです。
用意されているSDKを使用することで、デバイスのメディアソースをAWSにストリーミングして再生、保存、分析、機械学習
などを実行できます。
プロデューサーSDKの準備
まずはgit clone
でC++プロデューサーSDKをGitHubからダウンロードします。
$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
ダウンロードしたリポジトリにbuild
ディレクトリを準備します。
$ cd amazon-kinesis-video-streams-producer-sdk-cpp
$ mkdir build
$ cd build
必要なライブラリを取得します。
$ brew install pkg-config openssl cmake gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly log4cplus gst-libav
buildディレクトリでcmakeを実行し、GStreamerサンプルプログラムを含めてビルドします。
$ cmake .. -DBUILD_DEPENDENCIES=OFF -DBUILD_GSTREAMER_PLUGIN=ON
ここで、私の環境では以下のようなエラーが発生しました。
エラー内容と解決方法
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR)
CMake Error at dependency/libkvscproducer/kvscproducer-src/CMakeLists.txt:118 (message):
OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where
OpenSSL's pc file is
opensslがうまくリンクされていなかったようです。
brew link
で解決できました。
brew link openssl --force
cmake
を実行した後、buildディレクトリでmake
を実行します。
$ make
以下のように出力されれば、コンパイル完了です。
[ 38%] Built target kvspic
[ 58%] Built target kvspicUtils
[ 68%] Built target kvsCommonCurl
[ 79%] Built target cproducer
[ 89%] Built target KinesisVideoProducer
[ 91%] Built target kvs_gstreamer_multistream_sample
[ 92%] Built target kvs_gstreamer_audio_video_sample
[ 94%] Built target kvs_gstreamer_file_uploader_sample
[ 95%] Built target kvs_gstreamer_sample
[100%] Built target gstkvssink
GStreamerプラグインを使用して実行
以下は、buildディレクトリではなく、リポジトリのルートから実行します。
$ export GST_PLUGIN_PATH=`pwd`/build
$ export LD_LIBRARY_PATH=`pwd`/open-source/local/lib
$ gst-inspect-1.0 kvssink
上記が問題なく実行できれば、ストリーミングの実行が可能です。
以下のように、実行するとKinesis Video Streamのコンソール上でストリーミング動画を確認できます。音声は入りません。
gst-launch-1.0 autovideosrc ! videoconvert ! video/x-raw,format=I420,width=1280,height=720 ! vtenc_h264_hw allow-frame-reordering=FALSE realtime=TRUE max-keyframe-interval=45 bitrate=512 ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name=MyKinesisVideoStream storage-size=512 access-key="YourAccessKeyId" secret-key="YourSecretAccessKey" aws-region="ap-northeast-1"
音声を含めてストリーミングする場合は、以下を実行します。
gst-launch-1.0 -v avfvideosrc ! videoconvert ! vtenc_h264_hw allow-frame-reordering=FALSE realtime=TRUE max-keyframe-interval=45 ! kvssink name=sink stream-name="MyKinesisVideoStream" access-key="YourAccessKeyId" secret-key="YourSecretAccessKey" aws-region="ap-northeast-1" osxaudiosrc ! audioconvert ! avenc_aac ! queue ! sink.
実行すると、Kinesis Video Streamに"MyKinesisVideoStream"というストリーム名でビデオストリームが作成されました。
メディア再生
のタブを開くと、ストリーミング映像が確認できます。
クリップをダウンロード
からMP4形式でダウンロードすることができます。
Macでの実行例
Macでの様々な実行例が以下に記載されています。
おわりに
Android端末でも試してみました。
Android端末では、AndroidプロデューサーライブラリとAmazon Cognitoを使用してストリーミングすることができます。
以下を参考にして手順通りに実行すると、スムーズにストリーミングできました。