Raspberry PiでPX-W3U4を使ってみる anchor.png

旅先でテレビを見たい時はノートPCとPX-W3U4/B-CASカードを一緒に持って行ってるんだけど,自宅にいる時はPX-W3U4は使っていなかった。

これではもったいないので,自宅でもRaspberry PiとPX-W3U4を使って他のPCやスマートフォンからテレビ放送を視聴したり録画予約が出来るようにしてみた。

使用するRaspberry Piは,

を使用している。

家のどのPCやスマートフォンからも録画予約・録画やテレビの視聴が出来るようになって(風呂でも見れる),便利になった :)

Page Top

録画保存場所をファイルサーバーにする anchor.png

録画データは自宅のLAN上にあるファイルサーバーに直接保存するために,sambaを使ってファイルサーバーのディレクトリをマウントして保存先とする。

このファイルを保存するサーバーではDLNAサーバーが動作しているので,ここに録画ファイルを保存することにより,LAN上のDLNAクライアントで再生出来るようになるので便利になる。

必要なパッケージをインストールする。

# apt install cifs-utils

マウントポイントを作成する。

# mkdir /mnt/u3
# chmod 777 /mnt/u3

試しにマウントしてみる。

# mount -t cifs //<サーバーのIPアドレス>/public /mnt/u3 -o username=user,password=password,file_mode=0777,dir_mode=0777,iocharset=utf8,defaults

うまくマウント出来た場合は,

# umount /mnt/u3

マウントを解除する。

/etc/fstabに以下を追加する。

//<サーバーのIPアドレス>/public /mnt/u3 cifs username=user,password=password,file_mode=0777,dir_mode=0777,iocharset=utf8,noauto,x-systemd.automount 0 0

Raspberry Piを再起動して/mnt/u3にマウント出来ているか確認する。

Page Top

PX-W3U4のデバイスドライバーをインストールする anchor.png

Raspberry Pi(Rasbian)でPX-W3U4を使用できるように,デバイスドライバーを用意する。

Page Top

必要なパッケージを入れる anchor.png

デバイスドライバーをビルドするのに必要なパッケージを,パッケージマネージャーでインストールしておく。

# apt install cmake automake autoconf exfat-utils git wget python
# apt install build-essential yasm libtool
# apt install libssl-dev ffmpeg sqlite3
# apt install raspberrypi-kernel-headers
Page Top

PX-W3U4のデバイスドライバーの取得とインストール anchor.png

PLEX社からLinux用のデバイスドライバーは用意されているが,

  • ソースコードが提供されない
  • Kernelのバージョンが限定されている
  • 動作するプラットフォームやOSが限定されている
    ARMのRaspbian用などは提供されていない。

などの問題がある。

そこで, nns779氏のpx4_drv(chardev版非公式なLinux用ドライバー)をありがたく ;) 使用することにした。

まずデバイスドライバーのソースコードを取得する。

$ cd ~/work
$ git clone https://github.com/nns779/px4_drv.git

nns779氏のpx4_drvをフォークしていくつか修正されたpx4_drvのソースコードを利用する場合は,

$ git clone https://github.com/tsukumijima/px4_drv.git

で取得する。

ソースコードは,~/work/px4_drvに取得される。

Page Top

ファームウェアの抽出とそのインストール anchor.png

この非公式なpx4_drvデバイスドライバーによりPX-W3U4にファームウェアをアップロードする必要がある。
デバイスドライバーをビルドする前に,このファームウェアを公式デバイスドライバーより抽出し,所定の場所にインストールする。

まず,抽出ツールをビルドする。

$ cd ~/work/px4_drv/fwtool/
$ make

公式のWindows用のデバイスドライバー(pxw3u4v1.4.zip)をダウンロードして,そこからファームウェアを抽出する。

$ wget http://plex-net.co.jp/download/pxw3u4v1.4.zip -O pxw3u4v1.4.zip
$ unzip -oj pxwu4v1.4.zip pxw3u4v1/x64/PXW3U4.sys
$ ./fwtool PXW3U4.sys it930x-firmware.bin
fwtool for px4 drivers

Driver file (in)    : PXW3U4.sys
Firmware file (out) : it930x-firmware.bin

