All Articles

テレビ視聴サーバを構築した話

はじめに

床に転がっていたRaspberry Pi 4 (ラズパイ) を使って,テレビ視聴サーバを構築しました. 職場の上司との雑談で,テレビ録画鯖の存在を知ったことがきっかけです.1

環境など

構築手順

1. Raspberry Pi OS (Lite版) をインストールする

OSイメージを入手する

Operating system images#Raspberry Pi OS (64-bit)からOSイメージをダウンロードします. 僕のときは2024-03-15-raspios-bookworm-arm64.img.xzがダウンロードされました. Lite版にはデスクトップ環境が入っていないことに注意してください.

ラズパイへインストールする

EtcherなどでMicroSDカードへOSイメージを書き込みます. 書き込んだMicroSDカードをラズパイへ挿入してOSをインストールします. ラズパイを起動する前にチューナなどを接続することに注意してください.

※以降の手順はsshするなどして,ラズパイ上で操作します.

2. ラズパイの設定をする

ダウンロードページには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 (有効にするロケールの選択画面) のみ,スペースキーで選択することに注意します.

[Option] 好きなツールをインストールする

sudo apt -y install vim neovim

3. Dockerをインストールする

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

4. テレビチューナのドライバをインストールする

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

5. Mirakurun, EPGStation (Docker版) をインストールする

l3tnun/docker-mirakurun-epgstationのREADMEに従って,Mirakurun (テレビチャンネルチューナ) とEPGStation (録画予約管理ソフトウェア) をインストールします.

curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s

6. Mirakurun,EPGStationの設定をする

インストール時に生成されたディレクトリにあるcomposeファイル (docker-mirakurun-epgstation/docker-compose.yml) を下記のように変更します.

DBのイメージをarm64対応のものに変更する

- image: mariadb:10.5
+ image: yobasystems/alpine-mariadb
+ # image: mariadb:10.5

[Option] コンテナに適当な名前を付ける

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

7. チャンネルをスキャンする

チャンネルをスキャンします.

curl -X PUT "http://localhost:40772/api/config/channels/scan"

上記コマンドでは取得漏れが発生することがあるらしいので,適宜地上デジタル放送 チャンネル表を参考に手動でチャンネルを設定します. スキャン完了後,一度コンテナを再起動します.

sudo docker compose stop && sudo docker compose up -d

8. テレビ視聴

まずはMirakurunへアクセスしてみます. お好きなブラウザでhttp://${RASPBERRY_PI_IP_ADDR}:40772へアクセスします. チャンネルスキャンに成功していると,“Services”に視聴可能なチャンネルが表示されます. mirakurun

お次はEPGStationです. ブラウザでhttp://${RASPBERRY_PI_IP_ADDR}:8888へアクセスすると,ダッシュボードが見られます. epgstation_dashboard 「放映中」のタブからは現在放送中の番組を確認でき,ここから番組を視聴できます. おめでとうございます! epgstation_onair

おわりに

こうして記事にまとめてみると,必要なソフトウェアがDocker化されているので,簡単に構築できそうですね. ただ,今の環境では(インターネット回線が弱すぎるからか)十分満足に視聴できないので,これを機に回線を見直そうかなあ….

参考文献


  1. その話を聞いてすぐにチューナなどを買ったのはいいものの,実際に構築したのが1年後であることはここだけの秘密です

Published 2024/06/15

Hello, world! I am an web backend engineer based in Japan. I am interested in tech, math and mahjong.