Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
これまでLibreELECで地デジを録画と視聴をしていました。LibreELECがバージョンアップしてから観られなくなりました。素晴らしいアドオンだったのですけど仕方ないですね。(その時の記事は関連記事として下部にリンクしてあります)
あれから録画用で有名なMirakurunもバージョンが上がって既にv3.90でした。Raspberry Pi OSも64bitになりだいぶ安定してきました。
ならばサーバーとして動かそうと検索すると、既にたくさんの方の構築例が出ています。他の方とあまり変わらない内容ですが、ラズパイダ的に必要最小限にまとめてみます。
特にネットワーク越しに視聴するのにVLCのプレイリストは便利だなと思います。LibreELECで構築したよりも気軽に観られますね。実はそれがお伝えしたいメインだったりします。記事の最後の方をご覧ください。
今回の環境
いつもの今回の環境でハードウェア構成などは画像の通りです。
Raspberry Pi OSはLite版で構築しましたが、先に既存のRaspberry Pi OS 64bit デスクトップ版(テスト機)で実現しています。やり方は基本的に同じです。Lite版の方が組み込まれているアプリやライブラリなどが少ないので、余計にインストールする必要はありますが、お好きな方をどうぞ。
サーバーにしたいので、デスクトップは必要ないのでlite版です。(モニターに繋がないから) 視聴と録画はネットワーク越しに操作と閲覧ができます。

Dockerなので失敗してもやり直すのが比較的に簡単な点が嬉しい。
構成リスト
- Raspberry Pi OS lite 64bit Bullseye(Debian11)
- l3tnun/docker-mirakurun-epgstation
- microSDカード起動32GB
- カードリーダー
- B-CASカード
- 外付けHDD(外部電源があれば何でも可)
外付けHDDをマウントして、そこに録画データを保存するようにしています。
TSファイルを保存する形で、特にエンコードはしていません。別のPCやスマホで、VLCを使って視聴しています。家庭内利用です。
構成の選び方で気をつけたいこと
テレビチューナーはドライバの問題がありますので、別の製品の場合は検索してください。販売元にもLinux系の記載はなくなっていました。メーカーの保証はありませんから、破損しても自己責任でお願いします。
試すなら1CHでも、実際には4CH同時視聴ができないと色々と困ることはありますね。
カードリーダーのドライバはdocker-mirakurun-epgstationなら必要ありませんでした。
それにしても、このカードリーダーは便利です。マイナンバーカードも読み取れます。住基カードの頃(2013年)から使い続けています。もう10年も経つ?! だからとってもオススメなんです。天下のNTTコミュですからね。買ったのはOEM品です。
耐久性に心配があるmicroSDカードですが、HDDから起動させるにはパーティションは切った方が良いでしょう。今回はお手軽にmicroSDカードです。録画されたデータだけHDDに書き込む設定です。