Driver description: PX-W3U4 BDA Ver.1.4 64bit
Firmware length: 7013 bytes
Firmware CRC32: df0bf49a
OK.

抽出したファームウェアをシステム上に配置する。

$ sudo mkdir -p /lib/firmware
$ sudo cp it930x-firmware.bin /lib/firmware/
$ cd ..
Page Top

デバイスドライバーのビルドとインストール anchor.png

px4_drvデバイスドライバーをビルドしてインストールする。

$ cd ~/work/px4_drv/driver
$ make
$ sudo make install

これで,ビルドしたデバイスドライバーが/lib/modules/<kernel>/miscにインストールされ,udev用のファイルが/etc/udev/rules.d/99-px4video.rulesにインストールされる。

もしkernelが更新された場合は,再度ビルドし直してインストールする必要がある。

この後PX-W3U4を接続し,正常にデバイスドライバーがロードされているか確認する。

# lsmod | grep px
px4_drv               122880  0

と表示されていればデバイスドライバーがロードされている。

もしロードされていない場合は,

# modprobe px4_drv

として,手動でロードしてみる。

また,

# ls /dev/px*
/dev/px4video0  /dev/px4video1  /dev/px4video2  /dev/px4video3

のようにデバイスファイルが作成されている。

チューナーに対応して,px4video0からISDB-S, ISDB-S, ISDB-T, ISDB-Tというように、SとTが2つずつ割り当てられるデバイスファイルが作成される。

Page Top

デバイスドライバーのアンインストール anchor.png

デバイスドライバーのアンインストールは以下のようにする。

$ cd ~/work/px4_drv/driver
$ sudo make uninstall

ファームウェアのアンインストール。

# rm /lib/firmware/it930x-firmware.bin
Page Top

デバイスドライバーが動作しなくなった anchor.png

突然PX-W3U4が動作しなくなっていた。
PX-W3U4をUSBでPCに接続すると本来はVID:PID=0511:083fで接続するはずなのだが,なぜかVID:PID=048d:9306に変わってしまっていて,デバイスドライバーが正常にロード出来ない。

EEPROMが書き換わってしまったようなのだが元の書き込んであるデータがわからないので,しょうがないのでpx-w3u4が動作しなくなったのようにソースコードを修正してビルドしなおして使用している。

Page Top

LNB電源の出力 anchor.png

PX-W3U4では出力無しと15Vの出力のみに対応している。
デフォルトはLNB電源の出力を行わない。

もしLNB電源の出力を行う場合は,recpt1(録画ツール)を実行する時にパラメータとして--lnb 15を追加する。

Page Top

ICカードリーダー(接触式)を用意する anchor.png

この非公式デバイスドライバーpx4_drvには,PX-W3U4の内蔵カードリーダーで読み書きする機能は用意されていない。
このためB-CASカードを読むために接触式ICカードリーダーを別途用意する必要がある。

一般的な接触式のICカードリーダーであれば問題なく使用できると思われる。

今回は安価な接触式ICカードリーダーのSCR3310 v2.0を購入して使用した。

B-CASカード以外にもマイナンバーカードなんかにも使えるので無駄にはならない。

Page Top

SCR3310 v2.0を使用する場合 anchor.png

ICカードリーダー用のライブラリ等をインスト-ルする。

# apt install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools

USBでカードリーダーと接続して,B-CASカードをカードリーダーに挿入(コネクタ部分がある面を上にする)する。
B-CASカードを認識しているか確認する。

# pcsc_scan | grep B-CAS
Japanese Chijou Digital B-CAS Card (pay TV)

このように表示されればB-CASカードを認識できている。Ctrl + C でコマンドを終了させる。

Page Top

リモコン anchor.png

この非公式デバイスドライバーには,PX-W3U4のリモコン用のデバイスドライバーは用意されていない。
なので,PX-W3U4のリモコンは使用できない。

Mirakurun(チューナー制御・テレビ放送受信・動画配信・番組表受信)を使用してクライアントからリモートでチャンネルを変更できるのでリモコンは特には必要無い。

クライアント・アプリをリモコンを使って操作する方法はいろいろ(IRリモコンとかPCをスマートフォンからリモートコントロールとか・・・)あるので,必要であればそれを使用する。

Page Top

