🚨

Raspberry Pi Zero 2 WにKinesis Video Streamsを導入する時に遭遇したエラーとその解決方法

2025/01/28に公開

Raspberry Pi Zero 2 W を利用して監視カメラの映像を Amazon Kinesis Video Streams にアップロードしようと試みた際、amazon-kinesis-video-streams-producer-sdk-cppの導入とビルドで予期せぬエラーに直面しました。

同じ環境でビルドに苦労している方々の参考になればと思い、ここにその解決方法をまとめました。

結論:GitHub の README.md に問題あり

最初に結論を述べます。

amazon-kinesis-video-streams-producer-sdk-cppのGitHub のREADME.mdに従ってビルドを試みるとエラーが発生しますが、

Amazon 公式の手順では問題なくビルドが完了します。

現時点では Amazon 公式の手順に従うことで問題なく進められますが、GitHub の手順で発生したエラーとその解決方法を記録として残します。

ビルド時に遭遇した主なエラー

1. メモリ不足による CMake エラー

Github の手順に従うと、以下のコマンドを実行する際にメモリ不足が発生し、ビルドが途中で失敗しました。

cmake -DBUILD_GSTREAMER_PLUGIN=ON ..

2. kvssink プラグインが見つからないエラー

ビルドが完了し、環境変数を設定した後でも、以下のコマンドを実行すると kvssink プラグインが見つからないというエラーが表示されました。

gst-inspect-1.0 kvssink
No such element or plugin 'kvssink'

Github の手順

Github の手順に従ってamazon-kinesis-video-streams-producer-sdk-cppをビルドしようとしましたが、いくつかの問題に直面しました。以下に公式手順とその際に発生した問題点をまとめます。

Github の手順の概要

GitHub リポジトリ)では、以下の手順で SDK をビルドすることが推奨されています。

ダウンロード

GitHub からファイルをダウンロードします。

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

依存関係のインストール

Github には明記されていませんが、ライブラリのインストール前にシステムを更新する必要がありました。

sudo apt update

その後、以下のコマンドで必要なライブラリをインストールします。

sudo apt-get install 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 のインストール

Github では CMake のインストールが明記されていなかったため、cmake が存在しないというエラーが発生しました。そこで、以下のコマンドで CMake をインストールします。

sudo apt-get install cmake

CMake の実行

以下のコマンドで CMake を実行します。

cmake -DBUILD_GSTREAMER_PLUGIN=TRUE ..

ビルドの実行

次に、make コマンドを実行しますが、CMake 実行時にメモリ不足が発生し、ビルドが途中で失敗しました。

make

Github の手順で遭遇した問題点

  1. システムの更新が不足している: sudo apt update が明記されていなかったため、依存関係のインストール時にエラーが発生しました。
  2. CMake のインストールが不足している: CMake のインストールが含まれていなかったため、cmake コマンドが見つからずエラーとなりました。
  3. メモリ不足の未対策: Raspberry Pi Zero 2 W の限られたメモリへの対策がされておらず、make 実行時にメモリ不足でビルドが失敗しました。
  4. kvssink プラグインの認識問題: ビルド後に kvssink プラグインが GStreamer に認識されず、追加の設定が必要となりました。

これらの問題により、Github の手順のままでは Raspberry Pi Zero 2 W でのビルドが困難であることが判明しました。

エラーの解決方法

これらのエラーを回避するための解決方法を詳しく説明します。

1. メモリ不足の解決策

ビルド時にメモリ不足を回避するためには、以下の手順を実行します。

スワップ領域の設定

Raspberry Pi Zero 2 W のメモリは512MBに限られているため、スワップ領域を増やすことで一時的にメモリ不足を補います。以下の手順でスワップファイルを設定します。

  1. スワップを一時的に無効化します。

    sudo dphys-swapfile swapoff
    
  2. スワップファイルの設定を編集します。

    sudo nano /etc/dphys-swapfile
    
  3. ファイル内の以下の行を見つけて、値を増やします(例:CONF_SWAPSIZE=2048 は 2GB のスワップ領域を設定)。

    CONF_SWAPSIZE=2048
    
  4. 変更を保存して終了後、スワップを再設定します。

    sudo dphys-swapfile setup
    sudo dphys-swapfile swapon
    

スワップ領域を増やすことで、再度 cmake を実行してもメモリ不足が発生しなくなります。

cmake -DBUILD_GSTREAMER_PLUGIN=ON ..

2. kvssink プラグインのビルドと設定

cmakemake が正常に完了した後でも、kvssink プラグインが認識されない問題を解決するためには、以下の手順を実行します。

1. 必要なライブラリと依存関係のインストール

まず、必要なパッケージをインストールします。

sudo apt update
sudo apt install -y libssl1.1 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools cmake

必要に応じて、LD_LIBRARY_PATH を更新します。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/$(uname -m)-linux-gnu

2. プラグインのビルド

次に、amazon-kinesis-video-streams-producer-sdk-cpp をビルドします。

cd ~/amazon-kinesis-video-streams-producer-sdk-cpp/build
cmake -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_DEPENDENCIES=OFF ..
make

ビルドが成功すると、libgstkvssink.so がビルドディレクトリ内に生成されます。

3. GStreamer プラグインパスの設定

GST_PLUGIN_PATH 環境変数を設定して、GStreamer が kvssink プラグインを認識できるようにします。

export GST_PLUGIN_PATH=$(pwd)

設定が正しいか確認します。

echo $GST_PLUGIN_PATH
# 出力例: /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build

4. GStreamer キャッシュのクリア

GStreamer のキャッシュをクリアして、プラグインの再認識を促します。

rm -rf ~/.cache/gstreamer-1.0

5. 動作確認

最後に、kvssink プラグインが正しく認識されているか確認します。

gst-inspect-1.0 kvssink

期待される出力例:

Factory Details:
  Rank                     primary (256)
  Long-name                Kinesis Video Sink
  Klass                    Sink/Video/Network
  Description              GStreamer plugin for AWS Kinesis Video Streams
  Author                   AWS

この出力が表示されれば、kvssink プラグインのビルドと設定が正常に完了しています。

永続的な環境変数の設定

一時的に設定した環境変数は、再起動や新しいセッションで失われます。以下の手順で永続的に設定します。

方法 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
    

まとめ

Raspberry Pi Zero 2 W で amazon-kinesis-video-streams-producer-sdk-cpp をビルドする際には、主に以下の 2 つの課題に直面しました。

  1. メモリ不足
    スワップ領域の拡張で対応。

  2. kvssink プラグインの認識問題
    正しいビルド手順と環境変数の設定で解決。

Github の手順ではこれらのエラーが発生し、トラブル対応に手間取りました。

Amazon 公式
の手順に基づき SDK をインストールし、映像を Amazon Kinesis Video Streams にアップロードする方法については、以下のリンクをご参照ください。

Amazon 公式の手順に従って映像をアップする方法


Discussion