Rocky Linux 8 で Amazon Kinesis Video Stream(KVS) のC++用プロデューサーSDKをGStreamer プラグインとして使おうと思ったら一筋縄でいかなかったので、Windows 10でチャレンジ。
Webで検索しても、古い情報しか見つからなくて、同じ手順ではビルドできないみたい。
2020年くらいの手順で試してもダメだったので、試行錯誤することになっちゃった。
今回もGStreamerのプラグインとして使いたいので、公式サイトからダウンロードしてインストールします。新しいバージョンだとインストールフォルダの構成が変わってしまったらしく、うまくビルドできないので、今回は 1.16.3 を使います。
Windows 10 の64bit版なので、MSVC 64-bit で以下2つを入れました。
gstreamer-1.0-msvc-x86-1.16.3.msi
gstreamer-1.0-devel-msvc-x86_64-1.16.3.msi
ランタイムとデベロップメントの両方必要なので忘れずに。オプションはCompleteを選択。
パスが長くなるので、Cドライブ直下にインストールしました。
あと、Perlスクリプトを実行する必要があり、WindowsでのPerl実行環境もいくつか選択肢があるのですが、「We recommend Strawberry Perl」とのことなので、Strawberry Perlの公式サイトから strawberry-perl-5.32.1.1-64bit.msi をダウンロードしてインストール。
続いて、CMake3を公式サイトから Windows x64 Installer である cmake-3.23.1-windows-x86_64.msi をダウンロードしてインストール。
で、Curl が必要と記載がありましたが、ビルド作業のなかで Git から取得してビルドしてくれるみたい。
あとはC++用プロデューサーSDKをビルドするために、Visual Studio 2022 Community エディションをインストールします。
個人もしくは組織での学習目的であれば無償で使えるIDEです。
「C++によるデスクトップ開発」を選択し、インストールの詳細では、デフォルトで選択されているものに加え、以下2つを選びました。
・v143ビルドツール用C++モジュール(x64/x86)
・Windows 10 SDK(10.0.20348.0)
※Windows 10 SDKのバージョンによってうまくいかないことがあるようです。
そしてようやくKVSプロデューサーをビルドします。ここまで長かった・・・。
Visual Studio 2022 Community エディションが正常にインストールできると、スタートメニューに「x64 Native Tools Command Prompt for VS 2022」ができているので、ここから実行。
パスが長くなると厄介なので、今回はCドライブ直下にkvsフォルダを作成して、そこで作業しました。
Git for Windows を公式サイトから、Git-2.36.1-64-bit.exe をダウンロードしてインストールします。
インストール後、Filename too long を回避するため、Git Bash を起動して、以下のコマンドを実行します。
1 |
git config --system core.longpaths true |
また、Filename too long のエラーを回避するために、レジストリを変更します。以下のキーがなかったら REF_DWORD で作成し、値を1にしておく。
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
これでようやくビルドする準備が整いました。
あとは git cloneしてビルドする。
1 2 3 4 5 6 7 |
mkdir C:\kvs cd C:\kvs git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git cd C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp mkdir build cd build cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -G "NMake Makefiles" |
今回はGStreamer のプラグインを作成するためのオプションを指定しています。
以下のようなメッセージが表示されたら成功。
※cmake に失敗することがあるのですが、なぜかもう1回 cmake するとうまくいくことがあります。なんでだろう?わかったら追記します。
1 2 3 4 5 6 |
-- Bitness 64 bits -- Checking for module 'gstreamer-app-1.0' -- Found gstreamer-app-1.0, version 1.16.3 -- Configuring done -- Generating done -- Build files have been written to: C:/kvs/amazon-kinesis-video-streams-producer-sdk-cpp/build |
そしたらnmakeします。
1 |
nmake |
環境変数「GST_PLUGIN_PATH」に GStreamer のライブラリと、今回ビルドしたプラグインのパスを設定します。
今回の構成だと、値は以下のようにします。
C:\gstreamer\1.0\x86_64\lib;C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp\build
※各自の環境に合わせてください。
あと、環境変数「PATH」に GStreamer の実行ファイル、ライブラリのパス、今回ビルドしたプラグイン、実行ファイル、ライブラリのパスを追加します。
今回の構成なら、以下の5行になります。
C:\gstreamer\1.0\x86_64\bin
C:\gstreamer\1.0\x86_64\lib
C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp\build
C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp\open-source\local\bin
C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp\open-source\local\lib
ここまで出来たら動作確認。GStreamer のプラグインとして kvssink を認識しているか以下のコマンドで確認。
1 |
gst-inspect-1.0 kvssink |
こんな感じで表示されたら成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Factory Details: Rank primary + 10 (266) Long-name KVS Sink Klass Sink/Video/Network Description GStreamer AWS KVS plugin Author AWS KVS <kinesis-video-support@amazon.com> Plugin Details: Name kvssink Description GStreamer AWS KVS plugin Filename C:\kvs\amazon-kinesis-video-streams-producer-sdk-cpp\build\gstkvssink.dll Version 1.0 License Proprietary Source module kvssinkpackage Binary package GStreamer Origin URL http://gstreamer.net/ GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstKvsSink ※以下省略 |
ビルドがうまくいったら、環境変数にアクセスキーIDとシークレットアクセスキーを、デフォルトリージョンを東京に設定。
1 2 3 |
set AWS_ACCESS_KEY_ID=[アクセスキーID] set AWS_SECRET_ACCESS_KEY=[シークレットアクセスキー] set AWS_DEFAULT_REGION=ap-northeast-1 |
ここまでできたら、Tapo C200 の RTSP の URLを指定して、動画をストリームしてみる。
1 |
gst-launch-1.0 -v rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! h264parse ! kvssink stream-name="Your_Stream_Name" storage-size=128 aws-region="ap-northeast-1" |
事前にKVS側でストリーム名を作成していなくても、ここで指定したリージョンで指定したストリームが作成されました。
うまくいっていれば、マネジメントコンソールで、対象のリージョンで Kinesis Video Streams を開き、ビデオストリームから、対象のストリーム名を選択、メディア再生で動画が確認できます。
事前準備が結構大変だけど、無事にWindowsでもカメラの動画をストリーミングできました。