Raspberry Pi + PX-S1UDでテレビの視聴環境を作る!

概要

上京してから早6ヶ月。 引っ越しした際に最低限のものしか買っておらず、テレビもなしで生活していた。 ふとしたきっかけでテレビを見たくなったが部屋にテレビを置きたくなかった。 上京前は、Windows PC + PT3で自宅内ストリーミング環境を作って、テレビを見ていたが、 一人暮らしの今となっては、電気代が気になるので常時起動は避けたかった。 そこで、Raspberry Piを使ってストリーミング環境を構築することにした。 つまずいた点もあるので共有ができたらいいと思っている。 あくまでも個人利用であり勉強のために行う。 公的に配信することは法律で禁じられているので注意を。

目標

  • タブレットでテレビをリアルタイム視聴できるようにする。
  • 録画環境はほとんどする予定がないので今回は保留(別途対応予定)

使用機器

  • Raspberry Pi 3 Model B+
  • OS入れるようのmicroSDカード 32GB
  • PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0
  • 接触型ICカードリーダー SCR3310-NTTCom
  • B-CASカード (Windows PCからの流用。B-CASカードが認識できればいいので、おそらく他のICカードリーダーでも大丈夫)

参考記事

こちらの記事を参考にした。 先人の知恵はありがたし。 ほとんど下記の記事で実現できる。 - Qiita - ラズパイ3B+ を地上波8ch全録サーバにできるか試してみました

構築

SDカードにOSのインストール

今回はRaspbianを使う。 cliですべて完結するので、liteでOK。 WindowsとMacで違うので別途ググってもらいたい。

OSの設定

ログイン(初期設定) - ID:pi - Password: raspberry 以下の設定をしておくとよいかも。 - ロケールの設定 - 言語の設定 SSHの設定をしておくと、ノートPCから操作できるようになるのでわざわざモニターの前に移動しなくてよくなる。

つまずいた点

raspi-configでsshをenableにしても、rebootしたときにsshがdisableになってしまう事象が起こった。 SDカードにOSを入れた時点で、bootディレクトリ配下にsshというファイル(中身は空でよい)を作ってからsshをenableにすると解決した。

チューナの設定

チューナをさして、認識しているか確認

$ ls /dev/dvb/
adapter0


$ lsusb | grep VidzMedia
Bus 001 Device 004: ID 3275:0080 VidzMedia Pte Ltd

# ドングルのファームウェアをインストール
$ 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

$ sudo reboot now

カードリーダーの設定

$ sudo apt-get update
$ sudo apt -y install pcscd libpcsclite-dev pcsc-tools
$ pcsc_scan

# いっぱい文字がでてくるが以下の文字がでてくればOK
Japanese Chijou Digital B-CAS Card (pay TV)

mirakurunの導入

# node.jsのリポジトリを追加(version 8)
$ curl -sL http://deb.nodesource.com/setup_8.x | sudo bash -

# node.jsをインストール
$ sudo apt-get install -y nodejs


# pm2 - プロセスを管理するためのパッケージのインストール
$ sudo npm install pm2@2.10.4  -g

#Mirakurun をインストール
$ sudo npm install mirakurun -g --unsafe --production


# dvb-toolsの導入
$ sudo apt install -y dvb-tools

周波数設定用ファイルをダウンロード

#gitを導入
$ sudo apt install -y git

#周波数設定ファイルをダウンロード
$ cd /usr/local
$ sudo git clone https://github.com/Chinachu/dvbconf-for-isdb.git
$ cat /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf


# decoderのインストール
$ sudo npm install arib-b25-stream-test -g --unsafe


#チューナーの設定開始
sudo mirakurun config tuners


- name: S270-0
  types:
    - GR
  command: dvbv5-zap -a 0 -c /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf -r -P <channel>
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b25-stream-test
  isDisabled: false


#mirakurunの再起動
$ sudo mirakurun restart

# チャンネルスキャンを行う
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"
つまずいた点

