3
Help us understand the problem. What are the problem?

posted at

EPGStation で Raspberry Pi のハードウェアエンコーダーを使う

愛用していた nasne 本体が壊れてしまったので、Raspberry Pi と地デジチューナーで nasneモドキを自作しました。
以下の記事が大変参考になりました。

上記の記事に従って作業すれば良いと思いますが、現時点(2022年7時月下旬)ではいくつか差分があったので、メモします。

  • ホストOSへの「FFmpegのインストール」は不要
    • ffmpeg は EPGStation コンテナ内で動作するから
    • ffmpeg が h264_omx を使えるように設定する(後述)
  • ホストOSへの「カードリーダーのドライバインストール」は不要
    • カードリーダーにアクセスするのは、Mirakurunのコンテナだと思う
    • 少なくとも、私はこのステップを省略した
  • 以下のステップも実施しなかった
    • 「B-CASデコード用ライブラリのインストール」
    • 「録画コマンドのインストール」
  • 「Docker Composeのインストール」は不要
    • docker に compose プラフインが入るようになっているから

環境

$ uname -m
armv7l
$ cat /proc/device-tree/model
Raspberry Pi 3 Model B Plus Rev 1.3
$ docker --version
Docker version 20.10.17, build 100c701

docker-compose.yml

変更点は以下の通りです。

  • Raspberry Pi OS 32bit で動作する MySQLのイメージに変更
  • コンテナから h264_omx を使えるするようにするための変更 以下を追加
      * - /opt/vc/lib:/opt/vc/lib:ro
      * - /dev/vchiq:/dev/vchiq
$ diff docker-compose-sample.yml docker-compose.yml
27,28c27
<         image: mariadb:10.5
<         # image: mysql:8.0 # 囲み文字を使用する場合
---
>         image: hypriot/rpi-mysql
49a49
>             - /opt/vc/lib:/opt/vc/lib:ro
54c54,55
<             - ./recorded:/app/recorded
---
> #            - ./recorded:/app/recorded
>             - /home/samba/minidlna/movie:/app/recorded
64c65,66
< #         devices:
---
>         devices:
>             - /dev/vchiq:/dev/vchiq

debian.Dockerfile

epgstation コンテナでビルドする ffmpeg で、h264_omx が動作するように、Dockerfile を変更します。

$ git diff
diff --git a/epgstation/debian.Dockerfile b/epgstation/debian.Dockerfile
index e602650..4c37fc5 100644
--- a/epgstation/debian.Dockerfile
+++ b/epgstation/debian.Dockerfile
@@ -3,10 +3,13 @@ FROM l3tnun/epgstation:master-debian
 ENV DEV="make gcc git g++ automake curl wget autoconf build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev"
 ENV FFMPEG_VERSION=4.2.4

+# Path to OpenMAX hardware encoding libraries. They are part of Raspberry Pi firmware.
+ENV LD_LIBRARY_PATH=/opt/vc/lib
+
 RUN apt-get update && \
     apt-get -y install $DEV && \
     apt-get -y install yasm libx264-dev libmp3lame-dev libopus-dev libvpx-dev && \
-    apt-get -y install libx265-dev libnuma-dev && \
+    apt-get -y install libx265-dev libnuma-dev libomxil-bellagio-dev && \
     apt-get -y install libasound2 libass9 libvdpau1 libva-x11-2 libva-drm2 libxcb-shm0 libxcb-xfixes0 libxcb-shape0 libvorbisenc2 libtheora0 libaribb24-dev && \
 \
 #ffmpeg build
@@ -27,6 +30,8 @@ RUN apt-get update && \
       --enable-libvpx \
       --enable-libx264 \
       --enable-libx265 \
+      --enable-omx \
+      --enable-omx-rpi \
       --enable-version3 \
       --enable-libaribb24 \
       --enable-nonfree \

EPGStation の config.yml

h264_omx でエンコードする設定を追加します。

$ diff config.yml config.yml.template
107,112d106
<                 - name: h264_omx
<                   cmd:
<                       '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 192k -ac 2
<                       -c:v h264_omx -b:v 5000k
<                       -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4
<                       pipe:1'
155,160d148
<                       pipe:1'
<                 - name: h264_omx
<                   cmd:
<                       '%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 192k -ac 2
<                       -c:v h264_omx -b:v 5000k
<                       -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4

出来上がり

$ docker compose run --rm -e SETUP=true mirakurun
$ docker compose up -d

ビットレートを 5Mbps に設定しましたが、CPU使用率 50% 以下で動作しており、快適です。

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
3
Help us understand the problem. What are the problem?