Chinachuのrecpt1をMirakurunとRivarunに入れ替える

2018年7月8日DTVLinux, DTV, Chinachu, Ubuntu

mirakurun

今までChinachu用にはrecpt1を使っていたが、MirakurunとRivarunがリリースされたので今更ながらmirakurunを噛ます設定に変更。Chinachu Ganma待機とも言える。そのときのメモ書き。

Mirakurunとは

recpt1をハックして使用されるチューナー制御用のミドルウェア、と言えば良いのだろうか。
rivarunというクライアントも用意されていて、TVTestをクライアントとして使用することにも対応しているそう(当方Windows環境がないので未確認)
詳細は公式サイトから。

Mirakurun をリリースしました。
※2017年1月追記: この記事はだいぶ内容が古くなっています。ご注意ください。 ※ロゴは仮 というわけで Mirakurun (npm) をリリースしました。と言っても npm に最初のバージョンを publish したのは3月中旬頃だったと記憶しているので、今更なお知らせかなって感じで...

それでは、インストールしてみる。Ubuntu 14.04 LTS環境。

最新のnode.jsのインストール

Ubuntuでデフォルトで入っているnode.jsのバージョンを調べたところ、下記の通りだった。あ、ちなみに当方の環境はUbuntu 14.04 LTSです。

$ node -v
v6.6.0

v6.5以上なので問題なし。そのままMirakurunをインストールするのに必要なパッケージをインストールする。

$sudo npm install pm2 -g
$sudo npm install mirakurun -g --unsafe --production
$sudo npm install rivarun -g
$sudo npm install arib-b25-stream-test -g --unsafe
$sudo Mirakurunが動作していることを確認する

Mirakurunはサービスとして既に動いているはずなので、動作を確認。

$ ps aux | grep Mirakurun
root      5913  3.6  0.6 938836 53324 ?        S < sl 11:54   0:02 Mirakurun: Server

問題なし。

Mirakurunの設定

下記で設定に入る。

$sudo mirakurun config server

デフォルトではこんな感じだった。

# logLevel:logLevel: 2

# path:
path: /var/run/mirakurun.sock

# port:
# You can change this if port conflicted.
# Don't expose this port on the internet, not even with NAPT.
# Use this in LAN or VPN.
# `~` to disable TCP port listening.
port: 40772

特段変更する場所なし。

チューナーの設定

当方の環境はPT2を二枚差しなので、その設定をする。
設定はどうやらChinachuの書き方とはちょっと違うっぽい。

$sudo mirakurun config tuners

デフォルトでPT3用の設定が入っているので、こいつをコピペして適当に作った。

isDisabledをtrueからfalseにするのを忘れないように。

- name: PT3-S1
types:
- BS
- CS
command: recpt1 --device /dev/pt3video0 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-S2
types:
- BS
- CS
command: recpt1 --device /dev/pt3video1 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-S3
types:
- BS
- CS
command: recpt1 --device /dev/pt3video4 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-S4
types:
- BS
- CS
command: recpt1 --device /dev/pt3video5 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-T1
types:
- GR
command: recpt1 --device /dev/pt3video2 - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PT3-T2
types:
- GR
command: recpt1 --device /dev/pt3video3 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-T3
types:
- GR
command: recpt1 --device /dev/pt3video6 - -
decoder: arib-b25-stream-test
isDisabled: false

- name: PT3-T4
types:
- GR
command: recpt1 --device /dev/pt3video7 - -
decoder: arib-b25-stream-test
isDisabled: false

チャンネル設定

一番めんどいやつ。先人のものを参考に、というかまるまる使用して書いた。正直この記事を読むより下記の記事を読んだ方が100倍ためになる。

Mirakurunのインストール手順(Ubuntu・Debian・CentOS)
 Chinachu Airのチューナー制御部であるMirakurunのインストール手順と録画方法について説明し…

ただし、旅チャンネルが終了しMONDO TVが始まったので、その点のみ書き換えた。

- name: MONDO TV
type: CS
channel: CS24
serviceId: 295
isDisabled: true

そしてmirakurunを再起動。

$sudo mirakurun restart
[PM2] Applying action restartProcessId on app [mirakurun-server](ids: 0)
[PM2] [mirakurun-server](0) ✓
┌──────────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
│ mirakurun-server │ 0 │ fork │ 7922 │ online │ 1 │ 0s │ 49% │ 12.6 MB │ disabled │
└──────────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
Use `pm2 show &lt;id|name&gt;` to get more details about an app

きちんと動いているかどうかテスト

mirakurunは再起動するとepgの再取得に入る。このときにrecpt1を使用するので、まずはrecpt1が動いているかどうか確認。

$ ps aux | grep recpt1
root      8204  0.2  0.0  71352  1016 ?        S < l  12:12   0:00 recpt1 --device /dev/pt3video1 15 BS05_1 - -
root      8214  0.0  0.0  46620   772 ?        S <   12:12   0:00 recpt1 --device /dev/pt3video4 15 BS09_1 - -
root     10032  0.0  0.0  71208   768 ?        S < l  12:17   0:00 recpt1 --device /dev/pt3video5 15 BS11_1 - -
 

