Raspberry Pi 3 で Mirakurun を動かして TV チューナー鯖にします。
用意するもの
- Raspberry Pi 3 Model B
- Ubuntu or Raspbian (kernel 3.16 以上)
- PX-S1UD V2.0
- USB 接触型 IC カードリーダー
- 地上デジタルテレビ放送波が受信できる環境
- TV 用同軸ケーブル
USB 接触型 IC カードリーダーは大体何でも大丈夫ですが、迷ったらこちらを買いましょう。
https://www.amazon.co.jp/dp/B017Y8QV4O/
OS (ディストリビューション) は Raspbian が安定するため、お勧めです。録画中に Raspberry Pi が死んでしまっては、 TV チューナー鯖として致命的なので、特に強いこだわりが無ければ冒険しない方が賢明です。(一度失敗したので…)
ここでは、手元のマシンから SSH で Raspberry Pi 3 に接続可能で、インターネットに繋がっている状態という前提で進めていきます。
⚠免責事項
この記事は学術研究目的で記載されています。
学術研究の範囲を逸脱した利用はご遠慮ください。
地上波デジタル放送及び、受信した映像音声データは放送法、著作権法などにより保護されています。インターネットを介した再送信等の行為は犯罪です。取り扱いには十分ご注意ください。
この記事を参考にしたことにより生じたあらゆる損害について、著者は一切責任を負いません。
準備
アンテナと B-CAS
壁面のアンテナ線差込口と PX-S1UD を TV 用同軸ケーブルで繋ぎ、 PX-S1UD を Raspberry Pi 3 に繋ぎます。
USB 接触型 IC カードリーダーに B-CAS カードを挿入し、 Raspberry Pi 3 に繋ぎます。
どちらのデバイスも、 kernel 3.16 以上であれば標準のドライバで認識される筈です。
確認方法
$ lsusb | grep VidzMedia
Bus 001 Device 006: ID 3275:0080 VidzMedia Pte Ltd
$ ls /dev/dvb
adapter0
ビルド環境構築
sudo apt -y install build-essential automake pkg-config
PX-S1UD firmware のインストール
ドライバは kernel に組み込まれていますが、別途 firmware が必要なので配置します。
sudo apt -y install unzip
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-S1UD
を抜き差しするか、 Raspberry Pi 3 を再起動します。
再起動すると立ち上がらない場合があるので、モニタを繋げて原因を探りましょう。と言っても kernel で死ぬので、最悪原因を特定できない場合はイメージを焼く所からやり直す方が早いかもしれません。(それでも解決できない場合は、インターネットで検索検索。)
arib25 のインストール
B-CAS カードでデコードする際に必要です。
必要なパッケージのインストール
sudo apt -y install pcscd libpcsclite-dev pcsc-tools
確認
pcsc_scan
次の表示が出れば認識できています。(Ctrl+Cで停止)
Japanese Chijou Digital B-CAS Card (pay TV)
pcscd が起動していなければ起動します。
sudo systemctl status pcscd
sudo systemctl start pcscd
インストール
cd /usr/local/src
curl -sL https://github.com/stz2012/libarib25/archive/09770e3.tar.gz | sudo tar zxv
cd libarib25-09770e334837f6c67268c41c1c15784373d35e5b
sudo chown -R $(whoami) .
make
sudo make install
recdvb のインストール
チューナーデバイスを扱うコマンドです。
参考: http://cgi1.plala.or.jp/~sat/?x=entry:entry160313-022002
cd /usr/local/src
curl -sL http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz | sudo tar zxv
cd recdvb-1.3.1
sudo chown -R $(whoami) .
./autogen.sh
./configure --enable-b25
make
sudo make install
確認
recdvb --b25 --strip --sid hd 25 10 test.m2ts
次のような表示になれば録画に成功しています。
using B25...
enable B25 strip
pid = 7305
device = /dev/dvb/adapter0/frontend0
Using DVB card "Siano Mobile Digital MDTV Receiver"
tuning to 545143 kHz
polling..ok
SNR: 0
Recording...
Available sid = 1040 1041 1424
Chosen sid = 1040
Available PMT = 0x110 0x120 0x1fc8
Recorded 10sec
test.m2ts
は VLC 等で再生して確認しましょう。
トラブルシューティング
bcas->init failed
Cannot start b25 decoder
Fall back to encrypted recording
このような表示が出る場合は、以下の項目を確認してください。
- B-CAS カードが挿入されていない
- カードリーダーが接続されていない
- pcscd.service がインストール、起動されていない
- arib25 がインストールされていない
- recdvb のビルド時に
--enable-b25
オプションが指定されていない
Mirakurun と Rivarun のインストール
Node.js
Mirakurun は Node.js 6.5.0 以上 (7.0.0 未満) で動作します。
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
pm2
pm2 は Node.js で書かれたアプリケーション用のプロセスマネージャーです。
sudo npm install pm2 -g
Mirakurun と Rivarun
Rivarun は Mirakurun の client です。
Mirakurun と同一の物理マシンにインストールする必要はありませんが、動作確認の為に入れます。
この情報は古くなる可能性があるため、基本的に公式ドキュメントを参考にしてください。
https://github.com/Chinachu/Mirakurun
https://github.com/Chinachu/Rivarun
sudo npm install mirakurun -g --unsafe --production
sudo npm install rivarun -g
Mirakurun の設定
sudo mirakurun config tuners
PX-S1UD
用の設定を追記します。
※ --sid
オプションを指定すると失敗するので注意。
- name: PX-S1UD-1
types:
- GR
command: recdvb --b25 --strip <channel> - -
Mirakurun を再起動します。
sudo mirakurun restart
Mirakurun のログを確認します。
sudo mirakurun log server
ログの実体は /usr/local/var/log/
にあります。
トラブルシューティング
次のようなエラーが出ている場合は tuners の設定に不備がある可能性が高いです。
2016-08-28T12:05:14.909Z error: ChannelItem#'NTV' service scan has failed [Error: stream has closed before get services]
確認
rivarun --ch GR/25 10 test.m2ts
次のような表示になれば成功です。
status: 200
headers: {"server":"Mirakurun/1.4.1","date":"Sat, 27 Aug 2016 15:26:11 GMT","connection":"close","transfer-encoding":"chunked"}
リモートから Rivarun を使う際は Mirakurun で TCP 接続を有効(デフォルトで有効)にし、 --mirakurun
オプションを指定して実行します。
rivarun --mirakurun 192.168.0.100:40772 --ch GR/25 10 test.m2ts
PX-S1UD を2つ以上刺してマルチチューナー環境にする
PX-S1UD は Amazon で5,000円もしないので、手軽に同時試聴(録画)チャンネルが増やせます。
必要な物
- PX-S1UD
- 分配器 (分波器ではないので注意)
分配すると信号が弱まるので、別途増幅器(ブースター)が必要になる場合があります。
PX-S1UD 増設
既に1つ認識されていれば、特に意識すること無く USB ポートに繋ぐだけです。
確認
ls /dev/dvb
この結果が次のようになれば認識されています。
adapter0 adapter1
次のコマンドを同時に実行して、同時に録画できるチャンネルが増えているか確認してみてください。
recdvb --b25 --strip --dev 0 --sid hd 24 10 test0.m2ts
recdvb --b25 --strip --dev 1 --sid hd 25 10 test1.m2ts
--dev
オプションで 0 から始まる数字を指定することで使用するチューナーデバイスを選択できます。
この数字は /dev/dvb/adapter0
, /dev/dvb/adapter1
の 0
や 1
と対応しています。
Mirakurun の設定変更
チューナーの設定を少しだけ変更する必要があります。
sudo mirakurun config tuners
- name: PX-S1UD-1
types:
- GR
command: recdvb --b25 --strip --dev 0 <channel> - -
- name: PX-S1UD-2
types:
- GR
command: recdvb --b25 --strip --dev 1 <channel> - -
確認
物理的なチューナーデバイスの割当は Mirakurun が抽象化してよしなに処理してくれるので、 rivarun
コマンドを叩く時は物理チューナーデバイスを意識することは殆どありません。
次のコマンドを同時に実行して確認できます。
rivarun --mirakurun 192.168.0.100:40772 --b25 --priority 1 --ch GR/24 10 test24.m2ts
rivarun --mirakurun 192.168.0.100:40772 --b25 --priority 1 --ch GR/25 10 test25.m2ts
最後に
Mirakurun のお陰でリモートから録画コマンドが使えるようになり、非常に便利になりました。
Raspberry Pi 3 でも動くので、諭吉1人分で録画環境が構築できます。素晴らしい時代ですね。
これで、 TV チューナーの環境は整ったのですが、録画や視聴をするためには Chinachu を利用するのが便利です。
Chinachu は開発が活発なため、導入方法は公式サイトを参考にすることが強く推奨されています。
https://chinachu.moe/