はじめに
こんにちは〜!
今回はAWS Kinesis Video Streamsを使って、Mac M1でリアルタイム映像ストリーミングを構築した話をしてみようと思います!
後でこれをAmazon Rekognitionと連携して顔認識までやってみる予定です!でも、
まずは映像をAWSにリアルタイムで送るところから始めていきましょう〜
環境情報
- PC: MacBook M1 (macOS 15.3.2)
- カメラ: MacBook内蔵のFaceTime HDカメラ
- AWSリージョン: ap-northeast-1 (Tokyo)
苦労の歴史 💀
Windowsでの試行錯誤
最初はWindows環境で試してみたんですが...CMakeのバージョン互換性問題でずっとビルドが失敗してました。Visual Studioのバージョンも合わせてみたり、CMakeも色々なバージョンを試してみましたが...結局諦め!😱
Linux(EC2)での挑戦
次は「やっぱりLinuxでしょ!」ってことでEC2で試してみたんですが、ビルドするのにめちゃくちゃ時間がかかりました。それに加えてカメラもないからテストもできないし...これも一旦保留!
Macへの帰還
結局Macに戻ってきました。M1チップってすごいですね!ビルドも速いし、内蔵カメラもあるし、開発環境も整ってるし...最初からMacにしておけばよかった😂
作業手順
1. 開発環境のセットアップ
まずは、必要なライブラリを一気にインストールします!
zshを開いて以下のコマンドを実行しました。
brew install cmake pkg-config openssl curl Log4cplus gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav
※GStreamerとKVS SDKビルドに必要な依存ライブラリも含まれています。
homebrewって本当に便利ですよね〜🍺
次はKVS SDKをインストールしましょう。
AWS Kinesis Video Streams Producer SDKのインストール
git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git --single-branch -b master kvs-producer-cpp-sdk
cd kvs-producer-cpp-sdk
このSDKには、リアルタイムストリーミングに最適化されたkvssink
プラグインが含まれています。これがまさに今回使いたいやつですね!
2. SDKのビルド
ビルドディレクトリを作成します。
mkdir build
cd build
CMake設定
M1 Mac用に最適化されたバイナリを生成するためのオプションをつけてCMakeを実行します。
cmake .. -DBUILD_GSTREAMER_PLUGIN=ON \
-DBUILD_DEPENDENCIES=OFF \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DUSE_OPENSSL=ON \
-DUSE_MBEDTLS=OFF
-
DBUILD_GSTREAMER_PLUGIN=ON
- GStreamerプラグインをビルドする場合に有効化します。デフォルトはOFFです。
-
DBUILD_DEPENDENCIES=OFF
- 依存ライブラリ(OpenSSL, Curlなど)をシステムにインストール済みのものからリンクします。これを指定しない場合、自動的に依存ライブラリのソースをダウンロードしてビルドします。
-
DCMAKE_OSX_ARCHITECTURES=arm64
- macOSのApple Silicon(M1/M2チップなど)向けにビルドします。
-
DUSE_OPENSSL=ON
- 暗号化・セキュリティ機能にOpenSSLライブラリを使用します。
-
DUSE_MBEDTLS=OFF
- 暗号化ライブラリのMbedTLSを使用しないように設定します。
ビルド実行
make
ビルド完了です!お疲れ様でした〜🎉
3. AWS CLIの認証設定
まずはKinesis Video Streamsにアクセスするためのユーザーを作成します。
IAMユーザー作成
- ユーザー名:
kvs-full-access-user-1
(任意でいいです。) - アタッチするポリシー:
AmazonKinesisVideoStreamsFullAccess
アクセスキーを作成したら、Access KeyとSecret Keyをメモっておいてください!
4. Kinesis Video Streamの作成
AWSコンソールでビデオストリームを作成します。
- AWS Kinesis Video Streamsコンソールにアクセス
- 「作成」をクリック
- ストリーム名を入力 (自分は適当にtest123にしました。)
- その他の設定はデフォルトのまま
- 「ビデオストリームを作成」をクリック
これで準備完了です!
5. いよいよリアルタイムストリーミング!
GStreamerプラグインパスの設定
export GST_PLUGIN_PATH=$PWD:$GST_PLUGIN_PATH
echo $GST_PLUGIN_PATH
上記のコマンドはkvs-producer-cpp-sdk/build
上で実行してください。
ディレクトリのパスが正しく設定されていることを確認してください!
ついに本命です!Kinesis Video Streamsに映像を配信してみましょう〜
gst-launch-1.0 avfvideosrc device-index=0 ! \
video/x-raw,width=640,height=480,framerate=30/1 ! \
videoconvert ! x264enc bitrate=512 tune=zerolatency key-int-max=45 bframes=0 ! \
kvssink stream-name="ストリーム名" access-key="" secret-key="" aws-region="ap-northeast-1"
パラメータ解説
-
avfvideosrc
(ビデオソース)-
device-index=0
: システムに接続されたカメラのうち、最初のカメラを使用します。
-
-
video/x-raw
(ビデオフォーマット)-
width=640
: ビデオの横幅を640ピクセルに設定します。 -
height=480
: ビデオの縦幅を480ピクセルに設定します。 -
framerate=30/1
: 1秒あたりのフレーム数(FPS)を30に設定します。
-
-
x264enc
(H.264 エンコーダー)-
bitrate=512
: ビデオのビットレートを512 kbpsに設定します。 -
tune=zerolatency
: エンコーディングの遅延を最小限に抑える設定を適用します。 -
key-int-max=45
: Iフレーム(キーフレーム)の最大間隔を45フレームに設定します。 -
bframes=0
: Bフレームの使用を無効にします。遅延を減らすのに役立ちます。
-
-
kvssink
(Kinesis Video Streamsへの出力)-
stream-name="ストリーム名"
: ビデオを送信するKinesisストリームの名前を指定します。 -
access-key=""
: AWSアクセスキーを設定します。 -
secret-key=""
: AWSシークレットキーを設定します。 -
aws-region="ap-northeast-1"
: 接続するAWSリージョンをap-northeast-1(東京リージョン)に設定します。
-
6. AWSコンソールで映像確認
最後に、AWSコンソールで映像が正しく配信されているか確認してみましょう!
映像が表示されれば大成功です!🎊
感想とまとめ
Kinesis Video Streamsを使ってカメラからの映像をリアルタイムで配信することができました!
AWSコンソールで確認した映像は4秒ほどの遅延がありましたが、リアルタイムが欲しかったので、
他の方法も探してみたいともいますが、もしそんなにリアルタイムを求めない場合はではこれで十分かと思います。
Windows → Linux → Mac と色々試行錯誤しましたが、結局Macが一番スムーズでした😄 やっぱり開発環境としてのMacの完成度は高いですね!