epgstation,mirakurun共にdockerパッケージでPLEXチューナーを利用する

サーバ起動用SSDを1TBの製品に交換し、OS新規インストール後にmirakurunのセットアップをしようとしたところ、PLEXチューナーが上手く動かなかった為、対策しました。

本投稿では、recpt1のコンパイルをdocker上に準備したubuntu20.04で行い、それをmirakurun環境にコピーしているところがポイントとなっています。ubuntu22.04以降は本投稿の流れでセットアップできると思いますので、その備忘をご紹介します。

なお、本投稿で対象としているチューナーは以下です。

  • PT3
  • PX-W3U4
  • PX-Q3U4
  • PX-W3PE4
  • PX-Q3PE4
  • PX-W3PE5
  • PX-Q3PE5
  • PX-MLT5PE
  • PX-MLT8PE

※MLTは実機を持っていない為、セットアップの流れは記載しましたが、セットアップ後のコメントを頂けると幸甚です。勿論、他のデバイスについてコメント頂けると幸甚です。

【事前準備】環境の組み合わせについて

①サーバ、②チューナー、③カードリーダが必要です。

①サーバ

サーバ費用コメント
Raspberry Pi47,000~30,000円ハードウェアエンコード可能なため、コスパ最強です。
・・・が、最近品薄なのかやけに高い売値ばかりを目にします。
自作サーバ3万円前後h.264,h.265のハードウェアエンコードが利用できるintel製のGPU内蔵型CPUを利用することで、録画後のエンコードにGPUを利用できるため、消費電力削減にも寄与できるかもしれません。
ノートPC19,800~余っているノートPCを再利用してもいいと思います。バッテリーが生きていればUPS付きと解釈できそうです。
Amazonでリース落ち等を再セットアップしたと思われる「Amazon整備済み」のノートPCを購入するのが一番安上りかもしれません。HDDはUSBで適当に外付けを用意するか、毎晩HDD内のデータをMP4エンコードしてファイルサーバに移動させるcronを動かすのも良いかと思います。

②チューナー

利用可能なチューナーは以下の通りで、分類が2種類に分かれます。mirakurunはdocker上に構築する前提で特徴を記します。

分類特徴
mirakurunのセットアップ中で面倒を見てもらえる為、セットアップが楽。
ドライバを導入し、recpt1等をコンパイルし、Dockerから参照可能な場所に配備。
あわせて、Dockerから該当デバイスを見れるようにする必要あり。
mirakurunで利用可能なチューナーの分類

mirakurunで利用可能なチューナーは下表のとおり。PT3を持っている方はPT3を使うのが楽です。BS/CSが必要なければ分類①に該当するPX-Q1UDPX-S1UDが最有力候補。

Raspberry pi等の小型PCで利用する場合には、外付けタイプ(内外で内と記載)を選択。既存のサーバ機やデスクトップPCを利用する場合には内蔵タイプ(内外で外と記載)を選択すればいいと思います。

メーカー製品分類内外地デジBS/CS金額評価コメント
アーW3PE4スソフトPT32ch2ch3万前後一押しだが、既に入手困難
PLEXPX-Q1UD4ch1万2千円セットアップが楽
PLEXPX-S1UD1ch5,000セットアップが楽
PLEXPX-W3U42ch2ch在庫少ない?良い意味で枯れてます。recpt1経由で利用
PLEXPX-Q3U44ch4ch22,000同上
PLEXPX-W3PE42ch2ch13,800同上
PLEXPX-Q3PE44ch4ch21,000同上
PLEXPX-W3PE52ch2ch16,000同上
PLEXPX-MLT5PE5ch地デジ兼用16,000地デジ、BS/CS合計5ch。recpt1経由で利用
PLEXPX-MLT8PE8ch地デジ兼用27,000地デジ、BS/CS合計8ch。recpt1経由で利用
mirakurunから利用可能なチューナー

③カードリーダー

安定して利用製で既製品であればOKです。「SCR3310」が実績があり苦労しないと思います。

