床に転がっていたRaspberry Pi 4 (ラズパイ) を使って,テレビ視聴サーバを構築しました. 職場の上司との雑談で,テレビ録画鯖の存在を知ったことがきっかけです.1
Operating system images#Raspberry Pi OS (64-bit)からOSイメージをダウンロードします.
僕のときは2024-03-15-raspios-bookworm-arm64.img.xz
がダウンロードされました.
Lite版にはデスクトップ環境が入っていないことに注意してください.
EtcherなどでMicroSDカードへOSイメージを書き込みます. 書き込んだMicroSDカードをラズパイへ挿入してOSをインストールします. ラズパイを起動する前にチューナなどを接続することに注意してください.
※以降の手順はsshするなどして,ラズパイ上で操作します.
ダウンロードページにはRaspberry Pi OS (Lite版) と書いてありましたが,実体はDebianらしいです.
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
sudo apt update
sudo apt -y upgrade
sudo apt -y autoremove
更新中にエラーが発生したが,こちらの記事に記載されている通りに対応したら解消しました.
sudo raspi-config
> 5 Location Options
> L1 Locale
> All locales
> en_US.UTF-8
上記4行目の> All Locales
(有効にするロケールの選択画面) のみ,スペースキーで選択することに注意します.
sudo apt -y install vim neovim
docker/docker-installのREADMEに従って,Dockerをインストールします.
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
### インストールできたことを確認する
$ sudo docker --version
Docker version 26.1.4, build 5650f9b
$ sudo docker compose version
Docker Compose version v2.27.1
Dockerのインストールが完了したら,一度ラズパイを再起動します.
sudo reboot
PX-Q1UDは1チャンネル版のPX-S1UDと同じドライバで動作します (cf. PLEX/ダウンロード).
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/
ドライバが認識されているのかを確認します. PX-Q1UDは4チャンネル対応なので,PX-S1UDが4個認識されていればOKです.
$ dmesg | grep PX-S1UD
[ 3.056587] usb 1-1.3.1: Product: PX-S1UD Digital テレビ Tuner
[ 3.244081] usb 1-1.3.2: Product: PX-S1UD Digital テレビ Tuner
[ 3.428095] usb 1-1.3.3: Product: PX-S1UD Digital テレビ Tuner
[ 3.616023] usb 1-1.3.4: Product: PX-S1UD Digital テレビ Tuner
l3tnun/docker-mirakurun-epgstationのREADMEに従って,Mirakurun (テレビチャンネルチューナ) とEPGStation (録画予約管理ソフトウェア) をインストールします.
curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s
インストール時に生成されたディレクトリにあるcomposeファイル (docker-mirakurun-epgstation/docker-compose.yml
) を下記のように変更します.
- image: mariadb:10.5
+ image: yobasystems/alpine-mariadb
+ # image: mariadb:10.5
cf. Compose Specification(仕様)#container-name
### mirakurun
+ container_name: tv_mirakurun
### mysql
+ container_name: tv_mysql
### epgstation
+ container_name: tv_epgstation
設定が完了したら,コンテナを起動します.
$ cd ${/path/to/docker-mirakurun-epgstation}
$ sudo docker compose up -d
### コンテナが無事に起動したことを確認する
$ sudo docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
tv_epgstation docker-mirakurun-epgstation-epgstation "npm start" epgstation 11 days ago Up 6 days 0.0.0.0:8888-8889->8888-8889/tcp, :::8888-8889->8888-8889/tcp
tv_mirakurun chinachu/mirakurun "docker-entrypoint.s…" mirakurun 11 days ago Up 6 days 0.0.0.0:9229->9229/tcp, :::9229->9229/tcp, 0.0.0.0:40772->40772/tcp, :::40772->40772/tcp
tv_mysql yobasystems/alpine-mariadb "/scripts/run.sh --c…" mysql 11 days ago Up 6 days 3306/tcp
チャンネルをスキャンします.
curl -X PUT "http://localhost:40772/api/config/channels/scan"
上記コマンドでは取得漏れが発生することがあるらしいので,適宜地上デジタル放送 チャンネル表を参考に手動でチャンネルを設定します. スキャン完了後,一度コンテナを再起動します.
sudo docker compose stop && sudo docker compose up -d
まずはMirakurunへアクセスしてみます.
お好きなブラウザでhttp://${RASPBERRY_PI_IP_ADDR}:40772
へアクセスします.
チャンネルスキャンに成功していると,“Services”に視聴可能なチャンネルが表示されます.
お次はEPGStationです.
ブラウザでhttp://${RASPBERRY_PI_IP_ADDR}:8888
へアクセスすると,ダッシュボードが見られます.
「放映中」のタブからは現在放送中の番組を確認でき,ここから番組を視聴できます.
おめでとうございます!
こうして記事にまとめてみると,必要なソフトウェアがDocker化されているので,簡単に構築できそうですね. ただ,今の環境では(インターネット回線が弱すぎるからか)十分満足に視聴できないので,これを機に回線を見直そうかなあ….