はじめに
映像のリアルタイム解析をするための一歩前のステップとして、まずは映像をAWSにリアルタイムで配信するところから始めようと思い、AWS Kinesis Video Streamsを使ってみました。
Kinesis Video Streamsは簡単に言うと、カメラからの映像をAWSにリアルタイムで送信することができるサービスです。
残念ながら手元に外付けのカメラが無かったので、MacBookの内蔵カメラで試してみました。
以降はMacBook M1(macOS 15.5)を使用した手順です。
作業手順
1. AWS CLIの認証情報を設定
まずはKinesis Video Streamsにアクセスするためのユーザーを作っていきます。
- ユーザ名:
kinesis-video-user - アタッチするポリシー:
AmazonKinesisVideoStreamsFullAccess
アクセスキーを作成したら、Access KeyとSecret Keyをどこかにメモっておいてください。
次に、AWS CLIで認証情報を設定します。
% aws configure
AWS Access Key ID [None]: <先ほどメモったAccess Key>
AWS Secret Access Key [None]: <先ほどメモったSecret Key>
Default region name [None]: ap-northeast-1
Default output format [None]: json
2. Kinesis Video Streamの作成
AWSコンソール:AWS Kinesis Video Streamsでビデオストリームを作成します。

ストリーム名にMyFirstStreamと入力。
その他の設定は変更せず、ビデオストリームを作成をクリックします。
3. 開発環境のセットアップ
GStreamerや関連ライブラリを一通りインストールします。
% brew install cmake pkg-config openssl curl gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav
AWS Kinesis Video Streams Producer SDKを取得します。
% git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
% cd amazon-kinesis-video-streams-producer-sdk-cpp
このSDKには、リアルタイムストリーミングに最適化されたkvssinkプラグインが含まれています。GStreamerのkvssinkプラグインを使用することで、カメラ映像をKinesis Video Streamsにリアルタイムでストリーミング配信できます。今回やりたいことですね!
4. SDKのビルド
ビルドディレクトリを作成します。
% mkdir build
% cd build
CMakeでビルド設定をします。
GStreamerプラグインを有効化するオプションやM1 MacのCPU用に最適化されたバイナリを生成するためのオプションをつけています。
% cmake .. -DBUILD_GSTREAMER_PLUGIN=ON \
-DBUILD_DEPENDENCIES=OFF \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DUSE_OPENSSL=ON \
-DUSE_MBEDTLS=OFF
基本ビルドを実行します。
% make
個別でkvssinkプラグインを明示的にビルドします。
% make gstkvssink
デフォルトのビルドターゲットにkvssinkプラグインが含まれていなかったので、gstkvssinkターゲットを明示的にビルドしています。
これでビルドが完了しました!
5. カメラの確認と準備
MacBookの内蔵カメラが認識されているか確認します
% system_profiler SPCameraDataType
~省略~
Camera:
FaceTime HDカメラ:
Model ID: FaceTime HDカメラ
Unique ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
~省略~
このようにFaceTimeのカメラが表示されていればOKです!
GStreamerの方でもカメラを認識できているか確認します。
% gst-device-monitor-1.0 Video
~省略~
Device found:
name : FaceTime HDカメラ
class : Video/Source
caps : video/x-raw, width=640, height=480, format={ UYVY, YUY2, NV12, ARGB, BGRA }, framerate=30/1
video/x-raw, width=1280, height=720, format={ UYVY, YUY2, NV12, ARGB, BGRA }, framerate=30/1
properties:
device.api = avf
avf.unique_id = EAB7A68F-EC2B-4487-AADF-D8A91C1CB782
gst-launch-1.0 avfvideosrc device-index=0 ! ...
~省略~
先ほど同様、FaceTimeのカメラが確認できればOKです!
カメラが正常に動作するか事前にテストしておきます。
% gst-launch-1.0 avfvideosrc device-index=0 ! \
video/x-raw,width=640,height=480,framerate=30/1 ! \
videoconvert ! autovideosink
カメラのLEDが緑点灯し、プレビューウィンドウから映像が確認できればOKです。
停止する時はCtrl+Cと入力してください。
6. リアルタイムストリーミング環境の設定
リアルタイムストリーミングでは、ストリーミング中に継続的なAWS認証が必要です。GStreamerのkvssinkプラグインは、環境変数からの認証情報取得を優先するようで、明示的に設定しておくことで安定性を向上させることができるそうです。
AWS認証情報を環境変数として設定します。
% export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
% export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
% export AWS_DEFAULT_REGION=$(aws configure get region)
次に、GStreamerプラグインパスの設定をします。
% export GST_PLUGIN_PATH=$PWD:$GST_PLUGIN_PATH
% echo $GST_PLUGIN_PATH
/Users/kam/amazon-kinesis-video-streams-producer-sdk-cpp/build:
上記のように設定されていればOKです!
7. リアルタイムストリーミングの実行
Kinesis Video Streamsに映像ストリーミングデータを配信します。
% gst-launch-1.0 avfvideosrc device-index=0 ! \
video/x-raw,width=1280,height=720,framerate=30/1 ! \
videoconvert ! x264enc bitrate=1000 tune=zerolatency ! \
kvssink stream-name="MyFirstStream"
各パラメータについて簡単にまとめておきます。
- width=1280,height=720: HD画質で送信
- framerate=30/1: 30fps(比較的滑らかな映像)
- bitrate=1000: 1Mbps(そこそこ綺麗)
- tune=zerolatency: なるべく遅延を少なくする設定
カメラのLEDが緑点灯し、ターミナルにストリーミングデータに関する情報が流れていればOKです!
8. AWSコンソールで映像を確認
最後に、AWSコンソール:AWS Kinesis Video Streamsから映像を確認してみましょう。
まとめ
Kinesis Video Streamsを使用してカメラから配信された映像ストリーミングデータをリアルタイムで確認することができました。AWSコンソール上で確認した映像は10秒ほど遅延していたので、ある程度の遅延の発生が許容されるユースケースで利用するのがいいかもしれませんね。
次はAmazon Rekognitionと連携させてリアルタイムの映像分析にチャレンジしたいと思います!