PX-Q3PE4のセットアップ

PLEX製のチューナーカードのうち、以下を利用するためには、「px4_drv – Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers」のドライバを利用させていただきます。

利用可能なチューナーは以下との事ですが、e-Better製は試していない為、当記事では話題に挙げません。

  • PX-W3U4・・・当記事の対象
  • PX-Q3U4・・・当記事の対象
  • PX-W3PE4・・・当記事の対象
  • PX-Q3PE4・・・当記事の対象
  • PX-W3PE5・・・当記事の対象
  • PX-Q3PE5・・・当記事の対象
  • PX-MLT5PE・・・当記事の対象
  • PX-MLT8PE・・・当記事の対象
  • DTV02-1T1S-U (実験的)
  • DTV02A-1T1S-U
  • DTV02A-4TS-P

ドライバセットアップ方法

# パッケージの最新化
sudo apt update ;sudo apt upgrade

# dkms、autoconfを事前インストール
sudo apt install dkms autoconf unzip

# px4_drvを利用させてもらいます。
cd /tmp
git clone https://github.com/nns779/px4_drv
cd px4_drv/fwtool

make
wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip -O pxw3u4_BDA_ver1x64.zip
unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
./fwtool PXW3U4.sys it930x-firmware.bin
sudo mkdir -p /lib/firmware
sudo cp it930x-firmware.bin /lib/firmware/

# dkmsでカーネルドライバを自動的に設定する
cd ../
sudo cp -a ./ /usr/src/px4_drv-0.2.1
sudo dkms add px4_drv/0.2.1
sudo dkms install px4_drv/0.2.1
sudo reboot

# 再起動後、/dev/px4をロードしていることを確認
lsmod | grep -e ^px4_drv
# px4_drv               143360  0

再起動後のデバイス認識状況確認

再起動した後は、各チューナーごとに以下のようにデバイスが見れているはずです。分類①に該当するPX-Q1UDPX-S1UD以外のチューナーはここで確認した内容をmirakurunセットアップ時に利用する為、コピペして控えておいてください。

製品確認コマンドデバイス
PX-W3U4
PX-W3PE4
PX-W3PE5
ls /dev/px4video*/dev/px4video0
   ・
   ・
/dev/px4video3
PX-Q3U4
PX-Q3PE4
PX-Q3PE5
ls /dev/px4video*/dev/px4video0
   ・
   ・
/dev/px4video7
PX-MLT5PEls /dev/pxmlt5video*/dev/pxmlt5video0
   ・
   ・
/dev/pxmlt5video4
PX-MLT8PEls /dev/pxmlt8video*/dev/pxmlt5video0
   ・
   ・
/dev/pxmlt5video7

パッケージの最新化とdockerのインストール

Dockerのインストール

sudo apt install docker docker-compose
sudo systemctl enable --now docker

# dockerグループに作業ユーザーを追加する
sudo adduser  ${USER} docker

# 一度ログオフしてログインしなおします。
exit

recpt1の準備

ubuntu22.04最新版でmirakurunからrecpt1を利用しようとしたところ、コンパイラのバージョン不一致で動きませんでした。古いバージョンでコンパイルしたrecpt1であれば動くため、わざとdocker上にubuntu20.04をダウンロードし、ビルド環境を整えrecpt1をコンパイルし、mirakurun上にコピーしました。

docker上でubuntu20.04コンパイル環境の準備

docker image pull ubuntu:20.04
docker image ls
docker container run -it -d --name ubuntu20.04 ubuntu:20.04
docker container exec -it ubuntu20.04 bash

apt install gcc git build-essential autoconf unzip pkg-config wget unzip \
     pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools

ubuntu20.04上でrecpt1のコンパイル

cd /tmp
git clone https://github.com/stz2012/recpt1.git
cd recpt1/recpt1
./autogen.sh
./configure --enable-b25 
make;  make install

# コンパイル後にrecpt1がインストールされている場所を確認
# ★mirakurunセットアップ後にコピーします
ls /usr/local/bin/recpt1*

