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 に問題あり
最初に結論を述べます。
amazon-kinesis-video-streams-producer-sdk-cppのGitHub のREADME.mdに従ってビルドを試みるとエラーが発生しますが、
Amazon 公式の手順では問題なくビルドが完了します。
現時点では Amazon 公式の手順に従うことで問題なく進められますが、GitHub の手順で発生したエラーとその解決方法を記録として残します。
ビルド時に遭遇した主なエラー
1. メモリ不足による CMake エラー
Github の手順に従うと、以下のコマンドを実行する際にメモリ不足が発生し、ビルドが途中で失敗しました。
cmake -DBUILD_GSTREAMER_PLUGIN=ON ..
kvssink
プラグインが見つからないエラー
2. ビルドが完了し、環境変数を設定した後でも、以下のコマンドを実行すると 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-cpp
に build
フォルダを作り、そこに移動します。
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 の手順で遭遇した問題点
-
システムの更新が不足している:
sudo apt update
が明記されていなかったため、依存関係のインストール時にエラーが発生しました。 -
CMake のインストールが不足している: CMake のインストールが含まれていなかったため、
cmake
コマンドが見つからずエラーとなりました。 -
メモリ不足の未対策: Raspberry Pi Zero 2 W の限られたメモリへの対策がされておらず、
make
実行時にメモリ不足でビルドが失敗しました。 -
kvssink
プラグインの認識問題: ビルド後にkvssink
プラグインが GStreamer に認識されず、追加の設定が必要となりました。
これらの問題により、Github の手順のままでは Raspberry Pi Zero 2 W でのビルドが困難であることが判明しました。
エラーの解決方法
これらのエラーを回避するための解決方法を詳しく説明します。
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 ..
kvssink
プラグインのビルドと設定
2. 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
プラグインのビルドと設定が正常に完了しています。
永続的な環境変数の設定
一時的に設定した環境変数は、再起動や新しいセッションで失われます。以下の手順で永続的に設定します。
.bashrc
ファイルに追加(特定のユーザー向け)
方法 1: -
.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
ファイルに追加(全ユーザー向け)
方法 2: -
/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