Raspberry Pi 3 で TV チューナー鯖構築

  • 107
    Like
  • 0
    Comment

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.m2tsVLC 等で再生して確認しましょう。

トラブルシューティング

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/adapter101 と対応しています。

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/

参考 LINK