録画用ツール・ライブラリをインストールする anchor.png

録画するためのツールとライブラリをインストールする。

Page Top

libarib25ライブラリーのインストール anchor.png

日本のデジタルテレビ放送は暗号化されて電波で配信されている。テレビ放送を受信してB-CASカードの情報を使って復号化する必要があるのだが,このための復号化するプログラムをライブラリ化したのがlibarib25ライブラリー。

ソースコードからビルドしてインストールする。

$ cd ~/work
$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
Page Top

録画ツールrecpt1(stz版)のインストール anchor.png

recpt1(stz版)は,チューナーデバイスにアクセスしてテレビ放送を録画するツール。PC-W3U4でも使用できるみたいだ。

ソースコードを取得して,テレビ放送をB-CASカードを使って復号化出来るようにするため--enable-b25オプションを付けて上記のlibarib25ライブラリーを使えるようにビルドしてインストールする。

$ cd ~/work
$ git clone https://github.com/stz2012/recpt1.git
$ cd recpt1/recpt1

パッチfilerecpt1.patchを当てる。

$ patch < ../recpt1.patch

ビルドする。

$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

以下のようにして動作テストをしてみる。

$ cd
$ recpt1 --b25 --strip 24 10 test1.ts

テレビ放送が保存出来ていれば動作は大丈夫。もしNo signalの場合,チャンネルの24を変えて実行してみる。チャンネル番号は地域ごとに違っているが,こちらから確認出来る。

Page Top

MirakurunとEPGStationのインストール anchor.png

Mirakurun(チューナー制御・テレビ放送受信・動画配信・番組表受信)とEPGStation(番組表表示・録画予約・録画・視聴・動画配信)をインストールする。

素晴らしいソフトウェアを作ってくれた作者に感謝です*1 :)

Page Top

Mirakurunのインストール anchor.png

Mirakurunは,地デジ・BS/CSチューナーを使用してテレビ放送を受信し,受信データをネットワークに配信するためのチューナーサーバー。
これにより,ネットワークに接続した複数のクライアントでテレビ放送を視聴・録画することが出来るようになる。

動作にはNode.jsのv10かv12かv14が必要みたいだ。RasbianにインストールされているNode.jsを確認する。

$ node -v
v10.24.0

Rasbian BusterでインストールされているNode.jsはv10.24.0になっている。とりあえずこのまま試してみた。
後日Mirakurunをバージョン3.7.1に更新しようとしたところ,v12かv14かv16のNode.jsが必要になったので,Node.jsをバージョン14.17.4に更新した。(バージョン3.9.0-rc3からv14/v16/v18になった。)
もし未インストール(更新も)の場合,v16がいいのかな。

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt install nodejs
$ sudo apt install nodejs npm

必要なツールとMirakurunはnpmを使ってインストール出来る。

$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe-perm --production

テレビ放送を復号化(スクランブル解除)するツールのarib-b25-stream-testとテスト用の録画ツールとしてrivarun(Mirakurunクライアント)をインストールする。

$ sudo npm install arib-b25-stream-test -g --unsafe-perm
$ sudo npm install rivarun -g

インストールが完了すると既にMirakurunは動作している。
以下のコマンドで,Mirakurunのstatusがonlineなら正常起動している。

$ sudo pm2 status

Mirakurunを更新する場合は,

$ sudo mirakurun stop
$ sudo npm install mirakurun -g --unsafe-perm --production

のようにする。

Mirakurunや録画ツールをアンインストールする場合は,

$ sudo pm2 stop mirakurun-server
$ sudo pm2 delete mirakurun-server
$ sudo pm2 save
$ sudo npm uninstall mirakurun -g --unsafe-perm
$ sudo npm uninstall arib-b25-stream-test -g --unsafe-perm
$ sudo npm uninstall rivarun -g

でアンインストールできる。

次に,Mirakurunの設定を行う。

Page Top

サーバーの設定 anchor.png

/usr/local/etc/mirakurun/server.ymlを編集して,サーバーの設定を行う。

logLevel: -1
disableIPv6: true

にして,ログをなるべく少なくなるようにしてみた。IPv6は使わない。

Page Top

チューナーの設定 anchor.png

/usr/local/etc/mirakurun/tuners.ymlを編集して,チューナー(PX-W3U4)の設定を行う。
以下のように設定した。

