Raspbeery Pi から Amazon Kinesis Video Streams に映像を送る
はじめに
本記事では、Raspberry Pi を使って Amazon Kinesis Video Streams に映像を送信する手順を解説します。
amazon-kinesis-video-streams-producer-sdk-cpp
をインストールし、RTSP や HTTP などのプロトコルを利用して、従来クラウドストレージに対応していなかった監視カメラやレコーダーの映像をクラウドにアップロードする方法を紹介します。
これにより、効率的で柔軟な映像管理を実現できます。
SDK のダウンロード
以下のコマンドを実行してダウンロードします:
git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
amazon-kinesis-video-streams-producer-sdk-cpp
にbuild
ディレクトリを作り、移動します。
mkdir -p amazon-kinesis-video-streams-producer-sdk-cpp/build
cd amazon-kinesis-video-streams-producer-sdk-cpp/build
Ubuntu および Raspberry Pi OS では、以下を実行してライブラリを取得できます:
sudo apt-get update
sudo apt-get install -y libssl-dev libcurl4-openssl-dev liblog4cplus-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools cmake
SDK のビルド手順
ビルドオプションの説明
cmake
実行時に、以下のオプションを指定してください:
-
GStreamer プラグインを有効化する
GStreamer プラグインをビルドするために、-DBUILD_GSTREAMER_PLUGIN=ON
を指定します。 -
プリインストール済みライブラリの使用
システムに既にインストールされているライブラリを活用する場合、-DBUILD_DEPENDENCIES=OFF
を指定します。このオプションを使用すると、ビルド時間の短縮やメモリの節約が可能です。 -
アラインドメモリモデルの有効化
メモリのアライメントを最適化するために、-DALIGNED_MEMORY_MODEL=ON
を指定します。これにより、パフォーマンスが向上します。
make
実行時に、以下のオプションを指定してください:
-
並列ビルドの実施
-j$(nproc)
を使用して並列ビルドを行い、ビルド時間を短縮します。$(nproc)
は利用可能な CPU コア数を自動的に検出します。
ビルドの実行
以下のコマンドを実行してビルドを行います:
cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_DEPENDENCIES=OFF -DALIGNED_MEMORY_MODEL=ON
make -j$(nproc)
このビルドが成功すると、GStreamer プラグインが有効化された SDK が生成されます。
これで、SDK のビルド手順が完了です。成功したビルドにより、GStreamer プラグインが有効化された SDK が生成されます。
GStreamer プラグインのパスを設定し、永続化
kvssink
がビルドされたディレクトリを GStreamer
が認識するように環境変数 GST_PLUGIN_PATH
を設定します。
同じビルドディレクトリで以下のコマンドを実行してください。
export GST_PLUGIN_PATH=$(pwd)
一時的に設定した環境変数は、SSH セッション終了時や再起動後に失われます。以下の方法で永続化を行います。
永続化の手順
-
設定を確認
環境変数が正しく設定されたかを以下で確認します:echo $GST_PLUGIN_PATH
設定されたパスが正しく表示されれば成功です(例):
/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
-
永続化
以下の手順で永続化します。.bashrc
ファイルに追加(特定のユーザー向け)-
.bashrc
ファイルを編集します:sudo nano ~/.bashrc
- ファイル末尾に以下を追加します:
export GST_PLUGIN_PATH=/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
- 保存して閉じます(
Ctrl+O
→ Enter →Ctrl+X
)。 - 設定を反映させます:
source ~/.bashrc
- 確認します:設定したパスが表示されれば成功です。
echo $GST_PLUGIN_PATH
/etc/environment
ファイルに追加(全ユーザー向け)-
/etc/environment
ファイルを編集します:sudo nano /etc/environment
- 以下を追加します(既存内容はそのまま残してください):
GST_PLUGIN_PATH="/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build"
- 保存して閉じます。
- 再起動して設定を反映します:
sudo reboot
- 再起動後、以下で確認します:設定したパスが表示されれば成功です。
echo $GST_PLUGIN_PATH
-
-
kvssink
プラグインの確認
GStreamer
が kvssink
プラグインを正しく認識しているかを確認するために、以下のコマンドを実行します。
gst-inspect-1.0 kvssink
コマンド実行結果の確認
-
成功時:
kvssink
プラグインの詳細情報が表示されます。例えば、プラグインのバージョンや機能などが確認できます。Factory Details: Rank primary + 10 Plugin Name kvssink ...
-
失敗時: 以下のようなエラーメッセージが表示されます。
No such element or plugin 'kvssink'
この場合、以下の点を確認してください:
-
GST_PLUGIN_PATH
の設定確認環境変数
GST_PLUGIN_PATH
が正しく設定されているか再確認します。ビルドディレクトリが正しく指定されているか確認してください。echo $GST_PLUGIN_PATH
期待される出力例:
/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
-
プラグインのビルド確認
kvssink
プラグインが正しくビルドされているか確認します。ビルドプロセス中にエラーが発生していないか、再度make
コマンドを実行して確認してください。make
-
ビルドディレクトリの確認
cmake
およびmake
を実行したビルドディレクトリが正しいか確認します。間違ったディレクトリでビルドを行っていないか再確認してください。
-
SDK 導入まとめ
SDKamazon-kinesis-video-streams-producer-sdk-cpp
のダウンロードからビルド、GStreamer プラグインの設定、環境変数の永続化まで、一連のプロセスを順を追って説明しました。
これにより、RTSP や HTTP、HLS といった映像伝送プロトコルを活用しつつ、クラウドストレージへの動画アップロードを可能にする監視システムの構築が実現できます。
次のステップでは、AWS への接続と映像のアップロードについて説明します。
AWS CLI のインストール
AWS CLI
を使用し、AWS の認証を行います。
AWS CLI がインストールされていない場合はインストールします。
sudo apt-get install awscli
awscli
パッケージが利用できない場合
awscli
パッケージが利用できない場合、次の手順で AWS CLI をインストールしてください。
必要なパッケージを先にインストールします。
sudo apt update
sudo apt install curl unzip -y
AWS CLI の最新バージョンをダウンロードします。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
ZIP ファイルを解凍します。
unzip awscliv2.zip
AWS CLI をインストールします。
sudo ./aws/install
正常にインストールされてか確認します。
aws --version
正常にインストールされていれば、以下のように表示されます(バージョン番号は例です)。
aws-cli/2.x.x Python/3.x.x Linux/x86_64
ダウンロードした ZIP ファイルと解凍ディレクトリを削除します。
rm -rf awscliv2.zip aws
IAM ユーザーおよびポリシーの設定
Kinesis Video Streams の利用には、配信用 IAM ユーザーを作成し、適切な権限を付与する必要があります。
配信用ユーザーの作成
ストリームにデータを配信するための IAM ユーザーを作成するには、まず管理者権限を持つ IAM ユーザーで AWS CLI にログインします。
管理者権限ユーザーで AWS CLI にログイン
AWS CLI の設定コマンドを実行し、管理者権限のユーザー情報を入力します。
aws configure
プロンプトに従い、以下の情報を入力してください:
-
AWS Access Key ID:管理者権限を持つユーザーの
AccessKeyId
-
AWS Secret Access Key:管理者権限を持つユーザーの
SecretAccessKey
-
Default region name:例:
ap-northeast-1
(使用する AWS リージョン) -
Default output format:例:
json
(出力形式はjson
、text
、またはtable
から選択)
配信用 IAM ユーザーの作成と設定
管理者権限でログイン後、以下のコマンドを使用して配信用の IAM ユーザーを作成し、適切なポリシーを付与します。
フルアクセス権限を付与する場合
フルアクセス権限が必要な場合、以下のコマンドを実行してユーザーを作成します。
aws iam create-user --user-name kinesis-video-producer-test
aws iam attach-user-policy --user-name kinesis-video-producer-test \
--policy-arn arn:aws:iam::aws:policy/AmazonKinesisVideoStreamsFullAccess
aws iam create-access-key --user-name kinesis-video-producer-test
実行結果の AccessKeyId
と SecretAccessKey
を後で使用します。
最小権限を付与する場合
必要最低限の権限を付与する場合は、以下のコマンドを実行します。
aws iam create-user --user-name kinesis-video-producer-test
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query "Account")
aws iam put-user-policy --user-name kinesis-video-producer-test \
--policy-name ProduceToStream \
--policy-document "{
\"Version\": \"2012-10-17\",
\"Statement\": [
{
\"Effect\": \"Allow\",
\"Action\": [
\"kinesisvideo:CreateStream\",
\"kinesisvideo:DescribeStream\",
\"kinesisvideo:GetDataEndpoint\",
\"kinesisvideo:GetClip\"
],
\"Resource\": \"arn:aws:kinesisvideo:ap-northeast-1:${ACCOUNT_ID}:stream/stream-test/*\"
}
]
}"
aws iam create-access-key --user-name kinesis-video-producer-test
こちらも、実行結果の AccessKeyId
と SecretAccessKey
を後で使用します。
AWS CLI を使用した認証情報の設定
作成した IAM ユーザーの認証情報を AWS CLI に設定します。
aws configure
プロンプトに従って以下を入力してください:
-
AWS Access Key ID:作成したユーザーの
AccessKeyId
-
AWS Secret Access Key:作成したユーザーの
SecretAccessKey
-
Default region name:例:
ap-northeast-1
(使用する AWS リージョン) -
Default output format:例:
json
環境変数で認証情報を設定
環境変数にも作成したユーザーの認証情報を入力します。
export AWS_ACCESS_KEY_ID=<YOUR_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<YOUR_SECRET_KEY>
export AWS_DEFAULT_REGION=ap-northeast-1
ストリームの作成
まず、Amazon Kinesis Video Streams に新しいストリームを作成します。このストリームは、ビデオデータを受信して保存するための基本単位です。
必要なパラメーター
ストリームを作成する際、以下のパラメーターを設定します:
-
ストリーム名:任意の名前を指定(例:
stream-test
) - 保存期間:保存するデータの期間(0〜87600 時間、例: 24 時間)
以下は、ストリーム作成コマンドの例です:
aws kinesisvideo create-stream --stream-name stream-test --data-retention-in-hours 24
実行結果
コマンドを実行すると、次のようなレスポンスが返されます:
{
"StreamARN": "arn:aws:kinesisvideo:ap-northeast-1:(AccountNumber):stream/stream-test/XXXXXXXXXXXXX"
}
この StreamARN
(Amazon リソース名)は、ストリームを識別するための情報です。後の手順で使用します。
GStreamer で映像を送信
次に、GStreamer を使用してビデオエンコーダーの映像を取り込み、Kinesis Video Streams に送信します。
1. ビデオストリームの取り込みと送信
RTSP ストリームを使用する場合
RTSP プロトコルを使用してビデオエンコーダーから映像を取得するには、以下のコマンドを使用します:
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.100/stream ! decodebin ! videoconvert ! x264enc ! queue ! kvssink stream-name="stream-test" storage-size=512 aws-region="ap-northeast-1"
各パラメーターの説明:
-
rtspsrc location
: ビデオストリームの URL。 -
decodebin
: ストリームをデコード。 -
videoconvert
: 映像フォーマットを変換。 -
x264enc
: H.264 形式でエンコード。 -
kvssink
: Amazon Kinesis Video Streams に映像を送信。
HLS または HTTP の場合
HLS ストリーム:
gst-launch-1.0 souphttpsrc location=http://192.168.1.100/stream.m3u8 ! decodebin ! videoconvert ! x264enc ! queue ! kvssink stream-name="stream-test" storage-size=512 aws-region="ap-northeast-1"
HTTP ストリーム:
gst-launch-1.0 souphttpsrc location=http://192.168.1.100/stream ! decodebin ! videoconvert ! x264enc ! queue ! kvssink stream-name="stream-test" storage-size=512 aws-region="ap-northeast-1"
2. 注意事項
認証情報
-
kvssink
プラグインは、AWS CLI で設定した認証情報を利用します。 - 必要に応じて、IAM ユーザーまたはロールに適切なポリシーを付与してください(例:
AmazonKinesisVideoStreamsFullAccess
)。
エラーハンドリング
- ストリームが途切れた場合でも、GStreamer が自動的に再接続するように設定できます:
rtspsrc location=rtsp://192.168.1.100/stream protocols=tcp ! ...
これで、ビデオエンコーダーの映像を GStreamer を使って Amazon Kinesis Video Streams に送信する手順が完了します。問題が発生した場合は、エラーログを確認して設定を調整してください。
Discussion