1. 概要
前回の記事に試みにより、Pi Zero2 W+bullseye 64bit Lite(Debian 11)になんとかAmazon Kinesis Video Streams Producer SDKを導入できた。今回は本来の目的のビデオのアップロードを行う。
2. 使うもの
- Pi Zero2 W+bullseye 64bit Lite(Debian 11)
ユーザー名はpiとする。 - UVCカメラ: Buffalo BSW500M
3. 準備
環境変数の設定
$ export GST_PLUGIN_PATH=/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build/downloads/local/lib:$GST_PLUGIN_PATH
$ export LD_LIBRARY_PATH=/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build/downloads/local/lib
Gstreamerがlibgstkvssink.soを参照できるようにする
$ mkdir -p /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build/downloads/local/lib/gstreamer-1.0/
$ cp -p /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build/libgstkvssink.so /home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/build/downloads/local/lib/gstreamer-1.0/
4. 実行と確認
4.1. MJPEG->H.264
- JPEGのハードウェアデコード
- H.264のハードウェアエンコード
とりあえず小さな解像度(320x240)とフレームレート(10 fps)ではうまくいった。画像荒いけど。
gst-launch-1.0 v4l2src device=/dev/video0 ! "image/jpeg,width=320,height=240,framerate=10/1" ! queue ! jpegparse ! v4l2jpegdec ! v4l2h264enc ! 'video/x-h264,level=(string)4' ! h264parse ! kvssink stream-name="MyKinesisVideoStream" access-key="アクセスキー" secret-key="シークレットアクセスキー" aws-region="ap-northeast-1"
※v4l2jpegdecをjpegdecにするとソフトウェアエンコードになる。動きは遅い。
解像度をHD(1280x720)にするとメモリ関係のエラーが出てアップロードに失敗した。
GPUの割り当てを増やしたらうまくいくかもと思い、128MBに設定したら成功した。
以下のコマンドでメニューを起動
sudo raspi-config
パフォーマンス系の変更
GPUメモリの変更
変更したい値にしてOKで抜けていく
尚、調子に乗ってFHD(1920x1080)を試してエラーが出たのでさらにGPU割り当てを増やしたら起動に影響がでた。
結果は以下。
GPU Mem | 起動成否 |
---|---|
default | QVGAサイズのアップロードができた |
128 | HDサイズのアップロードができた |
160 | Wi-Fiはping応答あるがSSHで接続できず |
192 | 起動できていないのかWi-Fi/SSHの応答が一切ない |
(追記)
よくみたらカメラの1920x1080のときのフレームレートが5か30だった、フレームレートを10から5に変更したらアップロードできた。ついでにフレームレート安定用の「framerate=5 frame-timecodes=false」も入れておいた。
gst-launch-1.0 v4l2src device=/dev/video0 ! "image/jpeg,width=320,height=240,framerate=5/1" ! queue ! jpegparse ! v4l2jpegdec ! v4l2h264enc ! 'video/x-h264,level=(string)4' ! h264parse ! kvssink stream-name="MyKinesisVideoStream" framerate=5 frame-timecodes=false access-key="アクセスキー" secret-key="シークレットアクセスキー" aws-region="ap-northeast-1"
カメラの性能は以下
$ v4l2-ctl -d /dev/video0 --list-formats-ext
~略~
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.200s (5.000 fps)
~略~
4.2. YUV->H.264
(未)
5. その他AWSの下記の箇所で確認可能。
【参考】
6. まとめ
メモリを節約したり、映像のビットレートなどを絞ればFHDも可能かもしれない。
とりあえず安定して動きそうなのはHDサイズ。