# docker環境を抜けます。
exit

mirakurunのインストール

mirakurunはDockerを利用する方法と、Dockerを利用しない方法(node.jsでPC上で動かす)があります。開発環境もDocker上に移行しているとのことですので、dockerを利用する方法でセットアップします。

※Dockerを利用した方が簡単です。

mirakurunのインストール

cd ~/

curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s
cd docker-mirakurun-epgstation

#チャンネル設定
vim mirakurun/conf/channels.yml

# recpt1を格納するsbinディレクトリの作成と、recpt1コマンドのコピー
mkdir mirakurun/sbin
cd mirakurun/sbin
docker cp ubuntu20.04:usr/local/bin/recpt1 ./
docker cp ubuntu20.04:usr/local/bin/recpt1ctl ./

PLEXチューナーを見せる設定を行う

一部PLEXチューナーのみ利用の環境の場合には/dev/dvbが存在しない為、docker-compose.ymlから該当行を削除する必要があります。(dvbを利用するチューナーを利用している場合には削除しません。)

ls /dev/dvb
# /dev/dvb <なければdocker-compose.ymlで該当行を削除

docker上でPLEXチューナーを利用するためには、「docker-compose.yml」にチューナーを見せる設定を行った後に、mirakurunのセットアップをします。以下は一例として、PX-Q3PE4の場合なので、px4diveoが8つあります。

ls /dev/px4video*
# /dev/px4video0  /dev/px4video1  /dev/px4video2  /dev/px4video3  
# /dev/px4video4  /dev/px4video5  /dev/px4video6  /dev/px4video7

上記で確認した/dev/px*をdocker-compose.ymlに追記します。

vi docker-compose.yml

「docker-compose.yml」へ追記する内容は以下の通りで、devicesに「/dev/px4video0:/dev/px4video0」~「/dev/px4video7:/dev/px4video7」を追加します。version等は、都度変更になる個所なので、以下の赤字箇所のみを修正します。

※「再起動後のデバイス認識状況確認」で控えておいた分を、devicesに記載します。下記はPX-Q3PE4の例です。PX-MLT5PEの場合は「- /dev/pxmlt5video0:/dev/pxmlt5video0」を0~4まで、計5個記載することになるかと思います。

また、mirakurunに見せるrecpt1の為に、volumesに/usr/local/sbinに対応するパスを登録します。

version: '3.7'
services:
    mirakurun:
        image: chinachu/mirakurun
        cap_add:
            - SYS_ADMIN
            - SYS_NICE
        ports:
            - "40772:40772"
            - "9229:9229"
        volumes:
            - ./mirakurun/conf:/app-config
            - ./mirakurun/data:/app-data
            - ./mirakurun/sbin:/usr/local/sbin
        environment:
            TZ: "Asia/Tokyo"
        devices:
            - /dev/bus:/dev/bus
            - /dev/dvb:/dev/dvb ・・・・・・・/dev/dvbが無い環境の場合は削除
            - /dev/px4video0:/dev/px4video0
            - /dev/px4video1:/dev/px4video1
            - /dev/px4video2:/dev/px4video2
            - /dev/px4video3:/dev/px4video3
            - /dev/px4video4:/dev/px4video4
            - /dev/px4video5:/dev/px4video5
            - /dev/px4video6:/dev/px4video6
            - /dev/px4video7:/dev/px4video7
        restart: always
        logging:
            driver: json-file
            options:
                max-file: "1"
                max-size: 10m

    mysql:
        image: mariadb:10.5
        # image: mysql:8.0 # 囲み文字を使用する場合
        volumes:
            - mysql-db:/var/lib/mysql
        environment:
            MYSQL_USER: epgstation
            MYSQL_PASSWORD: epgstation
            MYSQL_ROOT_PASSWORD: epgstation
            MYSQL_DATABASE: epgstation
            TZ: "Asia/Tokyo"
        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --performance-schema=false --expire_logs_days=1 # for mariadb
        # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_as_ci --performance-schema=false --expire_logs_days=1 --default-authentication-plugin=mysql_native_password # for myql
        restart: always
        logging:
            options:
                max-size: "10m"
                max-file: "3"

    epgstation:
        build:
            context: "./epgstation"
            dockerfile: "debian.Dockerfile"
        volumes:
            - ./epgstation/config:/app/config
            - ./epgstation/data:/app/data
            - ./epgstation/thumbnail:/app/thumbnail
            - ./epgstation/logs:/app/logs
            - ./recorded:/app/recorded
        environment:
            TZ: "Asia/Tokyo"
        depends_on:
            - mirakurun
            - mysql
        ports:
            - "8888:8888"
            - "8889:8889"
