メモ

ACTABAのホームページ

TOP > AWS Kinesis Video Streamを試してみた

見出し

AWS Kinesis Video Streamを試してみたのでそのメモ。(2022/8)

マルチメディアフレームワークのGStreamer(https://gstreamer.freedesktop.org/)からAWS Kinesis Video Stream(KVS)に動画をアップロードしてみた。
GStreamerからAWS KVSに動画をアップロードするには、GStreamerのプラグインを使えば便利。
AWSからGStremaer Pluginのサンプルコードが下記に公開されている。
https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp

Windows 11でビルドするのに手間取ったため、参考までに、実施した手順を記載します。

サンプルコードにはJNIも含まれていますが、JNIのビルドをONにするとエラーがでるため、ここではビルドしていません。

Amazon Kinesis Video Streamとは?!

AWS KVSは、カメラなどのデバイスから AWS へ動画を簡単にストリーミングができる仕組みとのことで、AWSに送信された動画は再生だけでなく、機械学習や分析などにも利用できるとのこと。
詳しく知りたい方は下記を参照ください。
Amazon Kinesis Video Streams(https://aws.amazon.com/jp/kinesis/video-streams/

試した環境

OS:Windows 11

動かしてみるまでの流れ

手順は下記の通り
1.サンプルコードのダウンロード
2.Microsoft C++ Build Toolsのインストール
3.GStreamerのインストール
4.その他の必要なソフトのインストール
  ・MinGW
  ・pkg-config.exe
  ・intl.dll
  ・glib.dll
  ・strawberry-perl
5.コンパイルの準備(cmake)
6.コンパイル(nmake)
7.動かしてみる


サンプルコードのダウンロード

GStreamerプラグインは、AWSから公開されているC++プロデューサライブラリのサンプルコードに同梱されています。
gitからサンプルコードをダウンロードしてビルドします。ダウンロードのURLは下記。
 https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp

ダウンロードしたファイルを任意のフォルダに展開します。
パスが長くなるとエラーになるので、ここでは「c:\kvscpp」に展開します。(「c:\kvscpp\src」になる感じ)

Microsoft C++ Build Toolsのインストール

コードをcmakeするのでcmakeのツールをインストールします。
Microsoft C++ Build Toolsに含まれているCMakeを使用します。

1) 下記のMicrosoft C++ Build Toolsのページを表示。
 https://visualstudio.microsoft.com/ja/visual-cpp-build-tools/

2) 「Build Tools のダウンロード」をクリック。ダウンロードしたexeを起動します。「Visual Studio Installer」が起動します。
Screenshot

3) 「C++ によるデスクトップ開発」にチェック。「インストール」をクリック。 Screenshot

以上でインストールは終了。

GStreamerのインストール

GStremaerの下記サイトからソフトをダウンロードできます。
 https://gstreamer.freedesktop.org/

1) ページ左のメニュー「Download」をクリックします。
Screenshot

2) 「MSVC 64-bit (VS 2019, Release CRT)」の下記の2つをインストールします。
 1.20.3 runtime installer, 1.20.3 development installer
Screenshot


その他の必要なソフトのインストール


「MinGW」のインストール

1) 下記のMinGWのページを開きます。
https://osdn.net/projects/mingw/

2) 「mingw-get-setup.exe」をクリックしてダウンロードします。
screenshot

3) ダウンロードしたexeを起動してインストールします。
インストールするフォルダは変更しても構いません。ここでは「C:\MinGW」とします。

以上でインストールは終了。

「pkg-config.exe」のインストール

1) 下記URLを開きます。
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/

2) 「pkg-config_0.26-1_win32.zip」をダウンロードします。
zipファイルを展開し、ファイル「bin/pkg-config.exe」を「C:\MinGW\bin」にコピーします。
※WinGWのインストールフォルダを変えている場合は「C:\MinGW」をそのフォルダに読み替えてください。

以上で終了。

「intl.dll」のインストール

1) 「pkg-config」のときと同じ、下記URLを開きます。
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/

2) 「gettext-runtime_0.18.1.1-2_win32.zip」をダウンロードします。
zipファイルを展開し、ファイル「bin/intl.dll」を「C:\MinGW\bin」にコピーします。

