\ 年に1度のブラックフライデーセール! /

地デジ視聴&録画サーバーをラズパイ公式OSで構築する

これまで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
  • カードリーダー(SCR3310)
  • B-CASカード
  • PLEX USB接続ドングル型地上デジタルTVチューナー
  • 外付けHDD(外部電源があれば何でも可)

外付けHDDをマウントして、そこに録画データを保存するようにしています。

TSファイルを保存する形で、特にエンコードはしていません。別のPCやスマホで、VLCを使って視聴しています。家庭内利用です。

構成の選び方で気をつけたいこと

テレビチューナーはドライバの問題がありますので、別の製品の場合は検索してください。販売元にもLinux系の記載はなくなっていました。メーカーの保証はありませんから、破損しても自己責任でお願いします。

試すなら1CHでも、実際には4CH同時視聴ができないと色々と困ることはありますね。

\年に1度のブラックフライデーセール!/
Amazonで詳しくみる

カードリーダーのドライバはdocker-mirakurun-epgstationなら必要ありませんでした。

それにしても、このカードリーダーは便利です。マイナンバーカードも読み取れます。住基カードの頃(2013年)から使い続けています。もう10年も経つ?! だからとってもオススメなんです。天下のNTTコミュですからね。買ったのはOEM品です。

耐久性に心配があるmicroSDカードですが、HDDから起動させるにはパーティションは切った方が良いでしょう。今回はお手軽にmicroSDカードです。録画されたデータだけHDDに書き込む設定です。

microSDカード32GBバッファロー
最近お気に入りのバッファロー製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では便利なスクリプトでのインストールを推奨しているためです。

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ならインストールは必要ありません。

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だった。

     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アドレスとそれぞれのポート番号を指定します。

Epgstationhttp://IPアドレス:8888
Mirakurunhttp://IPアドレス:40772

EPEGStationはホスト名.localでもOKです。Mirakurunもv3.4.0でホスト名でもできるようになったとありました。WebUIのconfigにhostname入力欄があります。

直接 IP アドレスを入力してアクセスするか、localhost でアクセスしないと要求を拒否するようになっています。これは DNS Rebind Attack の防止が目的です。また、Mirakurun は LAN 専用サーバーであるため、リバースプロキシによる動作は仕様としてサポート外です。

https://github.com/Chinachu/Mirakurun/issues/69

技術的なことは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レッド

いつもVLCで視聴しています。

エンコードについて

エンコードはこだわるとたくさんの情報が必要です。個人的には観られればいいかなというレベルなので、デフォルトでどの程度のエンコードができるのかご紹介しておきます。

特に何もせず録画を予約する際、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)で地デジの視聴&録画サーバーを構築したご紹介でした。

\年に1度のブラックフライデーセール!/
Amazonで詳しくみる
シェアする
  • URLをコピーしました!

Raspberry Pi 4、400、Zero2W

販売価格は、必ず販売サイトで確認してください。

\年に1度のブラックフライデーセール!/
Amazonで詳しくみる
\年に1度のブラックフライデーセール!/
Amazonで詳しくみる
RaspberryPi
¥15,987 (2022/11/29 14:24時点 | Amazon調べ)
\年に1度のブラックフライデーセール!/
Amazonで詳しくみる

この記事のコメント(承認後に公開)

コメントする

コメントは日本語で入力してください。名前は表示されます。メールアドレスは表示されません。

CAPTCHA

この記事の主な流れ