ラズパイでテレビチューナー自作
我が家は築40年ほどのボロ借家 (借りてるのに失礼)。猫飼っていると新しい賃貸に住めないので仕方ない話です。それはそれと、古いからか備え付けの地デジアンテナの感度が非常に悪いので室内据え置き型の地デジアンテナとBSCS/4Kアンテナを自分で設置しています。スカイツリーの強電界エリアなので何とかなっていますが家の中でテレビを増やすのには都合が悪い。いっそのこと地デジと衛星放送をラズパイで処理させて家の中ではWiFiでリアルタイムで見れるようにするとします。テレビはリビングだけで十分、家の中どこでもパソコンやスマホで見れるようになります。
リアルタイム配信+録画ファイルを家庭内LANで共有がゴールです。OpenMediaVaultでラズパイをNAS化、Mirakurun+EPGStationでテレビ化の構成です。EPGStationのほかにChinachuというものもありますが誰でも初見で使えそうなEPGStationを採用しています。
Raspberry Pi OS Lite (32bit) のインストール
この後にインストールするOpenMediaVaultはラズパイではCUI (Lite版) が推奨なのでLiteの方をインストールします。起動速度も速いしテレビチューナーとNASの運用ならGUIはいらないので不便にはなりません。おなじみRaspberry Pi Imagerで指定するだけ。
上の写真はちょっと昔の。デバイスがRaspberry pi 4の場合はRasperry Pi OS (other) ⇒ Raspberry Pi OS Lite (32-bit)を選択してください。
起動ディスクはSDカード、録画先は外付けHDDでの運用です。PowerShell経由でssh接続します。下の記事のVNC接続の手前まで完了すればokです。
SSH接続ができたら以下のコマンドを実行しておきます。
//最初のおまじない
$ sudo apt update
$ sudo apt full-upgrade -y
// 自分用、まとめて実行
$ sudo apt update && sudo apt full-upgrade -y
OpenMediaVaultのインストール
ラズパイにNASの機能を持たせるためにOMVをインストールします。
wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash
(参考)2023年より前は上記コマンドではeth0が使用不可になり無線LAN接続がきれるという事態になっていました。その回避コマンドは以下です。
$ wget https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install
$ chmod +x install
$ sudo ./install -n
//自分用、まとめて実行
$ wget https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install && chmod +x install && sudo ./install -n
OMVのインストールはちょっと時間がかかります。終わったら外付けHDDを接続して、他のパソコンより“http://ラズパイのIPアドレス/”でOMVにアクセスします。
- ユーザー名:admin
- パスワード:openmediavault
ブラウザより設定を進めていきます。
- サービス ⇒ SMB/CIFS ⇒ 設定 ⇒ 有効 ⇒ 保存 ⇒ 適用
- ストレージ ⇒ ディスク ⇒ 外付けHDDがあることの確認
- ストレージ ⇒ ファイルシステム ⇒ 再生ボタンマークより外付けHDDをマウント ⇒ 適用
- ストレージ ⇒ 共有フォルダ ⇒ +より共有フォルダ作成 ⇒ パーミッションは「みんな:読み/書き」⇒ 保存 ⇒ 適用
- サービス ⇒ SMB/CIFS ⇒ 共有 ⇒ 有効 ⇒ フォルダ指定とゲストに許可 ⇒ 保存 ⇒ 適用
共有フォルダの名前は我が家ではtv/にしました。もし3で目当てのHDDがマウントできない場合は一度ストレージ ⇒ ディスクの消しゴムマークからワイプしてみてください。マウント済みのHDDを削除する場合は共有フォルダ無効化 ⇒ 共有フォルダ削除 ⇒ マウント解除しないとできないのでご注意。
家庭内LANでの利用を想定しているのでパーミッションはみんなでゲストに許可しています。こうしておくとAndroidでSMBsync使うときに楽です。我が家では毎日5時に録画フォルダとタブレットを同期して録画を持ち出せるようにしています。非常に便利◎
チューナードライバのインストール
我が家はPLEXのPX-W3U4を使用しています。地デジと衛星放送2番組ずつ見れる録れるUSB接続のものです。お持ちの機種で調べればドライバのインストール方法が出てくるので適宜置き換えてください。
最初にエラー回避のためにブートファイルを変更します。
$ sudo nano /boot/firmware/config.txt
//[all]の上に2行追記
[pi4]
arm_64bit=0
//変更反映のために再起動
$ sudo reboot
nanoで開くので、Ctrl+sで上書き保存、Ctrl+xで終了です。再起動してSSH接続完了したらちゃちゃっと進めていきます。
// このステップで必要なパッケージ
$ sudo apt install -y git pcscd libpcsclite-dev libccid pcsc-tools
// kernel-headersの更新を反映させる
$ sudo reboot
// チューナードライバ
$ git clone https://github.com/nns779/px4_drv.git
// ファームウェアのインストール
$ cd px4_drv/fwtool
$ make
$ curl -O http://plex-net.co.jp/plex/pxw3u4/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/
$ cd ../
// チューナードライバのインストール
$ cd driver
// カーネルのアップグレードに対応
$ sudo nano ptx_chrdev.c
// 中盤の以下の文章から"THIS MODULE, "を削除する。(name)とする。
ctx->class = class_create(THIS_MODULE, name);
// インストールの継続
$ make
$ sudo make install
$ sudo modprobe px4_drv
// ドライバが正しくインストールされているかの確認
$ lsmod | grep -e ^px4_drv
// 自分用、まとめて実行
$ sudo apt install -y git pcscd libpcsclite-dev libccid pcsc-tools
$ sudo reboot
$ git clone https://github.com/nns779/px4_drv.git && cd px4_drv/fwtool
$ make
$ curl -O http://plex-net.co.jp/plex/pxw3u4/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/
$ cd ../ && cd driver && sudo nano ptx_chrdev.c
// 中盤の以下の文章から"THIS MODULE, "を削除する。(name)とする。
ctx->class = class_create(THIS_MODULE, name);
$ make
$ sudo make install
$ sudo modprobe px4_drv
$ lsmod | grep -e ^px4_drv
最後のコマンドで「px4_drv 131072 0」と表示されればokです。真ん中の数字は違っていてもokです。カードリーダーを接続して、
$ pcsc_scan
を実行します。最後の行に「Japanese Chijou Digital B-CAS Card (pay TV)」と表示されたらokです。Ctrl+Cで終了して再起動します。
// 再起動
$ sudo reboot
// チューナーを接続
$ ls /dev/px4video*
最後のコマンドでPX-W3U4なら「/dev/px4video0 /dev/px4video1 /dev/px4video2 /dev/px4video3」と表示されればokです。W3U4は4つチューナーがあるので0~3の4つ表示されます。
復号と録画のツールをインストール
ここまでくれば受信して読み込む準備ができてます。お次は受信した信号を変換して録画するためのソフトをインストールしていきます。
// このステップで必要なパッケージ
$ sudo apt install -y cmake autoconf automake ffmpeg
// 地デジ・BS・CSデータを復号化するlibarib25のインストール
$ git clone https://github.com/stz2012/libarib25.git
$ cd ./libarib25/cmake
$ cmake ..
$ make
$ sudo make install
// 録画コマンドrecpt1 (stz2012版) のインストール
$ git clone https://github.com/stz2012/recpt1.git
$ cd recpt1/recpt1
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install
// 自分用、まとめて実行
$ sudo apt install -y cmake autoconf automake ffmpeg
$ git clone https://github.com/stz2012/libarib25.git && cd ./libarib25/cmake && cmake .. && make && sudo make install
$ git clone https://github.com/stz2012/recpt1.git && cd recpt1/recpt1
$ ./autogen.sh
$ ./configure --enable-b25
$ make && sudo make install
Mirakurunのインストール
インターフェースとなるEPGStationの要求を処理してチューナーを制御してくれるMirakurunというソフトをインストールします。2024.01最新のMirakurun 3.9.0-rc.4で推奨されているNode.jsのインストール方法だとエラーになるので公式パッケージでNode.js をインストールします。指定せずともv18.13.0だったのでヨシとします。また、Mirakurunをバージョン指定なしでインストールするとこの後のEPGStationでなぜかエラーになるのでMirakurun 3.9.0-rc.4を明示的に指定しています。
//Mirakurun推奨のNode.jsインストール方法
$ cd && curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
$ sudo apt-get install -y
$ sudo apt install -y nodejs npm
$ sudo node -v
// PM2 (プロセスマネージャー) のインストール
$ sudo npm install pm2 -g
// Mirakurunのインストール
$ sudo npm install mirakurun@3.9.0-rc.4 -g --unsafe-perm --foreground-scripts --production
// rivarunのインストール
$ sudo npm install rivarun -g
// デコーダーのインストール
$ sudo npm install arib-b25-stream-test -g --unsafe-perm
// チューナーの設定ファイルを開く
$ sudo nano /usr/local/etc/mirakurun/tuners.yml
//自分用、まとめて実行
$ cd && curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - && sudo apt-get install -y nodejs
$ sudo npm install pm2 -g && sudo npm install mirakurun@3.9.0-rc.4 -g --unsafe-perm --foreground-scripts --production
$ sudo npm install rivarun -g
$ sudo npm install arib-b25-stream-test -g --unsafe-perm
$ sudo nano /usr/local/etc/mirakurun/tuners.yml
デフォルトではPT3-S1に設定が入っているかと思います。PX-W3U4の場合は以下を追記もしくは上書きします。
- name: PX4-S1
types:
- BS
- CS
command: recpt1 --device /dev/px4video0 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-S2
types:
- BS
- CS
command: recpt1 --device /dev/px4video1 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-T1
types:
- GR
command: recpt1 --device /dev/px4video2 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-T2
types:
- GR
command: recpt1 --device /dev/px4video3 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
この文章のスペースの置き方にはルールがあります。文頭スペースの数が違うとこの後のチャンネルスキャンで
curl: (7) Failed to connect to localhost port 40772: Connection refused
とポートはじかれます。このエラーに2日くらいハマったので残しておきます。
Mirakurunは他のパソコンより“ラズパイのIPアドレス:40772/”でWebUIにアクセスできます。Mirakurunを再起動して以下のコマンドを進めていきます。途中のチャンネルスキャンは15分ほどかかります。すべてのチャンネルが表示されなくてものちのちMirakurunが勝手にスキャンするので気にせず進みます。
// Mirakurunを再起動
$ sudo mirakurun restart
// チャンネルスキャン
$ sudo curl -X PUT "ラズパイのIPアドレス:40772/api/config/channels/scan"
// Mirakurunを再起動
$ sudo mirakurun restart
// チャンネルスキャンの結果を確認
$ sudo rivarun --list | sed 's/},/},\n/g'
// pm2-logrotateをインストール
$ pm2 install pm2-logrotate
チャンネルスキャンの結果はPowerShellだと文字化けしますが気にせず進みます。ちなみに私の場合チャンネルスキャンでエラーやら見つからないだかでうまくいかないのですが正常に使えてます。
EGPStationのインストール
Mirakurunと連携して録画等の操作を可能にするEPGStationをインストールします。やや時間がかかるので気長に待ちます。
$ cd
$ git clone https://github.com/l3tnun/EPGStation.git
$ cd EPGStation
$ npm run all-install
$ npm run build
//設定ファイルのコピー
$ cp config/config.yml.template config/config.yml
$ cp config/enc.js.template config/enc.js
$ cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml
$ cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml
$ cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml
//設定ファイルの編集
$ nano config/config.yml
//自分用、まとめて実行
$ cd && git clone https://github.com/l3tnun/EPGStation.git && cd EPGStation
$ npm run all-install
$ npm run build
$ cp config/config.yml.template config/config.yml && cp config/enc.js.template config/enc.js && cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml && cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml && cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml && nano config/config.yml
設定ファイルをラズパイの環境に合わせて変えてあげます。ご自身の環境に合わせて変えてください。録画ファイルの保存先はOMVのストレージ ⇒ 共有フォルダに表示される絶対パスを張り付ければokです。recordedとその下のthumbnailのpathも変えるようにします。
// 録画ファイルのファイル名を設定(半角タイトル,年月日)
recordedFormat: '%HALF_WIDTH_TITLE% - %YEAR%-%MONTH%-%DAY%'
// ffmpegのパスを変更
ffmpeg: '/usr/bin/ffmpeg'
// ffprobeのパスを変更
ffprobe: '/usr/bin/ffprobe'
// pathで録画ファイルの保存先を設定
recorded:
- name: Recorded (任意に変更ok)
path: '絶対パスを張り付け'
thumbnail: '絶対パスを張り付け/thumbnail'
必要なパッケージのインストールはすべて終わったので、途中でインストールしたpm2で自動起動の設定をしてあげます。
$ sudo pm2 startup
$ sudo pm2 start dist/index.js --name "epgstation"
$ sudo pm2 save
// 自分用、まとめて実行
$ sudo pm2 startup && sudo pm2 start dist/index.js --name "epgstation" && sudo pm2 save
動作確認
再起動して必要なソフトがちゃんと起動できているかを確認します。
$ sudo reboot
$ sudo pm2 list
我が家ではこんな表示になりました。
EPGStationがUIになるので“http://ラズパイのIPアドレス:8888/”で番組表などにアクセスできたら成功です。セットアップ終わって数時間は表示がまったくなかったり少ないかもしれませんが放送電波や情報取得中です。3時間くらい気長に待ってチャンネルが準備できていれば完成です。何も映らないからって失敗したわけじゃないですよ。
細かい設定に続きます。
コメント
[…] 【ラズパイ】Raspberry Pi 4でNASとテレビ録画サーバーを自作 […]