動いてる。epgの取得が終わると/usr/local/var/db/mirakurun/配下にprograms.jsonとservices.jsonが出来る。前者はEPG、後者はチャンネルリスト。
ちなみに、当方環境では結構時間がかかった。また、取得できないチャンネルがあるとrecpt1を離さなくなることがある(その場合はプロセスをkillするしかない)ため、うつらないチャンネルは極力外すべき。

チャンネルリストのほうを見ると正式な名称が入ってきているので、mirakurun config channelsで設定する内容はND単位(mirakurunの設定でいうところのchannel単位)で良かったのかもしれない。

Chinachuの書き換え

下記の公式通り。

一応補足しておくと、config.jsonの冒頭にmirakurunと連動するために下記を追記。

"schedulerMirakurunPath": "http://unix:/var/run/mirakurun.sock:/",
"schedulerEpgRecordTime": 5,
"operSchedulerProcessTime" : 5000,
"operSchedulerIntervalTime": 600000,
"operRecOffsetStart": 3000,
"operRecOffsetEnd": -2000,</pre>
チューナーの設定はrivarunを使用するように変更。
<pre class="lang:default decode:true">  "tuners": [
    { 
      "name"        : "PT3-S1",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch &lt;type&gt;/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-S2",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch &lt;type&gt;/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-S3",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch &lt;type&gt;/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-S4",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch &lt;type&gt;/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-T1",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch GR/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-T2",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch GR/&lt;channel&gt; - -"
    },
    { 
      "name"        : "PT3-T3",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch GR/&lt;channel&gt; - -"
    },
    {
      "name"        : "PT3-T4",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "rivarun --b25 --priority 1 --sid &lt;sid&gt; --ch GR/&lt;channel&gt; - -"
    }
  ],

チャンネルは先ほど設定したMirakurunに合わせる形で、チューナー部分に記載したtype、channel、sidを定義。

