Mirakurunのインストール
Mirakurunは,地デジ・BS/CSチューナーを使用してテレビ放送を受信し,受信データをネットワークに配信するためのチューナーサーバー。
これにより,ネットワークに接続した複数のクライアントでテレビ放送を視聴・録画することが出来るようになる。
動作にはNode.jsのv10かv12かv14が必要みたいだ。RasbianにインストールされているNode.jsを確認する。
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なら正常起動している。
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の設定を行う。
サーバーの設定
/usr/local/etc/mirakurun/server.ymlを編集して,サーバーの設定を行う。
logLevel: -1
disableIPv6: true
にして,ログをなるべく少なくなるようにしてみた。IPv6は使わない。
チューナーの設定
/usr/local/etc/mirakurun/tuners.ymlを編集して,チューナー(PX-W3U4)の設定を行う。
以下のように設定した。
- 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側で復号化を行わず,クライアント側で復号化を行いたい場合に対応するため。
チャンネル設定
/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を作成・編集しても問題なかった。
- 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 BS1がNHK 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)が停波したので削除。
ログの管理
ログファイルが肥大化しないように,以下のパッケージをインストールする。
$ 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
}
Mirakurunの再起動
/usr/local/etc/mirakurun/channels.ymlが作成・修正したら,Mirakurunを再起動する。
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の動作や設定管理が行えるので,必要であれば追加の設定をする。
EPGStationのインストール
EPGStationはテレビ放送の視聴・録画・動画配信・番組表予約に対応した録画サーバー。
テレビ放送の番組を確認したり,録画予約をしたり,録画を行ったり,録画データの管理,テレビ・録画の視聴なんかがWEBブラウザ上で出来るようになる。
EPGStationはTVチューナーとしてMirakurunを使用している。
EPGStationをMirakurunが動作しているマシン以外のマシンで動かすことも出来るが,今回はRaspberry Piで両方動かすようにしてみた。
Node.jsはv14またはv16(バージョン2.7.0からv18)が必要。またffmpeg,SQLite3かMySQLの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/
EPGStationの設定
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
起動しているか確認する。
WEBブラウザで以下のようにEPGStationアクセスする。
http://<EPGStationのIPAddress>:8888
しばらくしてから,番組表をクリックして番組表が表示されれば動作している。
これで,EPGSTationでTV放送の視聴や番組表を見たり,録画予約などの操作ができる
EPGStationの更新
バージョンアップ等で更新する場合は,
$ 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"
新しくコメントをつける