🎥

Raspbeery Pi から Amazon Kinesis Video Streams に映像を送る

2025/01/28に公開

はじめに

本記事では、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-cppbuildディレクトリを作り、移動します。

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 実行時に、以下のオプションを指定してください:

  1. GStreamer プラグインを有効化する
    GStreamer プラグインをビルドするために、-DBUILD_GSTREAMER_PLUGIN=ON を指定します。

  2. プリインストール済みライブラリの使用
    システムに既にインストールされているライブラリを活用する場合、-DBUILD_DEPENDENCIES=OFF を指定します。このオプションを使用すると、ビルド時間の短縮やメモリの節約が可能です。

  3. アラインドメモリモデルの有効化
    メモリのアライメントを最適化するために、-DALIGNED_MEMORY_MODEL=ON を指定します。これにより、パフォーマンスが向上します。

make 実行時に、以下のオプションを指定してください:

  1. 並列ビルドの実施
    -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 セッション終了時や再起動後に失われます。以下の方法で永続化を行います。


永続化の手順

  1. 設定を確認
    環境変数が正しく設定されたかを以下で確認します:

    echo $GST_PLUGIN_PATH
    

    設定されたパスが正しく表示されれば成功です(例):

    /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
    
  2. 永続化
    以下の手順で永続化します。

    方法 1: .bashrc ファイルに追加(特定のユーザー向け)

    1. .bashrc ファイルを編集します:
      sudo nano ~/.bashrc
      
    2. ファイル末尾に以下を追加します:
      export GST_PLUGIN_PATH=/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
      
    3. 保存して閉じます(Ctrl+O → Enter → Ctrl+X)。
    4. 設定を反映させます:
      source ~/.bashrc
      
    5. 確認します:
      echo $GST_PLUGIN_PATH
      
      設定したパスが表示されれば成功です。

    方法 2: /etc/environment ファイルに追加(全ユーザー向け)

    1. /etc/environment ファイルを編集します:
      sudo nano /etc/environment
      
    2. 以下を追加します(既存内容はそのまま残してください):
      GST_PLUGIN_PATH="/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build"
      
    3. 保存して閉じます。
    4. 再起動して設定を反映します:
      sudo reboot
      
    5. 再起動後、以下で確認します:
      echo $GST_PLUGIN_PATH
      
      設定したパスが表示されれば成功です。
  3. kvssink プラグインの確認

GStreamerkvssink プラグインを正しく認識しているかを確認するために、以下のコマンドを実行します。

gst-inspect-1.0 kvssink

コマンド実行結果の確認

  • 成功時: kvssink プラグインの詳細情報が表示されます。例えば、プラグインのバージョンや機能などが確認できます。

    Factory Details:
      Rank                     primary + 10
      Plugin Name              kvssink
      ...
    
  • 失敗時: 以下のようなエラーメッセージが表示されます。

    No such element or plugin 'kvssink'
    

    この場合、以下の点を確認してください:

    1. GST_PLUGIN_PATH の設定確認

      環境変数 GST_PLUGIN_PATH が正しく設定されているか再確認します。ビルドディレクトリが正しく指定されているか確認してください。

      echo $GST_PLUGIN_PATH
      

      期待される出力例:

      /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build
      
    2. プラグインのビルド確認

      kvssink プラグインが正しくビルドされているか確認します。ビルドプロセス中にエラーが発生していないか、再度 make コマンドを実行して確認してください。

      make
      
    3. ビルドディレクトリの確認

      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

プロンプトに従い、以下の情報を入力してください:

  1. AWS Access Key ID:管理者権限を持つユーザーの AccessKeyId
  2. AWS Secret Access Key:管理者権限を持つユーザーの SecretAccessKey
  3. Default region name:例:ap-northeast-1(使用する AWS リージョン)
  4. Default output format:例:json(出力形式は jsontext、または 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

実行結果の AccessKeyIdSecretAccessKey を後で使用します。


最小権限を付与する場合

必要最低限の権限を付与する場合は、以下のコマンドを実行します。

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

こちらも、実行結果の AccessKeyIdSecretAccessKey を後で使用します。


AWS CLI を使用した認証情報の設定

作成した IAM ユーザーの認証情報を AWS CLI に設定します。

aws configure

プロンプトに従って以下を入力してください:

  1. AWS Access Key ID:作成したユーザーの AccessKeyId
  2. AWS Secret Access Key:作成したユーザーの SecretAccessKey
  3. Default region name:例:ap-northeast-1(使用する AWS リージョン)
  4. 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