filetuners.yml
- name: PX4-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX4-S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX4-T1
  types:
    - GR
  command: recpt1 --device /dev/px4video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX4-T2
  types:
    - GR
  command: recpt1 --device /dev/px4video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

テレビ放送の復号化(スクランブル解除)は,recpt1でも行えるがarib-b25-stream-testで行うようにした。
これはMirakurun側で復号化を行わず,クライアント側で復号化を行いたい場合に対応するため。

Page Top

チャンネル設定 anchor.png

/usr/local/etc/mirakurun/channels.ymlを設定する。
下記のコマンドでチャンネルスキャンを実行すると,設定ファイルを作成してくれる。かなり時間がかかる。

$ sudo curl -X PUT "http://<mirakurunのIPAddress>:40772/api/config/channels/scan?type=GR&refresh=true"

うまく行けば,/usr/local/etc/mirakurun/channels.ymlファイルに,地上波のチャンネルが設定される。

BSとCSは,

$ sudo curl -X PUT "http://<mirakurunのIPAddress>:40772/api/config/channels/scan?type=BS&refresh=true"
$ sudo curl -X PUT "http://<mirakurunのIPAddress>:40772/api/config/channels/scan?type=CS&refresh=true"

でチャンネルが設定される。(BS/CSはバージョン3.4.0から対応されている。)

/usr/local/etc/mirakurun/channels.ymlを作成・編集しても問題なかった。

filechannels.yml
- name: NHKEテレ・大阪
  type: GR
  channel: '13'
- name: 読売テレビ
  type: GR
  channel: '14'
- name: ABCテレビ
  type: GR
  channel: '15'
- name: MBS毎日放送
  type: GR
  channel: '16'
- name: 関西テレビ
  type: GR
  channel: '17'
- name: テレビ大阪
  type: GR
  channel: '18'
- name: スカパー!ナビ
  type: GR
  channel: '20'
- name: NHK総合・大阪
  type: GR
  channel: '24'
- name: サンテレビ
  type: GR
  channel: '26'
- name: NHK BS
  type: BS
  channel: BS15_0
  serviceId: 101
- name: BS日テレ
  type: BS
  channel: BS13_0
  serviceId: 141
- name: BS朝日
  type: BS
  channel: BS01_0
  serviceId: 151
- name: BS-TBS
  type: BS
  channel: BS01_1
  serviceId: 161
- name: BSテレ東
  type: BS
  channel: BS01_2
  serviceId: 171
- name: BSフジ
  type: BS
  channel: BS13_1
  serviceId: 181
- name: WOWOWプライム
  type: BS
  channel: BS03_0
  serviceId: 191
- name: WOWOWライブ
  type: BS
  channel: BS05_0
  serviceId: 192
- name: WOWOWシネマ
  type: BS
  channel: BS05_1
  serviceId: 193
- name: スター・チャンネル
  type: BS
  channel: BS15_1
  serviceId: 200
- name: BSイレブン
  type: BS
  channel: BS09_0
  serviceId: 211
- name: BSトゥエルビ
  type: BS
  channel: BS09_2
  serviceId: 222
- name: 放送大学テレビ(メイン)
  type: BS
  channel: BS11_0
  serviceId: 231
- name: 放送大学テレビ(サブ)
  type: BS
  channel: BS11_0
  serviceId: 232
- name: グリーンチャンネル
  type: BS
  channel: BS21_2
  serviceId: 234
- name: BSアニマックス
  type: BS
  channel: BS13_2
  serviceId: 236
- name: J SPORTS 1
  type: BS
  channel: BS19_1
  serviceId: 242
- name: J SPORTS 2
  type: BS
  channel: BS19_2
  serviceId: 243
- name: J SPORTS 3
  type: BS
  channel: BS19_3
  serviceId: 244
- name: J SPORTS 4
  type: BS
  channel: BS19_0
  serviceId: 245
- name: BS釣りビジョン
  type: BS
  channel: BS11_1
  serviceId: 251
- name: WOWOWプラス
  type: BS
  channel: BS21_0
  serviceId: 252
- name: 日本映画専門ch
  type: BS
  channel: BS21_1
  serviceId: 255