以上で終了。

「glib.dll」のインストール

1) 下記URLを開きます。
http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.28/

2) 「glib_2.28.8-1_win32.zip」をダウンロードします。
zipファイルを展開し、ファイル「bin/libglib-2.0-0.dll」を「C:\MinGW\bin」にコピーします。

以上で終了。

「strawberry-perl」のインストール

1) Strawberry Perlのページを開きます。
https://strawberryperl.com/

2) 「strawberry-perl-5.32.1.1-64bit.msi」をダウンロードしてインストールします。
screenshot

以上で終了。


コンパイルの準備(cmake)

Microsoft C++ Build Toolsのコマンドプロンプトを起動します。
 [メニュー]-[すべてのアプリ]-[Visual Studio 2022]-[x64 Native Tools Command Prompt for VS 2022]をクリック

CDコマンドでカレントフォルダをC++プロデューサライブラリのサンプルコードを展開したフォルダ「c:\kvscpp」に変更します。

cd c:\kvscpp

フォルダ「build」を作成します。

mkdir build

CMakeを実行します。
※ 「MinGW」を「C:/MinGW」以外にインストールしたときは、下記コマンドの「C:/MinGW」を書き換えてください。
※ 標準設定ではGStreamerのプラグインがビルドされないので「DBUILD_GSTREAMER_PLUGIN=ON」を設定します。

cmake .. -DPKG_CONFIG_EXECUTABLE=C:/MinGW/bin/pkg-config.exe -G "NMake Makefiles" -DBUILD_GSTREAMER_PLUGIN=ON

実施したときに、下記のエラーが表示されましたが、再度CMakeを実行したら通りました。
もしエラーになったときは再度CMakeを実行してください。
screenshot

以上で終了。


コンパイル(nmake)

「コンパイルの準備」と同様に、Microsoft C++ Build Toolsのコマンドプロンプトを起動します。
 [メニュー]-[すべてのアプリ]-[Visual Studio 2022]-[x64 Native Tools Command Prompt for VS 2022]をクリック

カレントフォルダをフォルダ「c:\kvscpp\build」に変更します。

nmakeを実行します。

nmake

nmakeが成功するとbuildフォルダ内にGStremaerプラグイン「gstkvssink.dll」が生成されます。
screenshot

以上で終了。


動かしてみる


はじめに、GStreamerでカメラ映像が表示されるか確認します。

1) コマンドプロンプトを起動します。

2) GSreamerで接続されているカメラのプロパティを確認します。

gst-device-monitor-1.0
実行結果からカメラを探します。
「gst-launch-1.0 mfvideosrc・・・」の行がGStreamerでカメラから映像を取り込むコマンドです。
screenshot

3) GStreamerでカメラ映像をプレビューします。
コマンドの<>内には、2)の「gst-launch-1.0 mfvideosrc・・・」をコピーします。

<gst-launch-1.0 mfvideosrc device-path・・・\\global"> ! autovideosink
ウィンドウが表示されて、カメラの映像がプレビューされることを確認します。
screenshot


GStreamerがビルドしたKVSのプラグインを認識するか確認します。

1) コマンドプロンプトを起動します。

2) カレントフォルダをサンプルコードのパス「c:\kvscpp」にします。

cd c:\kvscpp

3) GStreamerを使ってKVSのプラグインの情報を表示します。

set GST_PLUGIN_PATH=%CD%\build
set PATH=%PATH%;%CD%\open-source\local\bin;%CD%\open-source\local\lib
gst-inspect-1.0 kvssink
プラグインのmakeに成功していると下記のような情報が表示されます。
※プラグインのファイルの場所は変更しています。
screenshot


カメラ映像をKVSにストリーミングで送信します。

ここではAWS-CLIを使用します
ここではAWS-CLIを使用します。
インストールしていない場合は、下記を参考にインストールしてください。
 https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

1. Kinesis ビデオストリームを作成する

AWS-CLIでKinesis ビデオストリームを作成します。パラメータは適当に変更してください。
 リージョン(--region):ap-northeast-1(東京)
 データの保存期間(--data-retention-in-hours):12時間
 ストリーム名(--stream-name):ExampleStream

