【RaspberryPi】PX-S1UDを使用する

家の掃除をしていたら以下のデバイスが見つかりました。以前、使えるかなと思って購入したのですが、あまり結局のところ必要性がなかったので放置していました。 使用していないRaspberryPi 3Bがあるので、改めて設定を試してみることにしました。

f:id:ueponx:20200609013840p:plain

PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0(以下チューナーユニット)

www.plex-net.co.jp

SCM ICカードリーダー/ライター B-CAS住基カード対応 SCR3310(以下カードリーダー)

www.ntt.com

事前準備

今回はRaspberryPi 4Bが手元にあることで、用途を失ったRaspberryPi 3BRaspbian(2020-02-13)を使用しています。 いまRaspberry Pi Imagerを使用すると新しいバージョンがインストールされると思いますが設定は大きくは変わらないかなと思います。(OS名が変わってしまったので本当に大丈夫なのかわかりませんが…)

f:id:ueponx:20200528011551p:plain

まずはチューナーユニットとカードリーダーを接続します。事前に挿していても起動後に自動的に認識されます。 また、基本的には本体のUSBコネクタへそのまま接続しても大丈夫ですが、接続するUSBデバイスが多いので セルフパワーのUSBハブ経由で接続し、チューナーユニット以外をHUB経由で接続し、電源の安定化を図ったほうがいいかなと思います。

認識されるとlsusbコマンドでは以下のように認識されているのがわかります。

$ lsusb
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 005: ID 3275:0080 VidzMedia Pte Ltd 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Genesys Logic, Inc. HubがセルフパワーのUSBハブ、SCM Microsystems, Inc.がカードリーダー、VidzMedia Pte Ltdがチューナーユニットとなります。

Raspberry Piタイムゾーン設定

タイムゾーンの設定は忘れてもいいのかなと思うところですが(気分はよくありませんが)、後ほどEPG(電子番組表)を使用するので、タイムゾーン設定をTokyoにしておきます。そうしないとEPGの表示がおかしくなります。必ず設定しておきましょう。ロケールも同じプログラムで設定できるので同時に設定しておきます。

$ sudo raspi-config

raspi-configを起動し、4 Localization Options …を選択し、

f:id:ueponx:20200608232430p:plain

I1 Change Localeを選択してja_JP.UTF-8を追加しデフォルトLocaleに設定

f:id:ueponx:20200608232704p:plain

I2 Change Timezoneを選択して、Asiaエリアの中からTokyoを選択します。

f:id:ueponx:20200608233115p:plain

これでOSの事前設定ができました。

チューナードライバのインストール

チューナーユニットのドライバは以下のようにインストールします。

$ 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/x64/amd64/isdbt_rio.inp /lib/firmware/

カードリーダードライバのインストール

カードリーダードライバは以下のようにインストールします。

$ sudo apt install -y pcscd libpcsclite-dev libccid pcsc-tools

ドライバをインストールしたら以下のコマンドでカードの情報を読み取ります。

$ pcsc_scan

実行後にJapanese Chijou Digital B-CAS Card (pay TV)が表示したら、無事に認識されています。 そのままでは終了しないので【Ctrl+C】を押して終了します。

f:id:ueponx:20200608234404p:plain

libarib25をインストール

B-CASカードでデコードするライブラリであるlibarib25をビルド・インストールします。このライブラリを使用して、続いてインストールするrecdvbをmakeすることになります。ここではビルド用のパッケージも同時にインストールしています(cmakebuild-essential)。

$ sudo apt install -y cmake  build-essential 
$ git clone https://github.com/stz2012/libarib25
$ cd libarib25
$ cmake .
$ make
$ sudo make install
$ cd ../

recdvbインストール

続いて、録画プログラムになるrecdvbをビルド・インストールします。ビルド用のパッケージも同時にインストールしています(autoconfautomakelibtool)。

$ sudo apt install -y autoconf automake libtool
$ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz
$ tar xvzf recdvb-1.3.2.tgz
$ cd recdvb-1.3.2
$ ./autogen.sh
$ ./configure --enable-b25
# 字幕やデータ放送のデータが必要な場合は
$ EXTRA_SID=1 make
# そうでない場合
$ make
$ sudo make install