はじめはrecdvbを使用していたが、どうもうまくチャンネルスキャンが上手くいかない。 どうやらrecdvbはmirakurunでうまく動作しないことがあるようだ。 recdvbは有志により、いろんな派生がでているので試すのもありのようだ。 また、dvbv5-zapでチャンネルスキャンはできるが、ストリーミング再生がうまくいかなかった。 USBハブを介してラズパイに繋いでいたためおそらくうまく認識されていなかったのである。

# チャンネルスキャン後、不要なチャンネルがあれば削除したり、編集を行う
$ sudo mirakurun config channels

# mirakurunの再起動
$ sudo mirakurun restart

この時点でもストリーミングは可能なはず。

chinachuの導入

以前はβ(ベータ)というバージョンらしかったが、今はγ(ガンマ)になっているという

# クローン
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu

# インストール
$ cd ./chinachu

# ラズパイの場合はインストールに相当時間がかかる
# sshをしている場合は途中でセッションが途切れるかもしれないのでscreen等を使うといいかも
$ ./chinachu installer
# 選択項目が出てくるのでAutoでインストール
# インストールが完了するまで放置


# インストール完了後
# 現在のディレクトリを確認
# chinachu配下にいることを確認
$ pwd

# ルールファイルを作成
# コンフィグファイルの編集
$ echo "[]" > rules.json
$ cp config.sample.json config.json
$ vi config.json

“uid”のバリューと”wuiHost”のキーを”wuiOpenHost”に変更  録画先を変更する場合(例えば、外部HDDや指定先ディレクトリ)、”recordedDir”を変更する。 以下は例

{
  "uid": "pi",
  "gid": "video",
  "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",

  "recordedDir" : "/mnt/",

  "vaapiEnabled": false,
  "vaapiDevice": "/dev/dri/renderD128",

  "excludeServices": [
    3273701416,
    3232728088,
    3273901183,
    3274201456,
    3239123992,
    3239123993,
    3273601408
  ],

  "serviceOrder": [
    3273601024,
    3273601025,
    3273701032,
    3273701033,
    3273701034
  ],

  "wuiUsers": [
    "chinachu:yoshikawa"
  ],
  "wuiAllowCountries": ["JP"],

  "wuiPort": null,
  "wuiOpenHost": "0.0.0.0",
  "wuiTlsKeyPath": null,
  "wuiTlsCertPath": null,
  "wuiTlsRequestCert": false,
  "wuiTlsRejectUnauthorized": true,
  "wuiTlsCaPath": null,
  "wuiOpenServer": true,
  "wuiOpenPort": 20772,
  "wuiXFF": false,
  "wuiDLNAServerEnabled": false,
  "wuiMdnsAdvertisement": true,

  "recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<channel-name>]<title>.m2ts",
  "storageLowSpaceThresholdMB": 3000,
  "storageLowSpaceAction": "remove",
  "storageLowSpaceNotifyTo": null,
  "storageLowSpaceCommand": ""
}

動作確認を行う。

# chinachu配下で実行
$ ./chinachu service wui execute
# エラーが出なければ、Ctrl + c で終了
# 上記の設定ファイル等で記述ミスがあれば、ここで表示される。

# mirakurunからEPGデータを取得?
# ここでエラーが出た場合はmirakurunに接続できていないらしい(私は起こらなかった)
$ ./chinachu update

スタートアップの設定

$ sudo pm2 start processes.json
$ sudo pm2 save
$ sudo pm2 startup

動作確認

chinachu

ブラウザ上で http://ラズパイのIP:ポート番号(デフォルトは20772) にアクセス

mirakurun

ブラウザ上で http://ラズパイのIP:ポート番号(デフォルトは40772) にアクセス

まとめ

今はなんとかPC,タブレットから見られる状態になったが、USBハブを介してドングルを繋いでいるとうまく受信できない罠には気が付かなかった。 2週間ほど時間を無駄にしてしまった。。。 別の問題点として家の無線LANルータが貧弱なのか通信ができない状態が結構な割合で起こる。 なんとかして快適なTV環境になるようにしたい。