aws kinesisvideo create-stream --stream-name ExampleStream --data-retention-in-hours 12 --region ap-northeast-1
ビデオストリームの作成に成功するとStreamARNが返信されます。
screenshot


2. カメラの映像をKVSにストリーミングする

GStreamerでカメラの映像をKVSプラグインを使用してKVSに送信します。

gst-launch-1.0 mfvideosrc do-timestamp=TRUE ! video/x-raw,width=320,height=180,framerate=30/1 ! videoconvert ! x264enc bframes=0 key-int-max=45 bitrate=512 ! video/x-h264,profile=baseline,stream-format=avc,alignment=au ! kvssink stream-name="ExampleStream" storage-size=100 access-key="XXX" secret-key="XXX" aws-region="ap-northeast-1"
カメラが1台のときは「gst-launch-1.0 mfvideosrc」の後ろの「device-path=・・・」は省略できます。
ここでは省略しています。
access-key、secret-keyはIAMで生成したAPIのアクセスキーとシークレットキーです。
「video/x-raw,width=320,height=180,framerate=30/1」はコマンド「gst-device-monitor-1.0」で確認したカメラの解像度等です。
設定しなくてもKVSに動画は送信できましたが、設定有無でAWSコンソールで再生される動画の解像度が異なりました。


3. AWSコンソールでビデオストリームを再生する

・AWSコンソールにログインして「Kinesis Video Streams」を表示します。
・画面左のメニュー「ビデオストリーム」をクリックします。
・画面右のビデオストリームのリストから、ストリーム名「ExampleStream」をクリックします。
・画面右の「メディア再生」をクリックします。
screenshot
・カメラの映像がストリーミングで再生されます。
screenshot

困ったときは

C++プロデューサライブラリのサンプルコードをwindowsで動かしている情報は少ないようです。
JNIはさらに少ない様子。
根気よく調べるしかなさそうです。

下記のエラーのときは、cmakeを実行する環境が適切でない。
「x64 Native Tools Command Prompt for VS 2022」のコマンドプロンプトになっているか確認する。

'ml64' is not recognized as an internal or external command

下記のエラーのときは「x64 Native Tools Command Prompt for VS 2022」のコマンドプロンプトのときに、perlのパスが通っていない。
システムの環境変数PATHが適切か確認する。

'PERL_EXECUTABLE-NOTFOUND' is not recognized as an internal or external command,
operable program or batch file.

下記のエラーのときはCURLのビルド失敗。
「cmake」コマンドにオプション「-DVCPKG_TARGET_TRIPLET=x64-windows」を追加するとmakeが通った。

fatal: not a git repository (or any of the parent directories): .git
-- Bitness 32 bits
CMake Error at CMakeLists.txt:109 (find_package):
	Could not find a configuration file for package "CURL" that is compatible
	with requested version "".

	The following configuration files were considered but not accepted:

	<PATH>/open-source/local/lib/cmake/CURL/CURLConfig.cmake, version: 7.68.0-DEV (64bit)

下記のエラーのときは、

fatal: not a git repository (or any of the parent directories): .git
-- Bitness 64 bits
-- Checking for module 'gstreamer-app-1.0'
--
CMake Error at <PATH>/cmake/share/cmake-3.24/Modules/FindPkgConfig.cmake:607 (message):
	A required package was not found
Call Stack (most recent call first):
<PATH>/cmake/share/cmake-3.24/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
	CMakeLists.txt:198 (pkg_check_modules)
サンプルコードのファイル「c:\kvscpp\CMakeLists.txt」に下記の行があり、
if (WIN32)
  set(PKG_CONFIG_EXECUTABLE "C:\\gstreamer\\1.0\\x86_64\\bin\\pkg-config.exe")
endif()
下記のように「pkg-config.exe」をGStreamer内の「pkg-config.exe」を示すようにパスを修正したら、ビルドが通った。
if (WIN32)
  set(PKG_CONFIG_EXECUTABLE "C:\\gstreamer\\1.0\\msvc_x86_64\\bin\\pkg-config.exe")
endif()



これで、AWS Kinesis Video Streamを試してみた、は終了。


ページのトップへ戻る