- name: ディズニーch
  type: BS
  channel: BS23_0
  serviceId: 256
- name: BS松竹東急
  type: BS
  channel: BS23_3
  serviceId: 260
- name: BSJapanext
  type: BS
  channel: BS23_2
  serviceId: 263
- name: BSよしもと
  type: BS
  channel: BS23_1
  serviceId: 265
- name: 東映チャンネル
  type: CS
  channel: CS8
  serviceId: 218
- name: 衛星劇場
  type: CS
  channel: CS10
  serviceId: 219
- name: 映画・chNECO
  type: CS
  channel: CS24
  serviceId: 223
- name: ザ・シネマ
  type: CS
  channel: CS14
  serviceId: 227
- name: ムービープラス
  type: CS
  channel: CS18
  serviceId: 240
- name: スカイA
  type: CS
  channel: CS4
  serviceId: 250
- name: GAORA
  type: CS
  channel: CS12
  serviceId: 254
- name: 日テレジータス
  type: CS
  channel: CS24
  serviceId: 257
- name: ゴルフネットワーク
  type: CS
  channel: CS18
  serviceId: 262
- name: SKY STAGE
  type: CS
  channel: CS16
  serviceId: 290
- name: 時代劇専門ch
  type: CS
  channel: CS4
  serviceId: 292
- name: ファミリー劇場
  type: CS
  channel: CS14
  serviceId: 293
- name: ホームドラマch
  type: CS
  channel: CS6
  serviceId: 294
- name: MONDO TV
  type: CS
  channel: CS24
  serviceId: 295
- name: TBSチャンネル1
  type: CS
  channel: CS2
  serviceId: 296
- name: TBSチャンネル2
  type: CS
  channel: CS22
  serviceId: 297
- name: テレ朝チャンネル1
  type: CS
  channel: CS2
  serviceId: 298
- name: テレ朝チャンネル2
  type: CS
  channel: CS2
  serviceId: 299
- name: 日テレプラス
  type: CS
  channel: CS24
  serviceId: 300
- name: エンタメ~テレ
  type: CS
  channel: CS4
  serviceId: 301
- name: チャンネル銀河
  type: CS
  channel: CS18
  serviceId: 305
- name: フジテレビONE
  type: CS
  channel: CS20
  serviceId: 307
- name: フジテレビTWO
  type: CS
  channel: CS20
  serviceId: 308
- name: フジテレビNEXT
  type: CS
  channel: CS20
  serviceId: 309
- name: スーパー!ドラマTV
  type: CS
  channel: CS14
  serviceId: 310
- name: アクションチャンネル
  type: CS
  channel: CS16
  serviceId: 311
- name: Dlife
  type: CS
  channel: CS22
  serviceId: 312
- name: LaLaTV
  type: CS
  channel: CS18
  serviceId: 314
- name: ミステリーチャンネル
  type: CS
  channel: CS16
  serviceId: 316
- name: KBS World
  type: CS
  channel: CS10
  serviceId: 317
- name: Mnet
  type: CS
  channel: CS8
  serviceId: 318
- name: スペシャプラス
  type: CS
  channel: CS16
  serviceId: 321
- name: スペースシャワーTV
  type: CS
  channel: CS20
  serviceId: 322
- name: MTV
  type: CS
  channel: CS4
  serviceId: 323
- name: ミュージック・エア
  type: CS
  channel: CS6
  serviceId: 324
- name: エムオン!
  type: CS
  channel: CS12
  serviceId: 325
- name: 歌謡ポップス
  type: CS
  channel: CS6
  serviceId: 329
- name: キッズステーション
  type: CS
  channel: CS12
  serviceId: 330
- name: カートゥーン
  type: CS
  channel: CS6
  serviceId: 331
- name: AT-X
  type: CS
  channel: CS16
  serviceId: 333
- name: ディズニージュニア
  type: CS
  channel: CS2
  serviceId: 339
- name: ディスカバリー
  type: CS
  channel: CS6
  serviceId: 340
- name: アニマルプラネット
  type: CS
  channel: CS6
  serviceId: 341
- name: ヒストリーチャンネル
  type: CS
  channel: CS14
  serviceId: 342
- name: ナショジオ
  type: CS
  channel: CS12
  serviceId: 343
