カメラなどの動画データをGstreamerで受け取りRaspberryPi H.264 ハードウェアエンコーダで圧縮するイメージを作成してみました。
産業用カメラなどはデータ圧縮されていないもので活用できます。
環境
- CPU : RaspberryPi CM4 RAM2G eMMC16G + CM4IO BOARD
- カメラ : DFK-22BUC03 (The Imaging Source)
RaspberryPiのイメージ作成
以下の手順でイメージを作成し書込みます。
なお、今回は産業用カメラとセットで使用されることをイメージしてSDカードではなくeMMCタイプを使用します。
- PC側の事前準備
-
- rpiboot_setup.exeのインストール
-
- https://github.com/raspberrypi/usbboot/tree/master/win32
- Raspberry Pi Imagerのインストール
-
- https://www.raspberrypi.com/software/
- [ RaspberryPi ]J2ピンヘッダの一番左にジャンパーを差し込み
- [ RaspberryPi ]USBmicroにケーブルを差し込みPCと接続
- [ RaspberryPi ]ACアダプターの電源投入
- [ PC ]rpiboot.exeを起動
-
- rpiboot.exeを起動すると自動的にeMMCがPCのストレージとして認識される
- [ PC ]RaspberryPi imagerでイメージ作成、eMMCに書込み
-
- OSは Raspberry pi OS other -> Raspberry pi OS(Legacy)を選択
- [ RaspberryPi ]ACアダプタの電源切断
- [ RaspberryPi ]ACアダプタの電源投入
- [ PC ]のストレージにRaspberryPiがストレージとして認識されるのでconfig.txtを開いて最終行に以下を書込み
-
- dtoverlay=dwc2
- dr_mode=host
- [ RaspberryPi ]ACアダプタの電源切断
- [ RaspberryPi ]ACアダプタの電源投入
- [ RaspberryPi ]USBmicroを抜く
- [ RaspberryPi ]USB TypeAにマウスとキーボードを接続
- [ RaspberryPi ]ACアダプタの電源投入
補足
「Raspberrypi OS other -> Raspberrypi OS(Legacy)」を選択しているのは、最新RaspberryPiOS(32bit、64bit)とGstreamerでomxh264encが起動ができずそのためLegacyバージョンを使用しています。
config.txtにdtoverlay=dwc2とdr_mode=hostを追記しているのはUSB typeAでマウスとキーボードを接続を接続できるようにするためです。
Gstreamerのインストール
こちらのページを参考にしました。
https://qengineering.eu/install-gstreamer-1.18-on-raspberry-pi-4.html
バージョンは1.18をインストールします。
Core からPlugins Base、Plugins Good、Plugins Bad、Plugins Uglyをインストールし、
最後にomxh264encをインストールします。
準備
$sudo apt-get update
$sudo apt-get upgrade
$ sudo rm -rf /usr/bin/gst-*
$ sudo rm -rf /usr/include/gstreamer-1.0
$ sudo apt-get install cmake meson flex bison
$ sudo apt-get install libglib2.0-dev libjpeg-dev libx264-dev
$ sudo apt-get install libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
$ sudo apt-get install libasound2-dev
Core (only Buster)
$ wget https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.18.4.tar.xz
$ sudo tar -xf gstreamer-1.18.4.tar.xz
$ cd gstreamer-1.18.4
$ mkdir build && cd build
$ meson --prefix=/usr \
--wrap-mode=nofallback \
-D buildtype=release \
-D gst_debug=true \
-D package-origin=https://gstreamer.freedesktop.org/src/gstreamer/ \
-D package-name="GStreamer 1.18.4 BLFS" ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
Plugins Base (only Buster)
$ cd ~
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.18.4.tar.xz
$ sudo tar -xf gst-plugins-base-1.18.4.tar.xz
$ cd gst-plugins-base-1.18.4
$ mkdir build
$ cd build
$ meson --prefix=/usr \
-D buildtype=release \
-D package-origin=https://gstreamer.freedesktop.org/src/gstreamer/ ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
Plugins Good
$ cd ~
$ sudo apt-get install libjpeg-dev
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz
$ sudo tar -xf gst-plugins-good-1.18.4.tar.xz
$ cd gst-plugins-good-1.18.4
$ mkdir build && cd build
$ meson --prefix=/usr \
-D buildtype=release \
-D package-origin=https://gstreamer.freedesktop.org/src/gstreamer/ \
-D package-name="GStreamer 1.18.4 BLFS" ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
Plugins Bad
$ cd ~
$ sudo apt install librtmp-dev
$ sudo apt-get install libvo-aacenc-dev
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.18.4.tar.xz
$ sudo tar -xf gst-plugins-bad-1.18.4.tar.xz
$ cd gst-plugins-bad-1.18.4
$ mkdir build && cd build
$ meson --prefix=/usr \
-D buildtype=release \
-D package-origin=https://gstreamer.freedesktop.org/src/gstreamer/ \
-D package-name="GStreamer 1.18.4 BLFS" ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
Plugins Ugly
$ cd ~
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.4.tar.xz
$ sudo tar -xf gst-plugins-ugly-1.18.4.tar.xz
$ cd gst-plugins-ugly-1.18.4
$ mkdir build && cd build
$ meson --prefix=/usr \
-D buildtype=release \
-D package-origin=https://gstreamer.freedesktop.org/src/gstreamer/ \
-D package-name="GStreamer 1.18.4 BLFS" ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
$ gst-inspect-1.0 x264enc
$ sudo apt-get install libx264-dev
omxh264enc
$ cd ~
$ wget https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-1.18.4.tar.xz
$ sudo tar -xf gst-omx-1.18.4.tar.xz
$ cd gst-omx-1.18.4
$ mkdir build && cd build
$ meson --prefix=/usr \
-D header_path=/opt/vc/include/IL \
-D target=rpi \
-D buildtype=release ..
$ ninja -j4
$ sudo ninja install
$ sudo ldconfig
確認
以下のコマンドを実行してomxh264encが出力されたら成功です。
$ gst-inspect-1.0 | grep omx
omx: omxhdmiaudiosink: OpenMAX HDMI Audio Sink
omx: omxanalogaudiosink: OpenMAX Analog Audio Sink
omx: omxh264enc: OpenMAX H.264 Video Encoder
omx: omxvc1dec: OpenMAX WMV Video Decoder
omx: omxmjpegdec: OpenMAX MJPEG Video Decoder
omx: omxvp8dec: OpenMAX VP8 Video Decoder
omx: omxtheoradec: OpenMAX Theora Video Decoder
omx: omxh264dec: OpenMAX H.264 Video Decoder
omx: omxh263dec: OpenMAX H.263 Video Decoder
omx: omxmpeg4videodec: OpenMAX MPEG4 Video Decoder
omx: omxmpeg2videodec: OpenMAX MPEG2 Video Decoder
DFK-22BUC03 (The Imaging Source)のインストール
最後にDFK-22BUC03 (The Imaging Source)のライブラリをインストールします。
$sudo apt update
$sudo apt upgrade
$sudo apt-get install git
$sudo apt-get install v4l-utils
$git clone https://github.com/TheImagingSource/tiscamera.git
$cd tiscamera
$sudo ./scripts/dependency-manager install
//ただraspbian_11.depがみつからないとのエラーがでるので、/tiscamera/dependenciesのraspbian_10.depをraspbian_11.depにファイル名変更mv raspbian_10.dep raspbian_11.dep を実行する
$mkdir build
$cd build
$cmake -DBUILD_ARAVIS=ON -DBUILD_LIBUSB=ON -DBUILD_V4L2=ON -DBUILD_GST_1_0=ON -DBUILD_TOOLS=ON -DBUILD_DOCUMENTATION=ON ..
$sudo make
$sudo make install
コメントをお書きください