[Raspberry Pi4] ラズパイで地デジ4チャンネル同時録画サーバ。Docker + GPUエンコード版

Docker

ラズパイで動かしている Epgstationでハードウェアエンコードを有効にするためのメモ。前回=[Raspberry Pi4] Ubuntu で地デジ4チャンネル同時録画サーバー with PX-Q1UD の続き。まだうまく行っていない部分はありますが、GPUも使えているようで、概ね運用できるようになりました。

素人作業なので参考にする方は自己責任で。

試した環境

今回も docker-mirakurun-epgstation を利用させていただきます。

ハードウェアの準備

チューナー、B-CASカードリーダー、SSDを接続します。かなり熱がでるのでアルミケースにヒートシンクを貼り付けています。

コンパクトなラズパイが台無しです。

ドライバのインストール

チューナーのドライバを入れます。

# PX-Q1UD/PX-S1UD V2.0 の場合は下記が必要。
$ sudo apt-get install -y unzip
$ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
$ unzip PX-S1UD_driver_Ver.1.0.1.zip
$ sudo cp PX-S1UD_driver_Ver.1.0.1/x86/i386/isdbt_rio.inp /lib/firmware/
$ rm -rf PX-S1UD_driver_Ver.1.0.1.zip PX-S1UD_driver_Ver.1.0.1

# コンテナからもデバイスにアクセスできるようにパーミッションを変更する
$ echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules

同じことを gist に書いてあるので、そのまま流用する場合は以下のコマンドを実行。

$ curl -sf https://gist.githubusercontent.com/usurageha/afb8b4a20480acb6d75d0dcee88c9d3e/raw/d252adadd15f19dd3fbf36f815c5586bede7d973/PXQ1UD_driver_install.sh  | sudo sh -s

GPUでエンコーディングするので、GPUのメモリサイズも増やしておくと良い。💯。
[Raspberry Pi4] GPUに割り当てるメモリを増やす

ここでいちど再起動します。

$  sudo shutdown -h now

reboot だと起動後にデバイスが認識されないことが多いため、チューナーも含め、一度電源を完全に切ってから、再度入れ直すようにしています。 特にPX-Q1UD は外部電源も切断しないとチューナーが不安定になることが多いです。

2022/01/08追記:rebootで問題が起こるのは、ラズパイの電源をOFFにしてもチューナから各USBポートに給電されてしまうのが原因っぽい。要するにラズパイをリブートしても、デバイスのリセットができないということ。なので、USB-DC電源供給ケーブルというのを使って、ラズパイのUSBポートからチューナーの電源を取るようにしたら、チューナー不安定問題は発生しなくなりました。

Mirakurun と EPGStation のコンテナを動かす

Mirakurun と EPGStation のコンテナを動かします。

公式の手順を真似して、必要な作業を gist上のシェルスクリプトにまとめてみました。

$ curl -sf https://gist.githubusercontent.com/usurageha/91c4c739ec5ab64b2a7078d7b815d6e3/raw/1d085287aa70b25b759051a65bce8f243168bcfe/docker-mirakurun-epgstation-pi4-setup.sh | sh -s
公式の手順とラズパイ用の違いメモ
  • docker-compose.yml
    • epgstation が /dev/video* /dev/vchiq を使えるように devices を追加
    • epgstation のコンテナに privileged: true を追加(いらない?)
  • epgstation/pi4.Dockerfile
    • ffmpegは バージョン 4.4 を使うように。
  • epgstation/config/config.yml
    • エンコード済みの録画をHLS再生する場合に、ハードウェアエンコード(hls h264_v4l2m2m)を使うように。
    • ライブ視聴などはCPUエンコードのままなので、実質見れない。
  • epgstation/config/enc.js
    • 録画後のエンコード方法をlibx264 から h264_v4l2m2m に変更

コンテナを起動する

コンテナを起動します。

初回はコンテナイメージのビルド(ffmpegのビルド)が行われるため時間がかかります。コーヒーでものみながら、気長に待ちましょう☕

$ cd docker-mirakurun-epgstation
$ docker-compose run --rm -e SETUP=true mirakurun
$ docker-compose up -d
...
(それなりにビルドに時間がかかります。SDカードだと20分ぐらい。SSDだと少し早くなります。)

コンテナが起動したら、http://<ラズパイのホスト名>:8888 で、EPGStationにアクセスできるようになります。番組表などの取得には少し時間が必要です。しばらく放置しておくと下記のように取得されていました。

GPUでエンコード&ストレージをSSDにしたところ、若干ですが安定度がましたような気がします。

課題

録画後はGPUエンコードできているが、設定が至らないところは多々あって、いまは運用でごまかしている。ライブ配信やストリーミング配信はCPUエンコードのままだし、HLS配信はh264_v4l2m2m でエンコードしているけど、縦横比がおかしくなる。

2022/01/08 追記:WebUIの設定で、「録画」→「web での再生を優先する」をONにしておけば、ブラウザで再生され、環境に依存せず快適に見れるようになりました。各クライアントごとに 「web での再生を優先する」をON にしなければならないのだけど、どこかの設定でデフォルトでONにしておくことができるのかしら?

Amazon.co.jp: ゲームウォッチ: ゲーム
ゲーム の優れたセレクションでオンラインショッピング。

コメント