#         user: "1000:1000"
#         devices:
#             - /dev/dri:/dev/dri
        restart: always

volumes:
    mysql-db:
        driver: local

「docker-compose.yml」を上書き保存して、mirakurun-epgstationのインストールを継続します。

# docker起動
sudo docker-compose up -d

# recpt1の動作確認の為、mirakurunにログイン
docker exec -i -t docker-mirakurun-epgstation_mirakurun_1 bash

# recpt1コマンドを実行し、tsファイルが出来る事を確認する
# ※arib25を利用していないので、tsファイルは出来るが、このファイルは再生不可。
#  ここではtsファイルが出来る事のみ確認します。
cd /tmp
recpt1 --b25 --strip 27 20 test.ts

ls test.ts
rm test.ts # 確認出来たら不要なので削除します

# チャンネルスキャン
curl -X PUT "http://localhost:40772/api/config/channels/scan"

mirakurunにPLEXチューナーを登録する

PT3やPX-Q1UD、PX-S1UDではない場合、自動でチューナー登録されません。なので以下のように設定します。

sudo vi /usr/local/mirakurun/config/tuners.yml

tuners.ymlの内容は以下のように記載します。recpt1に–deviceオプションで/dev/px4video0等を指定することも可能ですが、そのコントロールをrecpt1に任せる場合には以下の記載で良いかと思います。

- name: adapter_px0
  types:
    - BS
    - CS
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px1
  types:
    - BS
    - CS
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px2
  types:
    - BS
    - CS
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px3
  types:
    - BS
    - CS
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px4
  types:
    - GR
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px5
  types:
    - GR
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px6
  types:
    - GR
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test
- name: adapter_px7
  types:
    - GR
  command: /usr/local/sbin/recpt1 <channel> - -
  decoder: arib-b25-stream-test

epgstationの管理画面に入り、録画出来る事を確認する

epgstationの管理画面は以下です。

http://<インストール対象サーバIP>:8888/

管理画面に入れた後でも、mirakurunの方で番組表を適宜取り込んでおり、それがepgstationにある程度の時間をかけて取り込まれてくるため、データが無ければ30分程度コーヒーブレイクしてから作業再開すると良いと思います。

セットアップ後の動作確認

サーバの場合、再起動した後に必要な全てのプロセスが立ち上がる必要があります。よって、再起動後に必要なプロセスが起動していることを確認します。

sudo reboot

管理画面へのアクセスしての動作確認

製品名アクセス先確認ポイント
mirakurunhttps://<インストール対象サーバIP>:40772/・ログ
・チューナー登録状況
epgstationhttp://<インストール対象サーバIP>:8888/・番組表が見えているか
・予約録画出来るか
・チューナー数分録画出来るか
・キーワード予約録画出来るか

以上で、mirakurunとepgstationによる環境構築完了です。今回、epgstation、mirakurun共にDocker上に構築しているため、‘Dockerの操作方法も記載しておきます。

【おまけ】Docker操作方法

mirakurunのセットアップ中に、Docker周りのトラブルシューティングや操作をする必要があるかもしれません。その際に利用するであろうコマンドを以下に記載します。

