家の掃除をしていたら以下のデバイスが見つかりました。以前、使えるかなと思って購入したのですが、あまり結局のところ必要性がなかったので放置していました。
使用していないRaspberryPi 3B
があるので、改めて設定を試してみることにしました。
PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0(以下チューナーユニット)
SCM ICカードリーダー/ライター B-CAS・住基カード対応 SCR3310(以下カードリーダー)
事前準備
今回はRaspberryPi 4B
が手元にあることで、用途を失ったRaspberryPi 3B
にRaspbian(2020-02-13)
を使用しています。
いまRaspberry Pi Imager
を使用すると新しいバージョンがインストールされると思いますが設定は大きくは変わらないかなと思います。(OS名が変わってしまったので本当に大丈夫なのかわかりませんが…)
まずはチューナーユニットとカードリーダーを接続します。事前に挿していても起動後に自動的に認識されます。 また、基本的には本体の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 …
を選択し、
I1 Change Locale
を選択してja_JP.UTF-8
を追加しデフォルトLocaleに設定
I2 Change Timezone
を選択して、Asiaエリアの中からTokyo
を選択します。
これで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】を押して終了します。
libarib25
をインストール
B-CASカードでデコードするライブラリであるlibarib25
をビルド・インストールします。このライブラリを使用して、続いてインストールするrecdvb
をmakeすることになります。ここではビルド用のパッケージも同時にインストールしています(cmake
、build-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
をビルド・インストールします。ビルド用のパッケージも同時にインストールしています(autoconf
、automake
、 libtool
)。
$ 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-server
がOnline
になっていれば正常に終了です。
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つのプロセスから構成されています。
EPGのGUIを表示するWebサーバのプロセス
まずは以下のようにWebサーバプロセスを起動してみます。
$ cd ~/Chinachu
$ ./chinachu service wui execute
起動したらhttp://【RaspberryPiのIPアドレス】:20772/
へアクセスすると以下のような画面になります。
mDNSでraspberrypi.local
でアクセスできる場合には
http://raspberrypi.local:20772/でアクセス可能です。
GUIの【番組表】のボタンをクリックするとEPGの表示が行われるのですが、EPGが表示されていないかもしれません。 その場合には【Ctrl+C】でプロセスを停止して、以下のコマンドで強制的にEPGを取得します。
$ ./chinachu update
その後再度、以下のようにプロセスを再起動します。
$ ./chinachu service wui execute
すると、【番組表】ボタンをクリックするとEPG情報が表示されるようになります。
録画の予約を行う場合には、EPG上の番組で右クリックを行うとメニューが表示されて、【予約】がでてきます。こちらを選べば録画予約のリストに追加されます。
動画をキャプチャする録画制御用のプロセス
先程のプロセスはEPGから番組を選択して録画予約を行うだけのものなので、ターミナルを新しく起動するなどして、録画を行うプロセスを以下のように起動します。
$ ./chinachu service operator execute
※このプロセスを起動しておかないといくら予約していても録画されませんので注意が必要です!
これで先程WEBインターフェイスで予約した番組が保存されます。保存ディレクトリは先程のconfig.json
で設定した場所に保存されます。
おわりに
一応、これで録画はできるようになりました。ただ、テレビを持っていなければ使ったかもしれないのですが、現状ほとんど使わないかな~。
ちなみに、この設定ではSDカード上に保存することになるので、出力先はNASなどに設定するほうがいいかなと思います。また、保存したm2tsファイルはサイズが大きいので、ffmpeg
などでトランスコードするように設定するとファイル容量を節約できるかなと思います(時間はかかりますが)。
また起動時には、サービスが自動起動するわけではないので、可能であれば自動的に立ち上がるように設定をしたほうが便利でしょう。
今回は以下を見ながら設定してみました。ありがとうございます。
【設定の参考】
【各種リンク】