- name: 日テレNEWS24
  type: CS
  channel: CS8
  serviceId: 349
- name: TBS NEWS
  type: CS
  channel: CS22
  serviceId: 351
- name: BBCニュース
  type: CS
  channel: CS16
  serviceId: 353
- name: CNNj
  type: CS
  channel: CS6
  serviceId: 354
- name: 囲碁・将棋チャンネル
  type: CS
  channel: CS6
  serviceId: 363
- name: スポーツライブ+
  type: CS
  channel: CS10
  serviceId: 800
- name: スカチャン1
  type: CS
  channel: CS10
  serviceId: 801

住んでいる所が大阪なんで,↑のようになった。BS/CSは全国共通だと思う。

ここ数年,放送が追加・停波・変更などがあって以下のように修正している。

  • 06/01/2021 修正
    ディズニー・チャンネル(BS3_2 → BS23_0)に修正。
  • 03/27/2022 修正
    BSよしもと(BS23_1),BSJapanext(BS23_2),BS松竹東急(BS23_3)を追加。
  • 11/01/2022 修正
    BSスカパー!(BS11_0)が停波したので削除。
    放送大学ex(BS11_1,ch231) → 放送大学テレビ(メイン)(BS11_0,ch231),放送大学on(BS11_1,ch232) → 放送大学テレビ(サブ)(BS11_0,ch232)に名称変更・繰り上がったので修正。
    BS釣りビジョン(BS11_2 → BS11_1)が繰り上がったので修正。
  • 12/01/2023 修正
    NHK BS1NHK BS(BS15_0のまま)になったので修正,NHK プレミアム(BS03_1)が停波(能登半島地震後,臨時目的放送として継続放送中)したので削除。
  • 03/01/2024 修正
    FOX(CS22,ch312)の名称がDlife(CS22,ch312)に変更されたので修正。
  • 06/01/2024 修正
    スター・チャンネル1(BS09_1, ch200)が停波したので削除。
    スター・チャンネル2(BS15_1, ch201) → スター・チャンネル(BS15_1, ch200)になったので修正。
    スター・チャンネル3(BS15_1, ch202)が停波したので削除。
Page Top

ログの管理 anchor.png

ログファイルが肥大化しないように,以下のパッケージをインストールする。

$ sudo pm2 install pm2-logrotate

/etc/logrotate.d/mirakurunファイルを下記の内容で作成する。

/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
{
  daily
  compress
  rotate 7
  missingok
  notifempty
}
Page Top

Mirakurunの再起動 anchor.png

/usr/local/etc/mirakurun/channels.ymlが作成・修正したら,Mirakurunを再起動する。

$ sudo mirakurun restart

Mirakurunがテレビ放送電波を受信してチャンネル情報等を登録するのを,15-30分程度待つ。

録画出来るか試してみる。

$ rivarun --mirakurun localhost:40772 --b25 --ch GR/22 15 22.ts

15秒の録画ファイルが出来ていて,再生できれば問題ない。

次に他のPCでVLCを使ってMirakurunで配信される動画ストリームを再生してみる。
VLCのメニューのメディアを開く>ネットワークを開くで,

http://<mirakurunのIPAddress>:40772/api/channels/GR/<チャンネル番号>/stream

とか

http://<mirakurunのIPAddress>:40772/api/channels/BS/<チャンネル名>/services/<サービスID>/stream

で,地デジやBS放送が視聴できればMirakurunは正常に動作している。
チャンネル番号やサービスIDは,上記の/usr/local/etc/mirakurun/channels.ymlに設定されている値を使う。

WEBブラウザで,http://<mirakurunのIPAddress>:40772 にアクセスする。
Mirakurunの動作や設定管理が行えるので,必要であれば追加の設定をする。

Page Top

EPGStationのインストール anchor.png

EPGStationはテレビ放送の視聴・録画・動画配信・番組表予約に対応した録画サーバー。
テレビ放送の番組を確認したり,録画予約をしたり,録画を行ったり,録画データの管理,テレビ・録画の視聴なんかがWEBブラウザ上で出来るようになる。

EPGStationはTVチューナーとしてMirakurunを使用している。 EPGStationをMirakurunが動作しているマシン以外のマシンで動かすことも出来るが,今回はRaspberry Piで両方動かすようにしてみた。