目的コマンド備考
Dockerプロセス一覧表示docker ps -aコンテナ名はこのコマンドで取得
Dockerイメージ一覧表示docker images
Dockerプロセス上にログインdocker exec -it <コンテナ名> bash仮想マシンの場合、仮想マシンにSSHログインするイメージです。
ファイルコピー(ホスト⇒コンテナ)docker cp <コピー元> <コンテナ名>:<コピー先>
ファイルコピー(コンテナ⇒ホスト)docker cp <コンテナ名>:<コピー元> <コピー先>
起動docker start <コンテナ名>
停止docker stop <コンテナ名>
mirakurunのトラブルシューティングで使いそうなDockerコマンド

【おまけ】電波調整方法

良く勘違いされているので書いておきます。TV信号は適正値があり、チューナーに入力する信号が高すぎる場合にはアッテネータを利用して減衰させます。-6dbや、-10db等ありますが、TV前で10db以上も減衰させるようなケースはあまりないはずで、せいぜい2~6dbのアッテネータかと思います。また、分配する事でも減衰する為、分配器をつけても減衰させることが出来ます。反対にチューナーに入力する信号が低い場合にはブースターで増幅します。ブースターの設置場所はPCの直前だとレベルが上がりすぎる為、一般的にはアンテナ直下(屋根裏やアンテナ近くにBOX設置、風呂場の天井裏等)に設置します。ブースターの場合、電源分離型を購入すると便利です。

参考にさせて頂いたページ

以下サイトを参考にさせていただきました。ありがとうございました。また、作者の方々には便利なソフトウェアを作成して頂いたことに深くお礼申し上げます。

最後に・・・

PLEXチューナーを利用し、かつrecpt1で録画するあたり、結構強引なセットアップ方法をしました。本当はもっとスマートな方法があるのかもしれませんが、試行錯誤した結果としてまとめています。

また、これは個人的な環境変化の感想ですが、今まで、録画データを保存する場所にはわざとHDD(RAID1)を利用していました。しかし、SSDの1TBが1万円前後で購入できることと、一度に8チャンネル録画した場合にHDDにパフォーマンス懸念がありましたので、「TBWの高いSSDであれば大丈夫」と割り切って録画先もSSDとしてみました。

本当はSeagateのfirecudaがTBWもダントツだったのでそれを買いたかったのですが、TBW600TBのSamsung 980 1TBよりも2倍は高かったため、今回は消費電力・発熱も低いsumsung製を購入して利用しております。

今まで、複数録画中にロードアベレージ20.x(ふつうは1.x近辺)とあまり見ないような数字を叩き出していたのが改善し、更にCMカット作業後の連結が一瞬で終わるのは圧巻でした。

タグ , , . ブックマークする パーマリンク.

epgstation,mirakurun共にdockerパッケージでPLEXチューナーを利用する への3件のフィードバック

  1. 匿名 の発言:

    有益な情報ありがとうございます。
    実際にセットアップして詰まったところをご報告致します。

    ■docker上でubuntu20.04コンパイル環境の準備
    ○これを実行するよりも前にdockerをインストールしておく必要がありました。
    ○apt installを実行する前にapt updateを行う必要がありました。

    ■vi docker-compose.yml
    「curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s」
    を実行した際にエラーが発生します。

    下記の通り対処

    vi docker-compose.yml
    ○下記行を削除
    – /dev/dvb:/dev/dvb

    ○記事通り追記
    – ./mirakurun/sbin:/usr/local/sbin

    – /dev/px4video0:/dev/px4video0

    – /dev/px4video0:/dev/px4video7

    ○setup.shを修正 下記二行をコメント
    #git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git
    #cp docker-compose-sample.yml docker-compose.yml

    ○再実行
    sh setup.sh

    ■mirakurunにPLEXチューナーを登録する

    tuners.ymlを編集する箇所ですが、一部誤っているようです。

    /opt/recpt1

    recpt1

  2. 匿名 の発言:

    あと、recpt1のコピーが足りていません。
    docker cp ubuntu20.04:usr/local/bin/recpt1 ./

    • lasas の発言:

      コメント・ご指摘ありがとうございます。
      ご指摘頂いた箇所について修正させて頂きました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください