Kinesis Video Streamsのsanpleを使ってみた. m1 macでのbuildに苦労した。
目的
使ったことのないサービスがいっぱいあるのでちょっとずつ触っていきます。
今回はKinesis Video Streams
local -> Kinesis Video Streams -> S3
local -> Kinesis Video Streams -> lambda
みたいな経路が作成できればとりあえず使えるようになるかな?
試した環境はmac 13.6(22G120)
もっと良い記事
Amazon Kinesis Video Streams を使ってみた #AWS - Qiita
Kinesis Video Streamsとは
Amazon Kinesis Video Streams(ビデオストリームの処理と分析)| AWS
- 特徴
- 再生、分析、機械学習のためにメディアストリームをキャプチャ、処理、保存する
- 接続されたデバイスから AWS へ動画を簡単かつ安全にストリーミングできるようになります。
- 数百万のデバイスからのアップロードに耐えられるオートスケーリング
- インデックスを使った効率的な効率的な動画データアクセス
- 用途
- ライブやオンデマンド視聴用の動画再生
- コンピュータビジョン解析
- ビデオチャット
- 使い方
- Kinesis ビデオストリームを作成
- デバイスに Kinesis Video Streams SDK をインストールし、再生、保存、分析のために AWS へのメディアのストリーミングを開始
使ってみる
Getting started with Amazon Kinesis Video Streams - Amazon Kinesis Video Streams
-
video streamを作る
Step 2: Create an Amazon Kinesis Video Streams - Amazon Kinesis Video Streams
Create a video stream using the AWS CLI$ aws kinesisvideo create-stream --stream-name "ExampleStream" --data-retention-in-hours "24" { "StreamARN": "arn:aws:kinesisvideo:ap-northeast-1:123456789012:stream/ExampleStream/1697611529291" }
コンソールで確認。
Kinesis Video Streamsは Kinesisの下にない(Data Streams, Data Firehose, Managed Apatch Flink)とはダッシュードが違うんですね。
SDKのサンプルを使ってストリーミングすると自動でvideo streamが作られるのでここで作る必要はなかった。
-
データを送る準備をする
Step 3: Send data to an Amazon Kinesis video stream - Amazon Kinesis Video Streams
arm64 に対応していないので、m1 mac の場合はx86_64で環境設定する必要がある。
M1 MAX MacbookのHomebrew管理
を参考にx86_64用環境を作成する。
また、今回はcondaで作成した環境で動作確認を実施する。
m1 macが特殊なのか結構苦労した。
以下のスクリプト実行でkvssinkを作成および、pluginを認識することを確認できた。mv /Users/user_name/homebrew/bin/pkg-config /Users/user_name/homebrew/bin/pkg-config.ofg x64 brew install llvm \ && brew install pkg-config openssl cmake gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly log4cplus gst-libav \ && conda activate amazon_kinesis_video_stream_py11 \ && git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git \ && mkdir -p amazon-kinesis-video-streams-producer-sdk-cpp/build \ && cd amazon-kinesis-video-streams-producer-sdk-cpp/build export DYLD_LIBRARY_PATH="-L/usr/local/lib" \ && export LDFLAGS="-L/usr/local/lib" \ && sudo cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_DEPENDENCIES=ON sudo make -j \ && sudo make install \ && cd ../ \ && export GST_PLUGIN_PATH=`pwd`/build \ && export LD_LIBRARY_PATH=`pwd`/open-source/local/lib \ && gst-inspect-1.0 kvssink
苦労の跡
- 最初にllvmをインストールする必要あり。
- cmake,makeにはsudoをつけないと「C compiler cannot create executables exit 77」となった。
- x64のpkg-configを無効化しておかないと、x86_64設定を有効にしてもfind_packageでarm64版のpkg-configが有効になってしまい、以下の様にアーキテクチャが異なるライブラリを参照するエラーとなった。今回はpkg-configファイルをpkg-config.orgの様に変更して無効化した。元に戻すのを忘れないように。
ld: warning: ignoring file '/Users/xxxxxxxx/homebrew/Cellar/gettext/0.22.3/lib/libintl.8.dylib': found architecture 'arm64', required architecture 'x86_64' ld: warning: ignoring file '/Users/xxxxxxxx/homebrew/Cellar/glib/2.78.1/lib/libgobject-2.0.0.dylib': found architecture 'arm64', required architecture 'x86_64' ld: warning: ignoring file '/Users/xxxxxxxx/homebrew/Cellar/glib/2.78.1/lib/libglib-2.0.0.dylib': found architecture 'arm64', required architecture 'x86_64' ld: Undefined symbols: ... clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [libgstkvssink.so] Error 1 make[1]: *** [CMakeFiles/gstkvssink.dir/all] Error 2 make: *** [all] Error 2
- 「-DBUILD_DEPENDENCIES=ON」 を指定しないと以下のエラーとなった
指定してもたまに同じエラーになることがある。何度かcmakeを試すとエラーなく成功する。原因わからず。
checking whether the C compiler works... no configure: error: in `/Users/user-name/private-repos/zenn-contents/amazon-kinesis-video-streams-producer-sdk-cpp/open-source/liblog4cplus/build/src/project_log4cplus': configure: error: C compiler cannot create executables See `config.log' for more details gmake[2]: *** [CMakeFiles/project_log4cplus.dir/build.make:93: build/src/project_log4cplus-stamp/project_log4cplus-configure] Error 77 gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/project_log4cplus.dir/all] Error 2 gmake: *** [Makefile:91: all] Error 2 CMake Error at CMake/Utilities.cmake:99 (message): CMake step for liblog4cplus failed: 2 Call Stack (most recent call first): CMakeLists.txt:85 (build_dependency)
-
データを送信する
amazon-kinesis-video-streams-producer-sdk-cpp/docs/macos.md at master · awslabs/amazon-kinesis-video-streams-producer-sdk-cpp
build ディレクトリに作られたサンプルを使うと、ビデオファイルのストリーミング及びcameraによるライブストリーミングできる。このときストリーム名はなんでもよく、自動で指定したkinesis video streamのビデオストリームが作成される。kvssnk_gstreamer_sampleとkvs_gstreamer_sampleは同じもの。AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYを設定する必要があるが、今回はaws-vaultで設定。$ aws-vault exec aws_profile -- ./kvssink_gstreamer_sample YourStreamName /Users/user_name/Movies/sample.mp4 $ aws-vault exec aws_profile -- ./kvs_gstreamer_sample YourStreamName /Users/user_name/Movies/sample.mp4 $ aws-vault exec aws_profile -- gst-launch-1.0 -v filesrc location=/Users/user_name/Movies/sample.mp4 ! qtdemux name=demux ! queue ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink name=sink stream-name="audio-video-file" streaming-type=offline demux. ! queue ! aacparse ! sink.
オーディオとビデオを含んだmp4ファイルをアップロードする
gst-launch-1.0 -v filesrc location=/Users/user_name/Movies/sample.mp4 ! qtdemux name=demux ! queue ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink name=sink stream-name="audio-video-file" access-key="YourAccessKeyId" secret-key="YourSecretAccessKey" streaming-type=offline demux. ! queue ! aacparse ! sink.
これは動作確認できず。アップロードが進まない。
ライブソースのストリーミング
$ aws-vault exec aws_profile -- ./kvs_gstreamer_audio_video_sample my-livestream
上記コマンドの結果 video streamingが作成されたことがaws consoleからわかる。動画を見ることもできる。
まとめ
kinesis video streamを使ってビデオデータを送信することができた。
ビデオデータの利用はまだできていないので別途確認したい。
Discussion