最近お気に入りのバッファロー製32GB
今回の例だとUSBメモリーでの起動はオススメしません。ポート4つが完全に埋まってしまいます。
できれば、すべて外部電圧があるように、USBハブの電源付きが良さそうです。いずれにしてもケーブルの取り回しは厄介です。
外付けHDDではなく、NASに録画データを保存する手もありますが、ネットワークの負荷はどうなんでしょう。TSファイルというのは大きいですからね。個人的に動画データについては詳しくないのと、番組は視聴したら消す人なので外付けHDDのみにしています。
ハードウェアエンコードなどの細かいお話はよく知りませんので言及していません。ご理解ください。
docker-mirakurun-epgstationでは初回にffmpegもインストールされます。64bit版OSでは、ENV FFMPEG_VERSION=4.2.4とあるのでバグがあるバージョンのようです。
Dockerだからやり直しも楽
Dockerについて簡単にいうと、仮想化された環境です。コンテナと呼ばれるように各環境がOS毎の仮想化ではないのが利点です。だから、私のような文系出身の人が構築するようなシステムで、おかしくなった時にエイヤッと簡単に捨て去ることができるDocker環境は精神的に楽ですね。
直にインストールして構築していくと、やり直すのにかなりハマることが多くて、結果的にシステムの他に影響してOSの動作自体がおかしくなることを経験済みです。
その点、Dockerならデータベースやら何やらすべて破棄することも躊躇なくできます。気軽に試せるから気軽に何でもトライできると思っています。
今回はこのDockerで構築するので、先ずはDockerをインストールするところから始めないとなりません。
Dockerのインストール
これ以降のインストール操作はすべてSSH経由で行いました。Dockerのインストールから始めてみます。
以前にWordpressのテスト環境を構築したときもDockerでした。
インストールは公式が便利スクリプトファイルと呼んでいる方法を使います。
どうもaptコマンドだとバージョンが古いのと、Debian系のRaspberry Pi OSでは便利なスクリプトでのインストールを推奨しているためです。
Docker ドキュメント
Docker Engine インストール(Debian 向け) Debian 上に Docker Engine をインストールする手順を説明。
sudo apt update && sudo apt full-upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
dockerのグループに自分を所属させます。これでsudoなしで実行できます。
sudo usermod -aG docker ${USER}
記事執筆時点でのDockerのバージョンは20.10.20でした。
docker -v
Docker version 20.10.20, build 9fdeb9c
一旦再起動して有効にしておきます。
sudo reboot
docker-composeは別にインストールは必要ありませんでした。
これでDockerのインストールは終わりです。
外付けHDDのマウント
録画した番組動画を外付けのHDDに保存したいので設定します。
マウント方法はいくつかの記事でもご紹介してきました。次のよく使うコマンド一覧にまとめてあります。(外付けハードディスクを接続する場合——mount、umount)
固有のUUIDを調べないとなりませんので、分からない人は先に以下記事をご覧ください。
fstabに記載して自動マウントさせるように記述します。項目間はTab(またはスペース)で区切ります。ここはコピペしない方が確実です。
UUID=xxxxxxxxxx /data ext4 defaults,nofail 0 0
再起動してマウントされていればOKです。この辺は環境によって異なります(特にオプション)
以後、外付けHDDが任意のフォルダにマウントできている前提で、そこに録画されたデータを保存していくことにします。
所有権の変更
今回は直下に/dataフォルダを作りそこにマウントしました。その/dataフォルダはマウントするとrootの所有権になってしまいます。マウントしてからchownコマンドでユーザー自分に変更しておきました。(idと打てばidが分かりますよ)
sudo mount /dev/sda /data
sudo chown -R 1000:1000 /data
HDDのフォーマットはLinuxのext4形式です。これexFATだとユーザー権限に変更できないみたいですね。マウントすると必ずroot権限に戻っていました。
地デジチューナーのドライバ
製品メーカーであるプレクスのサイトからダウンロードします。ずっと更新されていないドライバです。中身のisdbt_rio.inpを使います。/lib/firmwareへコピーすればOKです。
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/
認識されているか確認しておく。
dmesg | grep PX-S1UD
[ 2.087733] usb 1-1.3: Product: PX-S1UD Digital TV Tuner
カードリーダーのドライバは、docker-mirakurun-epgstationならインストールは必要ありません。
■Pi 5は8GBモデルがオススメ
docker-mirakurun-epgstationのインストール
やっとDocker版のmirakurunとepgstationをインストールしていきます。
いくつか派生があって、色々と試したところ「https://github.com/l3tnun/docker-mirakurun-epgstation」をインストールしてから設定を少し変えます。
展開する場所はホームフォルダにしてあります。
基本は導入するgithubのページのインストール手順の通りです。
cd ~/
curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s
cd docker-mirakurun-epgstation
docker-compose.ymlを編集していきます。
sudo nano docker-compose.yml
変更箇所はデータベースイメージのmariadb:10.5を変更します。どうもラズパイではmariadbそのままではダメみたい。
64bitなのでarm64に対応したものを探してみた。が、よく分からない。先人のおすすめの中で64bitのタグも付いているyobasystems/alpine-mariadbにしてみた。試したところtobi312/rpi-mariadbでもOKだった。
Explore Docker’s Container Image Repository | Docker Hub
mysql:
image: yobasystems/alpine-mariadb
#image: mariadb:10.5
# image: mysql:8.0 # 囲み文字を使用する場合
volumes:
更に録画データの場所を変更します。外付けHDDをマウントした場所にしました。これは任意です。
- ./recorded:/app/recorded → - /data/recorded:/app/recorded
他にもデータベースのパスワードなどを変更したいならこの定義ファイルで変更しますが、そのままでも構わないでしょう。
docker-compose.ymlの変更箇所は2点でした。
Dockerの起動
docker-compose up -dでバックグラウンドで実行されます。
docker-compose up -d
初回だけはちょっとばかりお時間がかかります。今回の構成だとおよそ15〜20分くらい。
終わったら設定したepgstationやMirakurunが実行されます。
逆にDockerを止めるときはdownです。
docker-compose down
チャンネルスキャン
チャンネルスキャンのコマンド実行はしておいた方がいい。しなくてもMirakurunの方でもするみたいです。1時間くらいすれば受信できるCHは表示されるハズです。
curl -X PUT "http://localhost:40772/api/config/channels/scan"
これも時間がかかりますね。62チャンネル分くらい順番にスキャンしていきます。
channel scan has been completed and saved successfully. RESTART REQUIRED to apply changes.
スキャンが終わったら、更新されたCHは再起動しないと有効になりません。
一度はこれでスキャンして、その後はMirakurunのWebUI画面から個別に設定ができます。
同ネットワークから操作する

