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」が起動します。
3) 「C++ によるデスクトップ開発」にチェック。「インストール」をクリック。
以上でインストールは終了。GStreamerのインストール
GStremaerの下記サイトからソフトをダウンロードできます。
https://gstreamer.freedesktop.org/
1) ページ左のメニュー「Download」をクリックします。
2) 「MSVC 64-bit (VS 2019, Release CRT)」の下記の2つをインストールします。
1.20.3 runtime installer, 1.20.3 development installer
その他の必要なソフトのインストール
「MinGW」のインストール
1) 下記のMinGWのページを開きます。
https://osdn.net/projects/mingw/
2) 「mingw-get-setup.exe」をクリックしてダウンロードします。
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」をダウンロードしてインストールします。
以上で終了。
コンパイルの準備(cmake)
Microsoft C++ Build Toolsのコマンドプロンプトを起動します。
[メニュー]-[すべてのアプリ]-[Visual Studio 2022]-[x64 Native Tools Command Prompt for VS 2022]をクリック
CDコマンドでカレントフォルダをC++プロデューサライブラリのサンプルコードを展開したフォルダ「c:\kvscpp」に変更します。
フォルダ「build」を作成します。
CMakeを実行します。
※ 「MinGW」を「C:/MinGW」以外にインストールしたときは、下記コマンドの「C:/MinGW」を書き換えてください。
※ 標準設定ではGStreamerのプラグインがビルドされないので「DBUILD_GSTREAMER_PLUGIN=ON」を設定します。
実施したときに、下記のエラーが表示されましたが、再度CMakeを実行したら通りました。
もしエラーになったときは再度CMakeを実行してください。
以上で終了。
コンパイル(nmake)
「コンパイルの準備」と同様に、Microsoft C++ Build Toolsのコマンドプロンプトを起動します。
[メニュー]-[すべてのアプリ]-[Visual Studio 2022]-[x64 Native Tools Command Prompt for VS 2022]をクリック
カレントフォルダをフォルダ「c:\kvscpp\build」に変更します。
nmakeを実行します。
nmakeが成功するとbuildフォルダ内にGStremaerプラグイン「gstkvssink.dll」が生成されます。
以上で終了。
動かしてみる
はじめに、GStreamerでカメラ映像が表示されるか確認します。
1) コマンドプロンプトを起動します。
2) GSreamerで接続されているカメラのプロパティを確認します。
「gst-launch-1.0 mfvideosrc・・・」の行がGStreamerでカメラから映像を取り込むコマンドです。
3) GStreamerでカメラ映像をプレビューします。
コマンドの<>内には、2)の「gst-launch-1.0 mfvideosrc・・・」をコピーします。
GStreamerがビルドしたKVSのプラグインを認識するか確認します。
1) コマンドプロンプトを起動します。
2) カレントフォルダをサンプルコードのパス「c:\kvscpp」にします。
3) GStreamerを使ってKVSのプラグインの情報を表示します。
set PATH=%PATH%;%CD%\open-source\local\bin;%CD%\open-source\local\lib
gst-inspect-1.0 kvssink
※プラグインのファイルの場所は変更しています。
カメラ映像をKVSにストリーミングで送信します。
ここでは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
2. カメラの映像をKVSにストリーミングする
GStreamerでカメラの映像をKVSプラグインを使用してKVSに送信します。
ここでは省略しています。
設定しなくてもKVSに動画は送信できましたが、設定有無でAWSコンソールで再生される動画の解像度が異なりました。
3. AWSコンソールでビデオストリームを再生する
・AWSコンソールにログインして「Kinesis Video Streams」を表示します。
・画面左のメニュー「ビデオストリーム」をクリックします。
・画面右のビデオストリームのリストから、ストリーム名「ExampleStream」をクリックします。
・画面右の「メディア再生」をクリックします。
・カメラの映像がストリーミングで再生されます。
困ったときは
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)
if (WIN32) set(PKG_CONFIG_EXECUTABLE "C:\\gstreamer\\1.0\\x86_64\\bin\\pkg-config.exe") endif()
if (WIN32) set(PKG_CONFIG_EXECUTABLE "C:\\gstreamer\\1.0\\msvc_x86_64\\bin\\pkg-config.exe") endif()
これで、AWS Kinesis Video Streamを試してみた、は終了。