ここまでの作業が終わったら、一度再起動します。

$ sudo reboot

再起動が終わったら、録画を行ってみます。 以下のコマンドでは物理チャンネル番号を指定して、30秒間の録画を行ってみます。

$ recdvb --b25 --strip 【物理チャンネル番号】30 test.m2ts

物理チャンネルはリモコンボタンの数字とは異なります。以下の資料から地域にあった番号を選んでください。

https://www.maspro.co.jp/contact/channel.pdf

録画したm2tsファイルはvlcなどで再生することができます。もし、真っ黒のままの場合はビルド時にlibarib25のリンクがうまく行っていないと思います。再度手順を戻って作業を行ってください。

Mirakurunのインストール

Mirakurunをインストールするにはnode.jsが必要になります。また、Mirakurunのサービス化を行うためpm2も導入します。

node.jsのインストール

node.jsはバージョン10.xをインストールすることにします。node.jsのバージョン管理を行うnなどを導入して、現在のLTSバージョンを入れてもいいかなとは思います。

$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install nodejs

インストールされたバージョンは以下のようになっていました。

~$ nodejs -v
v10.20.1

pm2のインストール

続いてプロセスをサービスのように扱うことのできるpm2を導入します。

$ sudo npm install pm2 -g
$ sudo pm2 startup

これでmirakurunを導入する準備が整いました。

mirakurunのインストール

事前準備が終わったのでmirakurunのインストールを行います。

$ sudo npm install mirakurun -g --unsafe-perm --production

終了時に以下のようにmirakurun-serverOnlineになっていれば正常に終了です。

f:id:ueponx:20200528000811p:plain

mirakurunのコンフィグファイルを編集

チューナーデバイスのコンフィグファイルを編集します。今回追加するのはPX-S1UD-1のエントリとなります。

$ sudo mirakurun config tuners

ファイルの末尾に以下を追加します。コマンドで開かれるエディタはEDITOR環境変数で指定する事もできるようです。指定していなければ、viが起動されているようでした。もし、vimなどの他のエディタで編集を行いたい場合には$ sudo vim /usr/local/etc/mirakurun/tuners.ymlとしても同じように編集が行えます。

- name: PX-S1UD-1
  types:
    - GR
  command: recdvb --b25 --strip --dev 0 <channel> - -
  isDisabled: false

チャンネル情報取得

先程のチューナー情報を追記したら、一度mirakrunを再起動します。

$ sudo mirakurun restart

【重要】再起動が終わったら10分程度待ちます。待機せずに以下のコマンドを行うと設定が正しくてもうまくチャンネル情報が取得できません。ここで自分は4日ぐらい引っかかりました。EPGの周期(H-EIT scheduleの周期)は10分程度だということにも起因しているのかなと思います。

10分ぐらい経過したら以下のコマンドを実行してチャンネル情報を取得します。この処理はかなり時間がかかります。

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

無事にチャンネル情報が取得できたらmirakrunを再起動します。

$ sudo mirakurun restart

これでmirakurunの設定は完了となります。

chinachuをインストール

EPGをWeb上から選択して予約・録画を行うchinachuを導入します。

$ cd ~
$ git clone git://github.com/kanreisa/Chinachu.git 
$ cd Chinachu
$ ./chinachu installer
> 1. Auto を選択

これでchinachuのインストールは完了となります。

録画ルールの初期ファイルを作成

デフォルトでも作成されるようですが、今回は空のルールファイルを作成しておきます。

$ echo "[]" > rules.json

録画設定ファイルの作成

録画設定のファイルをサンプルからコピーして、

$ cp config.sample.json config.json

編集を行います。

$ vi config.json

編集の項目は以下になります。

  • "uid": "pi" … 実行するユーザー名(ユーザーはvideoグループに所属していれば良い)
  • "recordedDir" : "/mnt/hdd1/recorded/",  … キャプチャした番組を保存するディレクト
  • "temporaryDir" : "/mnt/hdd1/recordtmp/", … 作業用の ディレクト
  • "recordedFormat": "[<date:yymmdd-HHMM>][<channel-name>]<title> <subtitle> <episode:2>.m2ts", … キャプチャした番組のファイル名

