💨

Kinesis Video Streamsのsanpleを使ってみた. m1 macでのbuildに苦労した。

2023/11/23に公開

目的

使ったことのないサービスがいっぱいあるのでちょっとずつ触っていきます。
今回は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

  1. 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"
    }
    

    コンソールで確認。
    Alt text
    Kinesis Video Streamsは Kinesisの下にない(Data Streams, Data Firehose, Managed Apatch Flink)とはダッシュードが違うんですね。
    SDKのサンプルを使ってストリーミングすると自動でvideo streamが作られるのでここで作る必要はなかった。

  2. データを送る準備をする
    Step 3: Send data to an Amazon Kinesis video stream - Amazon Kinesis Video Streams

    まずこれに従ってSDKを準備
    GitHub - awslabs/amazon-kinesis-video-streams-producer-sdk-cpp: Amazon Kinesis Video Streams Producer SDK for C++ is for developers to install and customize for their connected camera and other devices to securely stream video, audio, and time-encoded data to 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)
    


  3. データを送信する
    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からわかる。動画を見ることもできる。
Alt text

まとめ

kinesis video streamを使ってビデオデータを送信することができた。
ビデオデータの利用はまだできていないので別途確認したい。

Discussion