TX100 S3 + PT3 + recpt1 + Ubuntu 16.04.1 + chinachu(γ) + mirakurun + rivarun + ffmpegエンコード の環境構築

Ubuntu server 16.04.1にchinachu(γ)をインストールしたので、メモ。
参考にさせていただいたサイトの方々には大変感謝しています。
ファイアーウォールの設定などについては記載していませんので、設定をお願いします。
IDとパスワードも必ず変更をお願いします。

## 環境
* [Ubuntu server 16.04.1](https://www.ubuntu.com/download/server)
* kernel: 4.4.0-57-generic
* [PT3](https://www.amazon.co.jp/%E3%82%A2%E3%83%BC%E3%82%B9%E3%82%BD%E3%83%95%E3%83%88-PT3-Rev-A/dp/B00857CQAM)
* [SCR3310-NTTCom](https://www.amazon.co.jp/NTT%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA-%E6%8E%A5%E8%A7%A6%E5%9E%8BIC%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%BF%E3%83%BC-Tax-Mac%E5%AF%BE%E5%BF%9C-SCR3310-NTTCom/dp/B00117VJ7O)

## 事前準備
```
$ sudo apt-get install -y vim samba ntp wget curl git make cmake zip
$ sudo apt-get install -y pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools
$ sudo apt-get install -y autoconf build-essential git-core libssl-dev libtool libboost-all-dev pkg-config yasm pkg-config
```

## カードリーダーの設定
```
$ pcsc_scan | grep "Japanese Chijou Digital"
    (略)
    Japanese Chijou Digital B-CAS Card (pay TV)
```

## PT3のドライバのインストール
```
$ sudo su -
# echo "blacklist earth-pt3" >> /etc/modprobe.d/blacklist.conf
# git clone https://github.com/m-tsudo/pt3.git
# cd pt3/
# make clean && make
# make install
# modprobe pt3_drv
# reboot
```

再起動後、以下で確認。

```
$ ls -la /dev/pt3*
crw-rw-rw- 1 root video 243, 0  1月  4 17:35 /dev/pt3video0
crw-rw-rw- 1 root video 243, 1  1月  4 17:35 /dev/pt3video1
crw-rw-rw- 1 root video 243, 2  1月  4 17:35 /dev/pt3video2
crw-rw-rw- 1 root video 243, 3  1月  4 17:35 /dev/pt3video3
```

## arib25のインストール

```
$ sudo su -
# sudo apt-get install pkg-config
# mkdir ~/tmp
# cd ~/tmp
# wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
# unzip c44e16dbb0e2.zip
# cd pt1-c44e16dbb0e2/arib25
# make clean && make
# make install
```
## recpt1(通常版)インストール

```
# mkdir ~/src
# cd ~/src
# wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
# tar xvjf tip.tar.bz2
# cd pt1-c8688d7d6382/recpt1/
# sed -i".org" 's/pt1video/pt3video/g' pt1_dev.h
# ./autogen.sh
# ./configure --enable-b25
# make
# make install
```

以下で録画確認。[vlcプレーヤー](http://www.videolan.org/vlc/)などで再生できればOK。
23は地上デジタル放送のチャンネル。自分の環境に合わせて[チャンネル](http://www.maspro.co.jp/contact/bro/bro_ch.html)を変更してください。

```
# recpt1 --b25 --strip 23 10 ~/test.ts
```

## nodejsのインストール
```
# apt-get install -y nodejs npm
# npm cache clean
# npm install n -g
# n stable
# apt-get purge -y nodejs npm
# apt-get -y autoremove
# su -
# node -v
v7.2.1
```

## Mirakurun, Rivarunのインストールと設定
### インストール
```
# npm install pm2 -g
# npm install mirakurun -g --unsafe --production
# npm install rivarun -g
# npm install arib-b25-stream-test -g --unsafe
# ps ax | grep Mirakurun # 動作確認
12111 ?        S<sl  10:42 Mirakurun: Server
```

### 設定
サーバー設定を変えたいときは下記。本記事ではデフォルトとした。

```
# mirakurun config server
```

チューナー設定を変えたいときは下記。私の環境ではBS,CSが来ていないため、地上デジタル放送のみ有効とした。

```
# mirakurun config tuners
```

以下通りisDisabled: true ⇒ falseに変更

```
- name: PT3-T1
  types:
    - GR
  command: recpt1 --device /dev/pt3video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

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

```

チャンネル設定を変えたいときは下記。私の環境(名古屋市内)での設定例は下記。

```
# mirakurun config channels
```

```
- name: CAT111
  type: GR
  channel: '17'

- name: CBC
  type: GR
  channel: '18'

- name: CHUKYO
  type: GR
  channel: '19'

- name: NHK G
  type: GR
  channel: '20'

- name: TOKAI
  type: GR
  channel: '21'

- name: NAGOYA
  type: GR
  channel: '22'

- name: AICHI
  type: GR
  channel: '23'

- name: CAT121
  type: GR
  channel: '24'

- name: MIE
  type: GR
  channel: '27'
```

設定完了後、Mirakurunを再起動する。

```
# mirakurun restart
```

EPG情報の更新待ち（1,2分）。serviceIdが空欄の箇所は電波を受信できていないと思われるので、そのchannelをchannels設定から、削除する。

```
# rivarun --list | sed 's/},/},\n/g'
status: 200
headers: {"server":"Mirakurun/2.0.0-rc.8","content-type":"application/json; charset=utf-8","date":"Thu, 05 Jan 2017 02:03:06 GMT","connection":"close","content-length":"3036"}
[{"type":"GR","channel":"17","name":"CAT111","services":[{"id":3223733896,"serviceId":33896,"networkId":32237,"name":"キャットｃｈ１１１"},
{"id":3223733897,"serviceId":33897,"networkId":32237,"name":"キャットｃｈ１１２"}]},
{"type":"GR","channel":"18","name":"CBC","services":[{"id":3270703096,"serviceId":3096,"networkId":32707,"name":"ＣＢＣテレビ"},
{"id":3270703097,"serviceId":3097,"networkId":32707,"name":"ＣＢＣテレビ"},
{"id":3270703098,"serviceId":3098,"networkId":32707,"name":"ＣＢＣテレビ"},
{"id":3270703480,"serviceId":3480,"networkId":32707,"name":"ＣＢＣワンセグ"},
{"id":3270703231,"serviceId":3231,"networkId":32707,"name":"Ｇガイド"}]},
{"type":"GR","channel":"19","name":"CHUKYO","services":[{"id":3270903112,"serviceId":3112,"networkId":32709,"name":"中京テレビ１"},
{"id":3270903113,"serviceId":3113,"networkId":32709,"name":"中京テレビ２"},
{"id":3270903496,"serviceId":3496,"networkId":32709,"name":"中京テレビ４"}]},
{"type":"GR","channel":"20","name":"NHK G","services":[{"id":3222433792,"serviceId":33792,"networkId":32224,"name":"ＮＨＫ総合１・名古屋"},
{"id":3222433793,"serviceId":33793,"networkId":32224,"name":"ＮＨＫ総合２・名古屋"},
{"id":3222434176,"serviceId":34176,"networkId":32224,"name":"ＮＨＫ携帯Ｇ・名古屋"}]},
{"type":"GR","channel":"21","name":"TOKAI","services":[{"id":3270603088,"serviceId":3088,"networkId":32706,"name":"東海テレビ０１１"},
{"id":3270603089,"serviceId":3089,"networkId":32706,"name":"東海テレビ０１２"},
{"id":3270603090,"serviceId":3090,"networkId":32706,"name":"東海テレビ０１３"},
{"id":3270603472,"serviceId":3472,"networkId":32706,"name":"東海テレビワンセグ"}]},
{"type":"GR","channel":"22","name":"NAGOYA","services":[{"id":3270803104,"serviceId":3104,"networkId":32708,"name":"メ～テレ"},
{"id":3270803105,"serviceId":3105,"networkId":32708,"name":"メ～テレ"},
{"id":3270803106,"serviceId":3106,"networkId":32708,"name":"メ～テレ"},
{"id":3270803488,"serviceId":3488,"networkId":32708,"name":"メ～テレ"}]},
{"type":"GR","channel":"23","name":"AICHI","services":[{"id":3223033840,"serviceId":33840,"networkId":32230,"name":"テレビ愛知１"},
{"id":3223033841,"serviceId":33841,"networkId":32230,"name":"テレビ愛知２"},
{"id":3223033842,"serviceId":33842,"networkId":32230,"name":"テレビ愛知３"},
{"id":3223034224,"serviceId":34224,"networkId":32230,"name":"テレビ愛知携帯"}]},
{"type":"GR","channel":"24","name":"CAT121","services":[{"id":3223933912,"serviceId":33912,"networkId":32239,"name":"キャットｃｈ１２１"},
{"id":3223933913,"serviceId":33913,"networkId":32239,"name":"キャットｃｈ１２２"}]},
{"type":"GR","channel":"27","name":"MIE","services":[{"id":3215038960,"serviceId":38960,"networkId":32150,"name":"三重テレビ１"},
{"id":3215038961,"serviceId":38961,"networkId":32150,"name":"三重テレビ２"},
{"id":3215039344,"serviceId":39344,"networkId":32150,"name":"三重テレビ携帯"}]}]
```

中京テレビ１で15秒間録画してみる。--sidは上記のserviceIdを指定。--ch GR/**の**は上記のchannelを指定。

```
# rivarun --b25 --mirakurun localhost:40772 --sid 3112 --ch GR/19 15 CHUKYO.ts
```

## Chinachuのインストールと設定
### インストール

```
# adduser chinachu
# su - chinachu
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ ./chinachu installer
Chinachu Installer Menu:
[!] These are installed under all /home/chinachu/chinachu/...
[!] Recommend the Auto installation.
1) Auto (full)          3) Node.js Environment  5) ffmpeg
2) submodule            4) Node.js Modules
what do you install? > 1
```

### 設定

```
$ echo "[]" > rules.json # ルールファイル作成
$ cp config.sample.json config.json
$ vim config.json
```

config.jsonの設定例は下記。
recordedCommandは録画後に実行するコマンド。詳細については後述。
wuiPortはWeb UIのポート番号。任意のポート番号に設定。
recordedFormatは録画ファイル名。任意に設定。
私の環境では、recordedは/mnt/sdb/video/chinachuにリンクが張られている。(ln -s /mnt/sdb/video/chinachu /home/chinachu/chinachu/recorded)

```
{
  "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",

  "recordedDir" : "./recorded/",
  "recordedCommand":"./recCheck.sh",

  "wuiUsers": [
    "akari:bakuhatsu"
  ],
  "wuiAllowCountries": ["JP"],

  "wuiPort": 10772,
  "wuiHost": "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:mmdd>]<title>#<episode>(<channel-name>).ts",
  "storageLowSpaceThresholdMB": 3000,
  "storageLowSpaceAction": "remove",
  "storageLowSpaceNotifyTo": null,
  "storageLowSpaceCommand": ""
}
```

### サービス設定
```
$ ./chinachu service operator initscript > /tmp/chinachu-operator
$ ./chinachu service wui initscript > /tmp/chinachu-wui
$ sudo su -
# cd /tmp
# chown root:root chinachu-*
# chmod 755 chinachu-*
# mv chinachu-* /etc/init.d/
# update-rc.d chinachu-operator defaults
# update-rc.d chinachu-wui defaults
```

### 起動
```
# service chinachu-operator start
# service chinachu-wui start
# ps ax | grep chinachu # 動作確認
15664 ?        S      0:00 /bin/bash /home/chinachu/chinachu/chinachu service operator execute
15776 ?        S      0:00 /bin/bash /home/chinachu/chinachu/chinachu service wui execute
```

### エンコード
エンコードで使用するffmpegはchinachuインストール時にインストールしたものを使用する。

```
$ ./chinachu installer
(略)
1) Auto (full)          3) Node.js Environment  5) ffmpeg ← これ。(上記ではfullを指定しているのでここではインストール済み)
```

```
# su - chinachu
$ cd /home/chinachu/chinachu/
$ wget http://sonic-labo.xsrv.jp/gosogoso/wp-content/uploads/2015/11/recCheck.zip
$ unzip recCheck.zip
$ vim recCheck.sh # ファイル内のコメントを参考に設定を変更。
$                 #最低限user, passwdを変更すること。
$                 #例）user=akari, passwd=bakuhatsu
$ vim recCheck.js 
```

私の環境でのrecCheck.jsの変更箇所は下記。ffmpegの引数などは任意に変更すること。
/mnt/sdb/video/chinachu/は/home/chinachu/chinachu/recordedのリンク先。

```
var encodedDir = "/mnt/sdb/video/chinachu/";
var recOpt = " -fpre /home/chinachu/chinachu/libx264-hq-ts.ffpreset -r 30000/1001 -aspect 16:9 -s 1280x720 -bufsize 2000k -maxrate 25000k -acodec libmp3lame -ac 2 -ar 48000 -ab 128k -async 100";
var codecOpt = " -vcodec libx264";
```

/home/chinachu/chinachu/libx264-hq-ts.ffpresetの中身は下記のとおり。

```
level=41
crf=25
coder=1
flags=+loop
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=umh
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qmin=10
rc_eq='blurCplx^(1-qComp)'
bf=16
bidir_refine=1
refs=6
```

chinachuを再起動する。

```
# sudo service chinachu-operator restart
# sudo service chinachu-wui restart
```

ブラウザで動作確認。
http://(サーバーのホスト名またはIPアドレス):10772/

## 参考
* [Ubuntu 15.04 + PT3 + recpt1 + egpdump の環境構築](http://qiita.com/ymotongpoo/items/8a66fdfb68c1617aeb31)
* [録画サーバ構築の前準備（Ubuntu・Debian編）、Chinachu・epgrec UNA対応](http://www.jifu-labo.net/2015/09/ubuntu_pre/)
* [Mirakurunのインストール手順（Ubuntu・Debian・CentOS）p2](http://www.jifu-labo.net/2016/05/mirakurun/2/)
* [Mirakurunのインストール手順（Ubuntu・Debian・CentOS）p3](http://www.jifu-labo.net/2016/05/mirakurun/3/)
* [Chinachuインストール手順（Ubuntu・Debian編）](http://www.jifu-labo.net/2015/09/ubuntu_chinachu/)
* [chinachuで自動エンコード](http://sonic-labo.xsrv.jp/gosogoso/2015/11/23/post-30/)