config.json

{
  "uid": "pi",
  "gid": "video",
  "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",

  "recordedDir" : "./recorded/",

  "vaapiEnabled": false,
  "vaapiDevice": "/dev/dri/renderD128",

  "excludeServices": [
    3273701416,
    3232728088,
    3273901183,
    3274201456,
    3239123992,
    3239123993,
    3273601408
  ],

  "serviceOrder": [
    3273601024,
    3273601025,
    3273701032,
    3273701033,
    3273701034
  ],

  "wuiUsers": [
    "chinachu:yoshikawa"
  ],
  "wuiAllowCountries": ["JP"],

  "wuiPort": null,
  "wuiHost": "0.0.0.0",
  "wuiTlsKeyPath": null,
  "wuiTlsCertPath": null,
  "wuiTlsRequestCert": false,
  "wuiTlsRejectUnauthorized": true,
  "wuiTlsCaPath": null,
  "wuiOpenServer": true,
  "wuiOpenPort": 20772,
  "wuiXFF": false,
  "wuiMdnsAdvertisement": true,

  "recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<channel-name>]<title>.m2ts",
  "storageLowSpaceThresholdMB": 3000,
  "storageLowSpaceAction": "remove",
  "storageLowSpaceNotifyTo": null,
  "storageLowSpaceCommand": ""
}

ここまで設定できたらプロセスを起動をすることになります。

chinachuは2つのプロセスから構成されています。

  • 1つ目はEPGGUIを表示するWebサーバのプロセス
  • 2つ目は動画をキャプチャする録画制御用のプロセスとなります。

EPGGUIを表示するWebサーバのプロセス

まずは以下のようにWebサーバプロセスを起動してみます。

$ cd ~/Chinachu
$ ./chinachu service wui execute

f:id:ueponx:20200609002912p:plain

起動したらhttp://【RaspberryPiのIPアドレス】:20772/へアクセスすると以下のような画面になります。 mDNSでraspberrypi.localでアクセスできる場合には http://raspberrypi.local:20772/でアクセス可能です。

f:id:ueponx:20200609003057p:plain

GUIの【番組表】のボタンをクリックするとEPGの表示が行われるのですが、EPGが表示されていないかもしれません。 その場合には【Ctrl+C】でプロセスを停止して、以下のコマンドで強制的にEPGを取得します。

$ ./chinachu update

その後再度、以下のようにプロセスを再起動します。

$ ./chinachu service wui execute

すると、【番組表】ボタンをクリックするとEPG情報が表示されるようになります。

f:id:ueponx:20200527235747p:plain

録画の予約を行う場合には、EPG上の番組で右クリックを行うとメニューが表示されて、【予約】がでてきます。こちらを選べば録画予約のリストに追加されます。

f:id:ueponx:20200609012516p:plain

動画をキャプチャする録画制御用のプロセス

先程のプロセスはEPGから番組を選択して録画予約を行うだけのものなので、ターミナルを新しく起動するなどして、録画を行うプロセスを以下のように起動します。

$ ./chinachu service operator execute

※このプロセスを起動しておかないといくら予約していても録画されませんので注意が必要です!

これで先程WEBインターフェイスで予約した番組が保存されます。保存ディレクトリは先程のconfig.jsonで設定した場所に保存されます。

おわりに

一応、これで録画はできるようになりました。ただ、テレビを持っていなければ使ったかもしれないのですが、現状ほとんど使わないかな~。

ちなみに、この設定ではSDカード上に保存することになるので、出力先はNASなどに設定するほうがいいかなと思います。また、保存したm2tsファイルはサイズが大きいので、ffmpegなどでトランスコードするように設定するとファイル容量を節約できるかなと思います(時間はかかりますが)。

また起動時には、サービスが自動起動するわけではないので、可能であれば自動的に立ち上がるように設定をしたほうが便利でしょう。

今回は以下を見ながら設定してみました。ありがとうございます。

【設定の参考】

qiita.com

【各種リンク】

github.com

www13.plala.or.jp

github.com

github.com

/* -----codeの行番号----- */