Node.jsはv14またはv16(バージョン2.7.0からv18)が必要。またffmpegSQLite3MySQLのDBも必要。

次のようにしてインストールした。

$ cd
$ git clone https://github.com/l3tnun/EPGStation.git
$ cd EPGStation
$ npm run all-install
$ npm run build

このインストール作業は,かなり時間がかかる。
うまく行ったら設定ファイルを用意する。

$ cp config/config.yml.template config/config.yml
$ cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml
$ cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml
$ cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml
$ cp config/enc.jp config/enc.jp

DBにはデフォルトのSQLiteを使っている。SQLiteで正規表現を使えるようにする。

$ wget https://www.sqlite.org/2019/sqlite-amalgamation-3290000.zip
$ wget https://www.sqlite.org/2019/sqlite-src-3290000.zip
$ unzip sqlite-amalgamation-3290000.zip
$ unzip sqlite-src-3290000.zip
$ cp sqlite-src-3290000/ext/misc/regexp.c sqlite-amalgamation-3290000
$ cd sqlite-amalgamation-3290000
$ gcc -g -fPIC -shared regexp.c -o regexp.so
$ cp regexp.so ~/work/EPGStation/data/
Page Top

EPGStationの設定 anchor.png

config/config.ymlファイルで設定を行う。
設定できるオプションとかいろいろある。作者のページを参照して設定する。

sqlite:
    extensions:
        - '/home/yuji/EPGStation/data/regexp.so'            <-- 正規表現が使える
    regexp: true

ffmpeg: '/usr/bin/ffmpeg'                                   <-- ffmpegのパスを設定
ffprobe: '/usr/bin/ffprobe'                                 <-- ffprobeのパスを設定

recorded:
    - name: recorded
      path: '/mnt/u3/video/record'                          <--  録画ファイルの保存先を設定

「Stream: live: MP4: 」セクションに以下を追加する。(リアルタイム視聴用)

  - name: h264_omx_4Mbps
    cmd:
          '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -c:a aac -ar 48000 -ac 2 -b:a 64k
          -c:v h264_omx -b:v 4M -profile:v baseline -preset veryfast -tune fastdecode,zerolatency
          -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4
          pipe:1'

config/enc.jsファイルを修正する。(録画エンコード用)
14行目あたりを

const codec = 'h264_omx';

に変更。
35行目あたりを

if (videoHeight > 480) {
   videoFilter += ',scale=-2:480'
}

に変更。
40行目あたりに以下を追加する。

Array.prototype.push.apply(args, ['-b:v', '1500k']);

EPGStationを起動する。

$ sudo pm2 startup
$ sudo pm2 start dist/index.js --name "epgstation"
$ sudo pm2 save

起動しているか確認する。

$ sudo pm2 list

WEBブラウザで以下のようにEPGStationアクセスする。

http://<EPGStationのIPAddress>:8888

しばらくしてから,番組表をクリックして番組表が表示されれば動作している。

epgstation.png

これで,EPGSTationでTV放送の視聴や番組表を見たり,録画予約などの操作ができる :)

Page Top

EPGStationの更新 anchor.png

バージョンアップ等で更新する場合は,

$ sudo pm2 stop epgstation
$ cd ~/EPGStation
$ git pull
$ npm run all-install
$ npm run build

とすると,更新できる。
もしエラー等が出てうまくインストール出来ない場合は,npmを更新してみるとかnpmのcacheをクリアーしたりする。

$ sudo npm install -g npm

その後,再度EPGStationを更新してみる。

うまく更新ができたら,EPGStationを再起動する。

$ sudo pm2 start dist/index.js --name "epgstation"
Page Top

テレビ放送や録画したデータを見る方法 anchor.png