"channels": [
{ "type": "GR", "channel": "27" },
{ "type": "GR", "channel": "26" },
{ "type": "GR", "channel": "25" },
{ "type": "GR", "channel": "24" },
{ "type": "GR", "channel": "22" },
{ "type": "GR", "channel": "23" },
{ "type": "GR", "channel": "21" },
{ "type": "GR", "channel": "16" },

{ "type": "BS", "channel": "BS15_0", "sid": "101" },
{ "type": "BS", "channel": "BS15_0", "sid": "102" },
{ "type": "BS", "channel": "BS15_1", "sid": "103" },
{ "type": "BS", "channel": "BS15_1", "sid": "104" },
{ "type": "BS", "channel": "BS13_0", "sid": "141" },
{ "type": "BS", "channel": "BS13_0", "sid": "142" },
{ "type": "BS", "channel": "BS01_0", "sid": "151" },
{ "type": "BS", "channel": "BS01_0", "sid": "152" },
{ "type": "BS", "channel": "BS01_1", "sid": "161" },
{ "type": "BS", "channel": "BS03_1", "sid": "171" },
{ "type": "BS", "channel": "BS13_1", "sid": "181" },
{ "type": "BS", "channel": "BS03_0", "sid": "191" },

{ "type": "BS", "channel": "BS05_0", "sid": "192" },
{ "type": "BS", "channel": "BS05_1", "sid": "193" },
{ "type": "BS", "channel": "BS09_1", "sid": "200" },
{ "type": "BS", "channel": "BS07_0", "sid": "201" },
{ "type": "BS", "channel": "BS07_0", "sid": "202" },
{ "type": "BS", "channel": "BS09_0", "sid": "211" },
{ "type": "BS", "channel": "BS09_2", "sid": "222" },
{ "type": "BS", "channel": "BS11_2", "sid": "231" },
{ "type": "BS", "channel": "BS11_2", "sid": "232" },
{ "type": "BS", "channel": "BS11_2", "sid": "233" },
{ "type": "BS", "channel": "BS19_0", "sid": "234" },
{ "type": "BS", "channel": "BS07_1", "sid": "236" },
{ "type": "BS", "channel": "BS11_0", "sid": "238" },
{ "type": "BS", "channel": "BS11_1", "sid": "241" },
{ "type": "BS", "channel": "BS19_1", "sid": "242" },
{ "type": "BS", "channel": "BS19_2", "sid": "243" },
{ "type": "BS", "channel": "BS21_1", "sid": "244" },
{ "type": "BS", "channel": "BS21_2", "sid": "245" },
{ "type": "BS", "channel": "BS23_0", "sid": "251" },
{ "type": "BS", "channel": "BS21_0", "sid": "252" },
{ "type": "BS", "channel": "BS23_1", "sid": "255" },
{ "type": "BS", "channel": "BS07_2", "sid": "256" },

{ "type": "BS", "channel": "BS23_2", "sid": "258" },
{ "type": "CS", "channel": "CS8", "sid": "55" },
{ "type": "CS", "channel": "CS4", "sid": "100" },
{ "type": "CS", "channel": "CS22", "sid": "161" },
{ "type": "CS", "channel": "CS8", "sid": "218" },
{ "type": "CS", "channel": "CS8", "sid": "219" },
{ "type": "CS", "channel": "CS4", "sid": "223" },
{ "type": "CS", "channel": "CS4", "sid": "227" },
{ "type": "CS", "channel": "CS18", "sid": "240" },
{ "type": "CS", "channel": "CS4", "sid": "250" },
{ "type": "CS", "channel": "CS12", "sid": "254" },
{ "type": "CS", "channel": "CS24", "sid": "257" },
{ "type": "CS", "channel": "CS18", "sid": "262" },
{ "type": "CS", "channel": "CS16", "sid": "290" },
{ "type": "CS", "channel": "CS14", "sid": "292" },
{ "type": "CS", "channel": "CS14", "sid": "293" },
{ "type": "CS", "channel": "CS6", "sid": "294" },
{ "type": "CS", "channel": "CS2", "sid": "296" },
{ "type": "CS", "channel": "CS22", "sid": "297" },
{ "type": "CS", "channel": "CS2", "sid": "298" },
{ "type": "CS", "channel": "CS2", "sid": "299" },
{ "type": "CS", "channel": "CS24", "sid": "300" },
{ "type": "CS", "channel": "CS16", "sid": "305" },
{ "type": "CS", "channel": "CS20", "sid": "307" },
{ "type": "CS", "channel": "CS20", "sid": "308" },
{ "type": "CS", "channel": "CS20", "sid": "309" },
{ "type": "CS", "channel": "CS14", "sid": "310" },
{ "type": "CS", "channel": "CS16", "sid": "311" },
{ "type": "CS", "channel": "CS22", "sid": "312" },
{ "type": "CS", "channel": "CS18", "sid": "314" },
{ "type": "CS", "channel": "CS24", "sid": "316" },
{ "type": "CS", "channel": "CS24", "sid": "321" },
{ "type": "CS", "channel": "CS22", "sid": "322" },
{ "type": "CS", "channel": "CS6", "sid": "323" },
{ "type": "CS", "channel": "CS12", "sid": "325" },
{ "type": "CS", "channel": "CS8", "sid": "326" },
{ "type": "CS", "channel": "CS6", "sid": "329" },
{ "type": "CS", "channel": "CS12", "sid": "330" },
{ "type": "CS", "channel": "CS22", "sid": "331" },
{ "type": "CS", "channel": "CS16", "sid": "333" },
{ "type": "CS", "channel": "CS8", "sid": "339" },
{ "type": "CS", "channel": "CS6", "sid": "340" },
{ "type": "CS", "channel": "CS6", "sid": "341" },
{ "type": "CS", "channel": "CS4", "sid": "342" },
{ "type": "CS", "channel": "CS16", "sid": "343" },
{ "type": "CS", "channel": "CS8", "sid": "349" },
{ "type": "CS", "channel": "CS22", "sid": "351" },
{ "type": "CS", "channel": "CS16", "sid": "353" },
{ "type": "CS", "channel": "CS6", "sid": "354" },
{ "type": "CS", "channel": "CS24", "sid": "295" },
{ "type": "CS", "channel": "CS4", "sid": "363" },
{ "type": "CS", "channel": "CS10", "sid": "800" },
{ "type": "CS", "channel": "CS10", "sid": "801" },
{ "type": "CS", "channel": "CS10", "sid": "802" },
{ "type": "CS", "channel": "CS10", "sid": "805" }

]

ちなみに、chinachuはmaster以外のブランチにしているとうまくいかないっぽい。なので、devel-betaなどを使用している場合はmasterに切り替えておく必要がある。
上記設定をおこなったのちにchinachu-wuiとchinachu-operatorを再起動して./chinachu update -fをすると、mirakurunを使用する形に変わっていることが確認できる(epgは先ほどのとおりmirakurun側で一度取得しているので、chinachu側でmirakurun経由で再取得することはないっぽい)

$ ./chinachu update -f
- SPAWN: epgstart.sh (pid=9973)
- GETTING EPG from Mirakurun.
- SPAWN: epgend.sh (pid=9983)
- Mirakurun is OK.
- Mirakurun -&gt; services: 120
- Mirakurun -&gt; programs: 22105
- WRITE: ./data/schedule.json
- RUNNING SCHEDULER.
(略)

なお、mirakurunはデーモンにはなっていないため、再起動時に自動的に起動してくれない。rc.localに書いたりすればなんとかなるだろうが、そんなに再起動するものでもないので、rootのcrontabに下記を追記。

@reboot mirakurun start

こんな感じでChinachu環境をmirakurunにすり替えた。