はじめに
今般、Raspberry Pi 5(以下、RPi5と呼称)でBS4K放送を録画する方法が分かったため、ここに忘備録としてそれをメモする。
ハードウェアを準備する
今回、通称PT4Kと呼ばれるPCI Express 1x(以下、PCIe1xと呼称)接続のTVチューナーカードを使用する。そこでRPi5のPCIe1xの信号線を物理的な同規格のスロットへ変換するP02と呼ばれるインタフェース変換ボードを用いることとする。なお、P02のPCIe1xの電源供給は、RPi5がもつ5Vを供給するGPIOピンからで問題ない模様である。
以下のハードウェアをあらかじめ準備する。
- Windows PC
- Raspberry Pi 5(メモリ8GB)
- 27W Type-C 電源アダプタ
- MicroSDカード
- MicroSDカードリーダ/ライタ
- PCIe1x 変換モジュール: P02
- TVチューナカード: PT4K
- ACASカード
- カードリーダ: SCR3310 v2.0
ソフトウェアを準備する
以下の手順でソフトウェアをセットアップする。
MicroSDカードにRaspberry Pi OSをインストールする
このWebサイトからMicroSDカードにRaspberry Pi OSをインストールするためのツールであるRaspberry Pi Imagerをダウンロード、及びインストールする。
PCにMicroSDカードを挿入後、Raspberry Pi Imagerを起動する。以下の画面が表示されるため、Raspberry Pi 5を選択し、次へを選択する。
インストールするOSとしてRapsberry Pi OS (64bit)を選択し、次へを選択する。
インストール先のドライブを選択し、次へを選択する。
ホスト名を入力し、次へを選択する。
ロケール、タイムゾーン、及びキーボードのレイアウトを選択し、次へを選択する。
アカウントを設定後後、次へを選択する。
Wifiの接続情報を入力後、次へを選択する。
SSHの有効/無効を設定し、次へを選択する。
遠隔でRPi5を操作するRaspberry Pi Connectの有効/無効を設定し、次へを選択する。
設定後確認し、WRITEを選択する。
Rapsberry Pi OSを書き込むデバイスを確認後、I UNDERSTAND, ERASE AND WRITE(私は理解し、消去し、書込む)を選択する。
Raspberry Pi OSのインストールが完了すると以下の画面が表示されるため、FINISHを選択する。
RPi5にRaspberry Pi OSのインストールされたMicroSDカードを挿入し、モニタとRPi5をHDMIケーブルでつないだから、RPi5の電源を投入する。
電源投入後、モニタにデスクトップ画面が表示されることを確認できたら、以後はWindows PCからのSSH接続で操作することとする。これは、RPi5はサーバとして使用するため、必ずしもグラフィカルな操作は必要としないことによる。
Windows PC上でコマンドプロンプト画面を起動し、以下のコマンドでRPi5にSSHで接続できることを確認する。
$ ssh ユーザ名@RPi5のIPアドレス
OSをアップデートする
以下のコマンドでOSを最新の状態へ更新する。はじめにパッケージのリストを更新する。
$ sudo apt update
パッケージのリストにしたがってパッケージを更新する。
$ sudo apt upgrade
RPi5を再起動する。
$ sudo reboot
ブート時のオプションを設定する
RPi5でPT4Kを動作させるためには、/boot/firmware/config.txtに以下の設定を追加する必要がある。
[all] dtoverlay=pcie-32bit-dma
設定を反映するため、RPi5を再起動する。
$ sudo reboot
RPi5にPT4Kのドライバをインストールする
以下のサイトで公開されているLinux向けのPT4KのドライバをRPi5にインストールする。
ドライバのソースコードをクローンし、ビルドする。
$ git clone https://github.com/otya128/tbs6812_drv.git $ cd tbs6812_drv $ make -C "/lib/modules/$(uname -r)/build" "M=$(pwd)" tbs6812.ko cxd2857.ko
ドライバをビルド後、以下のコマンドでドライバをロードする。
$ sudo modprobe dvb-core $ sudo insmod ./cxd2857.ko $ sudo insmod ./tbs6812.ko
以下のコマンドでチューナーカードが認識されていることを確認する。
$ lspci $ 0000:01:00.0 Multimedia controller: TBS Technologies DVB Tuner PCIe Card
以下のコマンドでチューナーカードのドライバが正常にロードされていることを確認する。
$ dmesg | less [ 387.679312] cxd2857: loading out-of-tree module taints kernel. [ 394.849326] TBS6812 driver 0001:01:00.0: enabling device (0000 -> 0002) [ 394.849417] TBS6812 driver 0001:01:00.0: Turbosight TBS 6812 (Dual ISDB-T/S/S3) [ 394.850652] dvbdev: DVB: registering new adapter (TBSECP3 DVB Adapter) [ 394.961815] TBS6812 driver 0001:01:00.0: MAC address 00:22:ab:b2:1d:6c [ 394.962309] i2c i2c-15: Detect CXD2857 chip. [ 394.962317] TBS6812 driver 0001:01:00.0: DVB: registering adapter 0 frontend 0 (Turbosight TBS 6812 (Dual ISDB-T/S/S3))... [ 394.962420] dvbdev: DVB: registering new adapter (TBSECP3 DVB Adapter) [ 395.073820] TBS6812 driver 0001:01:00.0: MAC address 00:22:ab:b2:1d:6d [ 395.074316] i2c i2c-16: Detect CXD2857 chip. [ 395.074324] TBS6812 driver 0001:01:00.0: DVB: registering adapter 1 frontend 0 (Turbosight TBS 6812 (Dual ISDB-T/S/S3))... [ 395.074410] TBS6812 driver 0001:01:00.0: Turbosight TBS 6812 (Dual ISDB-T/S/S3): PCI 0001:01:00.0, IRQ 188, MMIO 0x1b80000000
以下のコマンドでチューナーカードがデバイスファイルとして認識されていることを確認する。
$ ls /dev/dvb $ adapter0 adapter1
ここまでで問題がなければ、RPi5の起動時に自動的にドライバがロードされる設定をする。
$ sudo cp /path/to/tbs6812_drv/cxd2857.ko /lib/modules/$(uname -r)/kernel/drivers/media/tuners/ $ sudo cp /path/to/tbs6812_drv/tbs6812.ko /lib/modules/$(uname -r)/kernel/drivers/media/tuners/ $ sudo depmod
以下の設定ファイルに以下を追加する。
- /etc/modules-load.d/modules.conf
cxd2857.ko tbs6812.ko
上記コマンドを実行後、RPi5を再起動し、下記のコマンドでチューナーカードのドライバが自動でロードされていることを確認する。
$ lsmod | grep cxd2857 $ lsmod | grep tbs6812
録画プログラムをインストールする
録画プログラムであるrecdvbをインストールする。はじめにrecdvbをビルドするために必要となるツールをインストールする。
$ sudo apt install autoconf automake
次にGitHubからソースコードをクローンする。
$ git clone https://github.com/otya128/recdvb.git
BS4Kのチャンネル選局に対応するため、pt1_dev.hを入れ替える。
$ cd recdvb $ mv pt1_dev.h pt1_dev.h.original $ wget https://raw.githubusercontent.com/jp-dtv-4k/DMirakurun/refs/heads/master/recdvb/pt1_dev.h
ビルドし、インストールする。
$ ./autogen.sh $ ./configure $ make $ sudo make install
チューナサーバをインストールする
PT4KをWeb APIで制御できるようにするチューナサーバMirakurunをインストールする。MirakurunはNode.js上で実行されるため、はじめに実行環境であるnode.jsをインストールする。
$ apt install npm
次にBS4K放送に対応するMirakurunをクローンする。
$ git clone https://github.com/otya128/MMirakurun.git
本リポジトリが参照している外部のリポジトリを取り込む。
$ git submodule update --init --recursive
Mirakurunの動作に必要な依存パッケージをインストールする。
$ npm install
ビルドする。
$ npm run build
当環境の場合、ビルド時に以下のようないくつかのエラーが発生した。
/home/pi/Downloads/MMirakurun/src/Mirakurun/TSFilter.ts:577:35 ERROR: 577:35 trailing-comma Unnecessary trailing comma /home/pi/Downloads/MMirakurun/src/Mirakurun/api/config/channels/scan.ts:320:39 ERROR: 320:39 trailing-comma Unnecessary trailing comma
本エラーは、不必要な場所に「,」(カンマ)が所在していることを表している。このため、TSFilter.tsの577行目にある以下の赤文字を削除する。
const channels: db.Channel[] = tsIdList.map(tsid => ({
type: channelType,
channel: `${tsid}`,
}));
同様にscan.tsの320行目にある以下の赤文字を削除する。
result.push({
name: c.channel,
type,
channel: c.channel,
});
Mirakurunの起動/停止を管理するためプロセスマネージャpm2をインストールし、pm2にMirakurunを登録する。
$ sudo npm install pm2 -g $ sudo pm2 startup $ sudo pm2 start processes.json $ sudo pm2 save
チューナの設定ファイルを設定する。以下の設定ファイルを以下のように設定する。このとき、空白文字に注意する。「--dev 0/1」と「<channel>」の間に空白文字が余分にあるとMirakurunが正常に動作しない模様である。
- /usr/local/etc/mirakurun/tuners.yml
- name: PT4K-0
types:
- BS4K
command: recdvb --dev 0 <channel> - -
isDisabled: false
- name: PT4K-1
types:
- BS4K
command: recdvb --dev 1 <channel> - -
isDisabled: false
チャンネルの設定ファイルを設定する。以下の設定ファイルを以下のように設定する。
- /usr/local/etc/mirakurun/channels.yml
- name: BS朝日 4K type: BS4K channel: BS07_0 isDisabled: false - name: BSテレ東4K type: BS4K channel: BS07_1 isDisabled: false - name: BS日テレ 4K type: BS4K channel: BS07_2 isDisabled: false - name: NHK BSP4K type: BS4K channel: BS17_0 isDisabled: false - name: BS-TBS 4K type: BS4K channel: BS17_1 isDisabled: false - name: BSフジ4K type: BS4K channel: BS17_2 isDisabled: false
チューナとチャンネルの各設定を反映するため、Mirakurunを再起動する。
sudo pm2 restart mirakurun-server
Windows PC上にあるEdgeなどのブラウザで「http://RPiのIPアドレス:40772」にアクセスして以下のような画面が表示されることを確認する。
予約録画アプリをインストールする
最後にEPGStationと呼ばれる予約録画アプリをインストールする。以下のコマンドでソースコードをクローンする。
$ git clone https://github.com/otya128/EPGStation.git
以下のコマンドでインストールする。
$ cd EPGStation $ npm run all-install $ npm run build
設定ファイルを設定する。
$ cp config/config.yml.template config/config.yml $ cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml $ cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml $ cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml $ cp config/enc.js.template config/enc.js
プロセスマネージャpm2にEPGStationを登録する。
$ sudo pm2 start dist/index.js --name "epgstation" $ sudo pm2 save
このとき、当環境の場合、以下のエラーが発生した。
$ sudo pm2 logs epgstation
1|epgstation | initialize error
1|epgstation | Error: setgid() disabled: io_uring may be enabled. See CVE-2024-22017.
1|epgstation | at process.setgid (node:internal/bootstrap/switches/does_own_process_state:88:22)
1|epgstation | at init (/home/pi/Downloads/EPGStation/dist/index.js:61:25)
1|epgstation | at /home/pi/Downloads/EPGStation/dist/index.js:143:15
1|epgstation | at Object.<anonymous> (/home/pi/Downloads/EPGStation/dist/index.js:154:3)
1|epgstation | at Module._compile (node:internal/modules/cjs/loader:1529:14)
1|epgstation | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
1|epgstation | at Module.load (node:internal/modules/cjs/loader:1275:32)
1|epgstation | at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
1|epgstation | at Object.<anonymous> (/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:32:23)
1|epgstation | at Module._compile (node:internal/modules/cjs/loader:1529:14) {
1|epgstation | code: 'ERR_INVALID_STATE'
1|epgstation | }
そこで、index.js(EPGStation/dist/)の以下のコードを削除する。
if (process.platform !== 'win32' && typeof process.getuid !== 'undefined' && process.getuid() === 0) {
// gid
if (typeof process.setgid !== 'undefined') {
if (typeof config.gid === 'string' || typeof config.gid === 'number') {
process.setgid(config.gid);
}
else {
process.setgid('video');
}
}
// uid
if (typeof process.setuid !== 'undefined') {
if (typeof config.uid === 'string' || typeof config.uid === 'number') {
process.setuid(config.uid);
}
}
}
EPGStationを再起動する。
$ sudo pm2 restart epgstation
Windows PCのEdgeなどのブラウザから「http://RPi5のIPアドレス:8888」にアクセスして以下のような番組表を見れることを確認する。













