ラズパイでTV録画&視聴マシンを作る
目次
いつのまにかできるようになっていた
テレビの録画を実現したい。
ラズパイでできるらしい。
かなり昔にやろうとして、HDDへのスループットが問題でやめた記憶がある。
今やラズパイでできる時代になってしまったようだ。
情報を追ってないといつの間にか置き去りにされてしまう、まるでITの浦島効果。
しかもTVに接続したら録画したものを再生できたりするので、一石二鳥。
てことで、やってみる。
用意するもの
ラズパイが既に余っているものがあるので、それ以外で調達したもの。
- PLEX USB接続ドングル型地上デジタルTVチューナー
- Gemalto ジェムアルト ICカードリーダ・ライタ IDBridge CT30
- サンディスク microSD 32GB SDSQUA4-032G-EPK
- 何でもいいからNASを1台
- BCASカード
あとは、Raspberry Pi 4Bね。
最初は外付けHDDを使っていたのだが、やはりスループットの問題に直面してしまった。
書き込みが追いつかなくなり、30分番組が5分の映像しか取れてなくて、残りは何もない映像で終わった事がある。
なので、負担を少しでも減らすためcifs経由でNASに保存することにした。
構築
さて、どうやって構築するか。
実際に試行錯誤した内容を書いて見ると、LibreELECのラズパイイメージを使ったけど、なんかうまく行かなかった。
というよりも上手くいかなかったときの調査が正直面倒だった。
メンテナンス性を上げたいと思うとやはりラズパイOS入れて、作った方が精神衛生上よいし、直ぐにカスタマイズもしやすい。
そこで別の手を探したところ、今のところうまく行ったのは、Raspberry Pi OSに、Mirakurun - A Modern DVR Tuner Server for Japanese TV.、EPGStationとKodi: Open Source Home Theater Softwareのコンビ。
最初に言っておくと、この方式のVCRは個人利用ではかなり優秀だと思っている。
ちょっとクセがあるのでそこは手間だが、分かってしまえば楽。
Setting Up
Raspberry Pi OSの構築は割愛。
SDカードへの書き込みはImagerを使えば簡単にできる。
最近はヘッドレス用のオプション設定もできるのでさらに便利になっている。
ここでは64bit版Raspberry Pi OSをインストールする。
現時点で11.7 (bullseye)。
Install Firmware
スマートカードリーダーは普通に認識するはず。
問題は地デジチューナー。
これはここからファームウェアをダウンロードして、以下のように入れていく。
$ cd /tmp
$ 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 reboot
再起動後に認識するか確認する。
$ dmesg | grep PX-S1UD
[ 2.332236] usb 1-1.1: Product: PX-S1UD Digital TV Tuner
$
こんな感じで表示されているので、多分大丈夫。
Install Docker
次にGithubに公開されているDocker Imageを使用していくので、Dockerを入れていく。
こんな感じ。
$ sudo apt-get update && sudo apt-get -y upgrade
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh
$ sudo docker -v
Docker version 20.10.5+dfsg1, build 55c4c88
$ sudo docker-compose -v
docker-compose version 1.25.0, build unknown
$
インストール成功。
ただ、このままだといちいちsudoしないといけないので、dockerグループに自分自身を参加させる。
$ sudo usermod -aG docker $(whoami)
$ docker -v
Docker version 20.10.5+dfsg1, build 55c4c88
$
mount NAS
次。
さっきも言ったけど、NASの共有フォルダをマウントする。
事前にどっかのcifssサーバにrecordedという共有フォルダを作っておく。
私の環境だと、古いLinkstationがあったのでそれを使っている。
$ sudo vi /etc/fstab
//[IPADDRESS of NAS]/recorded /data cifs vers=1.0,rw,file_mode=0777,dir_mode=0777,noperm,credentials=/etc/samba/credentials 0 0
$ sudo mount /data
$
私のNASはSAMBAのバージョンが古いので、versオプションを入れている。
あとfstabにログイン情報は残したくないので、/etc/samba/credentialsに保存している。
これでやっと準備ができたので、次が本題。
Install Mirakurun and EPGStation
さてここからが本題。
DVR Tuner ServerのMirakurunで地デジチューナサーバを立てて、EPGStationで録画管理をする感じ。
DBにはMariaDBではなくalpine-mariadbを使用する。
$ cd
$ curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s
$ cd docker-mirakurun-epgstation
$ cp docker-compose-sample.yml docker-compose.yml
$ vi docker-compose.yml
ごにょごにょ
$ diff docker-compose-sample.yml docker-compose.yml
27c27,28
< image: mariadb:10.5
---
> #image: mariadb:10.5
> image: yobasystems/alpine-mariadb
54c55
< - ./recorded:/app/recorded
---
> - /data/recorded:/app/recorded
$
インストール準備ができたので、構築していく。
といっても大したことはしていない。
$ docker-compose up -d
$
最初にかなり時間がかかるので、コーヒーすすってしばらく待つ。
起動に成功したら、ブラウザから以下のアドレスにアクセスしてみる。
http://[IPADDRESS of Raspberry Pi]:40772/
Mirakurunが起動しているのを確認する。
下にアクティビティが表示されているので、見てみるとなんかチャンネルを探しているようだ。
ただこれがかなり時間がかかる。
しかも地方仕様になっていない??のか、TOKYO MXとか名前も違う。
なので、ここをみてConfigからチャンネルを一つずつ変更していった。
変更終わったら、右上のRestartボタンを押して再起動する。
そしたらまたチャンネルスキャンが始まる。
このチャンネルスキャン、かなり大事でEPG情報も取得しているようで、このあとかなりお世話になることになる。
で、結局これも結構待たされる。
終わったら、EPGStationを開いてみる。
http://[IPADDRESS of Raspberry Pi]:8888/
上のURLにアクセスして表示できればOK。
番組表も表示されることも確認。
動作確認
Record TV prog from EPG
番組表から予約録画してみる。
問題なければ、NASの共有フォルダにファイルが作成されるはず。
Replay TV prog
録画番組を見てみる。
ラズパイにKodiをインストールする。
KodiはマルチメディアプレーヤでTVで表示されることを前提に作られている。
$ sudo apt-get install kodi
$ kodi &
$ disown %1
$
ラズパイとTVをHDMI接続していたら、Kodiの画面が表示されるはず。
HDMIのよいところはTVのリモコンでも操作ができること。
すごい便利。
Kodiの設定画面から/data/recordedのディレクトリを視聴するフォルダとして登録しておけば、再生もできる。
正直かなり便利。
その昔、PS3 + Torne + Nasneみたいな環境を彷彿とさせる胸熱な環境である。
Kodiのおかげで、日々撮っているうちのモルモットのかわいい動画を大きな画面で見れる。
Life is not All Good
ってここまで便利でよいところばかり紹介したが、そんないいことばかりでもない。
Doesn’t work
突然動かなくなる。正直かなりクリティカル。
安定性でいえば、1ヶ月もたなくて3週間毎に再起動しているREGZAよりも圧倒的に不安定。
毎週再起動をしておかなくてはいけないレベル。
不安定になると予約録画がまったく動かない。
楽しみしていた深夜番組が翌朝確認したら録画されてなくて愕然とする。
こうなると再起動。
また、EPGも更新されないときがあるので、これは先述のチャンネルスキャンが必要になる。
チャンネルスキャンはコマンドで実行する必要がある。
$ cd
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"
$ cd docker-mirakurun-epgstation
$ docker-compose restart
$
cronに設定したらよいのかもしれない。
そしてここからがこの環境特有のことなのだが、再起動したらcifsマウントされる前に、dockerが起動してしまうので、/dataがローカルfsとして認識されてしまう。
しかもそのあとcifsマウントしようとして失敗する。
そこで、systemdの順番でなんとか調整しようとしたけど、よく分からなかったので、ちょっと荒業をやってみる。
smbmountcheck.sh
#!/bin/bash
MNTP=/data
REMOTE=[IPADDRESS of NAS]
REGEX='192\.168\.DDD\.DDD.*\/data'
BASEDIR=/home/pi/docker-mirakurun-epgstation
function _echo () {
message="${1}"
echo "${message}"
logger -t $(basename $0) "${message}"
}
ret1=$(mount |grep ${REGEX} >/dev/null && echo -n "OK" || echo -n "NG")
ret2=$(ping -c 1 ${REMOTE} >/dev/null && echo -n "OK" || echo -n "NG")
if [ "x${ret2}" == "xNG" ];
then
_echo "remote server may be dead"
exit 1
fi
if [ "x${ret1}" == "xOK" ];
then
_echo "already mounted"
exit 0
else
_echo "mount point was not found"
sudo mount $MNTP
cd $BASEDIR
docker-compose restart
exit 0
fi
こんなスクリプトを作ってcronで3分置きに実行する。
そしたら起動直後に実行されるようにしておくことで、無理やりマウントさせている。
最後に
ラズパイがもうすこし安ければ、例えば4台ぐらい並列に動かして、REGZAみたいな全チャンネル録画みたいなことが、安くできそうだけど、
トータルでどうしても高くなるし、多分TVの裏側がサーバルームのようなケーブルの量になるから見た目にも悪い。
今のところ、REGZAの補助で使っている。