· 

GstreamerでRaspberryPi H.264エンコーダ

カメラなどの動画データを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