ラズパイで動かしている Epgstationでハードウェアエンコードを有効にするためのメモ。前回=[Raspberry Pi4] Ubuntu で地デジ4チャンネル同時録画サーバー with PX-Q1UD の続き。まだうまく行っていない部分はありますが、GPUも使えているようで、概ね運用できるようになりました。
素人作業なので参考にする方は自己責任で。
試した環境
- Raspberry Pi 4 8GB
- 地デジチューナー PX-Q1UD / ※ PX-S1UD V2.0 でも手順は同じ。
- Raspberry Pi OS 64bit & Docker / Ubuntu でもDockerが入っていれば手順は同じ(たぶん。)
今回も 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にしておくことができるのかしら?
コメント