Mirakurun/EPGStationの環境でテレビ放送の視聴や録画した動画データを再生するには,いくつか方法がある。

  • テレビ放送の視聴
    • WEBブラウザでEPGStationから視聴する
      WEBブラウザを使ってEPGStationの放送中からテレビ放送を視聴することができる。
      WEBブラウザで視聴する場合は,放送のMPEG2そのまま無変換で視聴する方法と,ffmpegでリアルタイムエンコードしたものを視聴する方法があるが,Rspberry Pi 4Bではリアルタイムエンコードの処理速度の問題でカクカクになってしまう。MP4でh264_omxを選んでもリアルタイムエンコードしながら視聴するのはちょっと厳しい。
      EPGStationを十分な速度が出る別のマシンで動作させた場合,リアルタイムエンコードでの視聴も問題はない。
    • WindowsマシンでTVTestを使ってテレビ放送を視聴する
      BonDriver_MirakurunもしくはBonDriver_EPGStationをTVTestのBonDriverに使うことで,TVTestでMirakurun(もしくはEPGStation)をチューナーとしてテレビ放送を視聴できる。
      fileビルドしたBonDriver_Mirakurun fileビルドしたBonDriver_EPGStation
    • MacでMeruruを使ってテレビ放送を視聴する
    • WindowsやLinux,MacでMirakTestでテレビ放送を視聴する
      プラグインで機能を拡張できる。
    • VLCなどのマルチメディアプレーヤーで視聴する
      MirakurunまたはEPGStationでストリーミング配信して,それをVLCなどのマルチメディアプレーヤーで視聴できる。スマートフォンやLinuxマシン,Windowsマシンなど多くの環境で使用できる。
      TV.m3u8ファイルのようなプレイリストを作っておけば,マルチメディアプレーヤー側で放送局を切り替えて視聴出来るようになる。
      http://<Mirakurunサーバー>:40772/api/iptv/playlist でプレイリストに直接アクセスできる。
      http://<EPGSStationサーバー>:8888/api/iptv/channel.m3u8?mode=1 のようにするとリアルタイムエンコードするプレイリストに直接アクセスできる。
      ただVLCだとプレイリストでのチャンネル選択が操作しづらい。
      PotPlayer(Windowsのみ)だとプレイリストでのチャンネル選択も比較的やりやすいのでおすすめ。
    • KodiPVR IPTV Simple Clientアドオンを使ってテレビ放送を視聴する
      KodiはWindows,Linux,Android,Raspberry Pi,macOS, iOSなんかで動作するメディアプレーヤー・アプリ。
      MirakurunのM3U Playlist(チャンネル)とXMLTV(番組表)をKodiのIPTV Simple Clientアドオンに設定すればテレビ放送が視聴できる。
      Fire TV Stickを使うと,リビングにあるテレビ(チューナーレステレビでも)でネットワーク経由で視聴できるようになって快適。
    • スマートフォンのアプリでテレビ放送を視聴する
      IPTVクライアントアプリでMirakurunやEPGStationのM3U PlaylistとXMLTVを登録すれば,風呂でもテレビが見れる :)
  • 録画予約をする
    WEBブラウザ(Windows,Linux,Android端末...)からEPGStationを開いて,番組表や検索結果から録画予約・録画が出来る。
    VPNで家のNetworkに接続すれば,外出先から録画予約をすることも出来る。
  • 録画した動画データを再生
    • WEBブラウザでEPGStationにアクセスして録画データを再生する
    • EPGStationで録画データーをストリーミング配信(HLSも可)して,それをVLCなどのマルチメディアプレーヤーやWEBブラウザなどで視聴する
    • 録画した動画ファイルをDLNAメディアサーバーなどで扱って,DLNAクライアントで視聴する
    • 録画した動画ファイルをSambaなどでファイル共有して,VLCなどのマルチメディアプレーヤーで視聴する

EPGStationで放送中のテレビ放送をリアルタイムエンコードしてストリーム配信してVLCなんかで視聴する場合,Raspberry Pi4でffmpegによるリアルタイムエンコードを行うと動画がとぎれとぎれになってしまった。
m2tsの無変換(リアルタイムエンコードはしない)でストリーム配信して視聴する場合,使用しているネットワーク帯域が十分であれば(NHK BSプレミアムだと18Mbps程度が必要)うまく視聴できる。家のネットワーク環境ではギリギリだった。

録画した動画ファイルを再生する場合は,ネットワーク上のファイルサーバーに保存しても特にとぎれとぎれになることはないみたいだ。


*1 寄付した。

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 11116, today: 16, yesterday: 0
Last-modified: 2021-08-21 (Sat) 09:57:30 (JST) (1141d) by yuji