Mirakurun
チャンネルのスキャンが終われば、一旦再起動してからWebUIの画面を見てみましょう。
他のPCなどからWebブラウザで管理画面を観るのに、ラズパイのIPアドレスとそれぞれのポート番号を指定します。
| Epgstation | http://IPアドレス:8888 |
| Mirakurun | http://IPアドレス:40772 |
EPEGStationはホスト名.localでもOKです。Mirakurunもv3.4.0でホスト名でもできるようになったとありました。WebUIのconfigにhostname入力欄があります。
直接 IP アドレスを入力してアクセスするか、localhost でアクセスしないと要求を拒否するようになっています。これは DNS Rebind Attack の防止が目的です。また、Mirakurun は LAN 専用サーバーであるため、リバースプロキシによる動作は仕様としてサポート外です。
技術的なことはgithubhelpのchinachu/mirakurunで探してみてください。
以上でチャンネルの設定をすれば、地デジの録画と視聴サーバーの導入は完了です。
視聴する方法
epgstationのWebUIからでも、放送中の番組を視聴することもできます。
例えばチャンネル名をクリックすれば配信方法を選べます。
EPGstationから放送中の番組を観るのに、環境によってはVLCが立ち上がらずに.m3u8ファイルがダウンロードされます。中身はliveと入っているURLになっていますね。
#EXTM3U
#EXTINF: 0, NHK総合1・東京
http://nvr.local:8888/api/streams/live/3273601024/m2ts?mode=2
こんな感じで、ポート8888でliveのサービスIDと共に指定されています。
この書式は、l3tnun/docker-mirakurun-epgstationにconfig.yml 詳細マニュアルとしてまとめられています。
MIrakurunの方に直接APIでチャンネルを表示させるURLから視聴する場合は、以下です。(※チャンネルは地域毎に異なります)例えば、NHK総合-東京が受信できるなら次の通りです。
http://IPアドレス:40772/api/channels/GR/27/stream/
前述の40772ポートでAPIを叩いた方が分かりやすいですね。
プレイリストのAPI
登録した全チャンネルのプレイリストは次のURLでストリーム再生できます。

設定が終わったらVLCの「ネットワークを開く」でストリーミング再生させられます。
http://ラズパイのIPアドレス:40772/api/iptv/playlist
VLCの詳細設定のデフォルトストリームに、上記URLを設定しておけばVLC起動時に開始してくれます。

参考:https://qiita.com/sunset0916/items/e97b90b23872ca3ca0cd
VLCのプレイリストとして保存も便利

