Raspberry Pi Zero 2 WにKinesis Video Streamsを導入する時に遭遇したエラーとその解決方法
Raspberry Pi Zero 2 W を利用して監視カメラの映像を Amazon Kinesis Video Streams にアップロードしようと試みた際、amazon-kinesis-video-streams-producer-sdk-cppの導入とビルドで予期せぬエラーに直面しました。
同じ環境でビルドに苦労している方々の参考になればと思い、ここにその解決方法をまとめました。
結論:GitHub の README.md に問題あり
最初に結論を述べます。
GitHub のREADME.mdに従ってビルドを試みるとエラーが発生しますが、
Amazon 公式の手順では問題なくビルドが完了します。
現時点では Amazon 公式の手順に従うことで問題なく進められますが、GitHub の手順で発生したエラーとその解決方法を記録として残します。
ビルド時に遭遇した主なエラー
Github の手順
Github の手順に従ってamazon-kinesis-video-streams-producer-sdk-cppをビルドしようとしましたが、いくつかの問題に直面しました。以下に公式手順とその際に発生した問題点をまとめます。
Github の手順
まずは(GitHub リポジトリ)の手順通りに進めます。
GitHub からファイルをダウンロードします。
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
1. 依存関係のインストールでエラー
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
2.CMake のインストール
Github では CMake のインストールが明記されていなかったため、cmake が存在しないというエラーが発生しました。そこで、以下のコマンドで CMake をインストールします。
sudo apt-get install cmake
3. メモリ不足による CMake エラー
Github の手順に従うと、cmakeを実行する際にメモリ不足が発生し、ビルドが途中で失敗しました。
cmake -DBUILD_GSTREAMER_PLUGIN=ON ..
fatal: Out of memory, malloc failed (tried to allocate 524288000 bytes)
4. kvssink プラグインが見つからないエラー
ビルドが完了し、環境変数を設定した後でも、以下のコマンドを実行すると kvssink プラグインが見つからないというエラーが表示されました。
gst-inspect-1.0 kvssink
No such element or plugin 'kvssink'
Github の手順で遭遇した問題点まとめ
-
システムの更新が不足している:
sudo apt updateが明記されていなかったため、依存関係のインストール時にエラーが発生しました。 -
CMake のインストールが不足している: CMake のインストールが含まれていなかったため、
cmakeコマンドが見つからずエラーとなりました。 -
メモリ不足の未対策: Raspberry Pi Zero 2 W の限られたメモリへの対策がされておらず、
make実行時にメモリ不足でビルドが失敗しました。 -
kvssinkプラグインの認識問題: ビルド後にkvssinkプラグインが GStreamer に認識されず、追加の設定が必要となりました。
これらの問題により、Github の手順のままでは Raspberry Pi Zero 2 W でのビルドが困難であることが判明しました。
エラーの解決方法
Amazon 公式の手順通りに実行すれば問題なくビルドできますが
参考のため、これらのエラーを回避するための解決方法を説明します。
1. メモリ不足の解決策
ビルド時にメモリ不足を回避するためには、以下の手順を実行します。
スワップ領域の設定
Raspberry Pi Zero 2 W のメモリ(512MB)は非常に限られているため、スワップ領域を増やすことで一時的にメモリ不足を補います。以下の手順でスワップファイルを設定します。
-
スワップを一時的に無効化します。
sudo dphys-swapfile swapoff -
スワップファイルの設定を編集します。
sudo nano /etc/dphys-swapfile -
ファイル内の以下の行を見つけて、値を増やします(例:
CONF_SWAPSIZE=2048は 2GB のスワップ領域を設定)。CONF_SWAPSIZE=2048 -
変更を保存して終了後、スワップを再設定します。
sudo dphys-swapfile setup sudo dphys-swapfile swapon
スワップ領域を増やすことで、再度 cmake を実行してもメモリ不足が発生しなくなります。
cmake -DBUILD_GSTREAMER_PLUGIN=ON ..
2. kvssink プラグインのビルドと設定
cmake と make が正常に完了した後でも、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 ファイルに追加(特定のユーザー向け)
-
.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
方法 2: /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
まとめ
Raspberry Pi Zero 2 W で amazon-kinesis-video-streams-producer-sdk-cpp をビルドする際には、主に以下の 2 つの課題に直面しました。
-
メモリ不足
スワップ領域の拡張で対応。 -
kvssinkプラグインの認識問題
正しいビルド手順と環境変数の設定で解決。
Github の手順ではこれらのエラーが発生し、トラブル対応に手間取りました。
Amazon 公式
の手順に基づき SDK をインストールし、映像を Amazon Kinesis Video Streams にアップロードする方法については、以下のリンクをご参照ください。
Discussion