先程の全チャンネルのストリームも良いのですが、よく観るチャンネルだけ登録しても便利です。
チャンネル個別のURLをVLCで使うプレイリストとして登録しておくと便利です。拡張子を.m3u8としてテキストで作成します。
mirakurunとある部分は、IPアドレスを記載します。ご自身の環境にGR番号は置き換えてください。
#EXTM3U
#EXTVLCOPT:network-caching=1000
#EXTINF:-1,地上波 - NHK総合
http://IPアドレス:40772/api/channels/GR/27/stream/
#EXTINF:-1,地上波 - NHK Eテレ
http://IPアドレス:40772/api/channels/GR/26/stream/
#EXTINF:-1,地上波 - 日本テレビ
http://IPアドレス:40772/api/channels/GR/25/stream/
#EXTINF:-1,地上波 - テレビ朝日
http://IPアドレス:40772/api/channels/GR/24/stream/
#EXTINF:-1,地上波 - TBS
http://IPアドレス:40772/api/channels/GR/22/stream/
#EXTINF:-1,地上波 - テレビ東京
http://IPアドレス:40772/api/channels/GR/23/stream/
#EXTINF:-1,地上波 - フジテレビ
http://IPアドレス:40772/api/channels/GR/21/stream/
#EXTINF:-1,地上波 - MX 1
http://IPアドレス:40772/api/channels/GR/20/stream/
- 参考:http://www.mousou.org/node/428
URLにサービスIDを指定していなくても表示できました。
各地域のチャンネルはマスプロから探してください。
Rレッドエンコードについて
エンコードはこだわるとたくさんの情報が必要です。個人的には観られればいいかなというレベルなので、デフォルトでどの程度のエンコードができるのかご紹介しておきます。
特に何もせず録画を予約する際、H264エンコードが選べます。
エンコードをした後にTSデータを削除せず比べてみると、サイズが663.5MBから26.5MBになっています。元のTSファイルは1分約100MB、H264のmp4は約4.5MBくらいですね。

約6分5秒の天気予報
予約する際に詳細から番組毎にエンコードの方法も選べます。
エンコードには詳しくないので、64bitのRaspberry Pi 4でハードウェアエンコードがどうなのか分かりません。何もしてはいないので、これはソフトウェアエンコードだと思われます。

TSファイル

H264-mp4
Dcokerのアンインストール方法
今回の便利スクリプトでインストールしたDocker Engine、CLI、Containerd、Docker Compose パッケージをアンインストールするコマンドです。
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
作成したコンテナやイメージは残っていますので、これも削除します。
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
よく分からなくなり、最初からやり直したいとき、これで一旦は削除してからもう一度便利スクリプトファイルでDockerをインストールします。
PC画面でテレビの”ながら視聴”向き
新型コロナや軍事的な事件といった大きなニュース以外はテレビを観ないので、個人的にテレビはそこまで必需品ではありません。観たいのはブラタモリくらいでしょうかw(同じ日にやっていたカネオくんの国会図書館ネタは楽しめました)
Raspberry Pi 4のデスクトップでもストレス無く視聴できます。オーバークロックなしのメモリー8GBで、SSD起動です。ネットワークのストリーミングなので、どちらかというとネットワークが影響します。

著作権上、ぼかし入れてます
気まぐれで視聴するのに、デスクトップの片隅に置いておけるのが気に入っています。
こだわるとキリがないと思いますが、先ずは基本であるネットワーク越しに視聴して、録画もできるサーバーをラズパイで構築してみてください。
ラズパイの利点として、設置スペースもどこでも良いくらい気軽に置けて、24時間運用でも電気代があまり気にならない点がサーバーに合っていると思います。
今回の例ではチャンネル1つだけなので、録画と視聴は同時にできません。加えてストリームで流すのもTSを復号化する問題で1つだけです。同じ製品を複数導入するか、4CH同時にできる上位製品を購入してください。
公式Raspberry Pi OS lite(Bullseye)で地デジの視聴&録画サーバーを構築したご紹介でした。






