なんか作りたい

PCとかオーディオとか

TVRockからMirakurun+Chinachu γ に乗り換えた話 (CentOS7 on Windows)

4/11 追記: 公開から10日で既に古い記事になる程度にChinachuの開発が早いようです。
公式ドキュメントを参考にして、それでもわからないところの参考程度に読むのをオススメします!!
現在Ubuntu on VirtualBoxにてChinachuを安定動作できています。
CentOS on VMwareにChinachuをインストールするのはオススメしません。
そのうちまとめ直します。

WindowsTVRockな環境からCentOS(VMware)でMirakurun+Chinachu γに乗り換えた時のメモ。
自分用に書いた奴だけど参考になれば幸いです。

やりたかったこと
  • 1.LAN内でチューナー共有
  • 2.トランスコードして家の外でも視聴できる環境作り
  • 3.エンコードWindowsでやる(色々資産があるから)
  • 4.トラブルがあった時に今の環境に戻せる

まとまった時間が取れないので今の環境を維持しつつ移行するのが必須だった。
なのでOSは現状のWindowsServer2016を使用。
2.については話題のChinachuを使ってみたかった。
なので1. についてもMirakurunを導入することにした。
ただWindowsにMirakurunを入れた所、録画が途中で強制終了するエラーを踏んで断念。
(error: TSFilter will closing because reached time limit of overflowing the buffer… が録画の最中に発生…)
4/2 追記: Mirakurun+TVRockで実験したら問題なく録画できたので問題はChinachu側にありそう。
Windows上のMirakurun+Chinachuでは3回に1回ほど録画が途中で終了。
VMware上でMirakurun+Chinachuだと録画は最後までいくものの同じ頻度で2-3秒の連続的なドロップが起きた。
Windows上のMirakurun+TVRock+VMware上のChinachuだとChinachu側だけで録画の中断が見られた。
アイドル状態の時に問題が起こりやすいのでWindows側の電源管理とVMware上のCentOSの相性が悪いのかもしれない(想像)。
ChinachuのUI周りは気に入っているのでなんとかしたい。
いっそChinachu AirWindowsに対応してくれないかなぁ。
しばらくはTVRockとChinachuを併用しながら様子を見てみる。

やったこと
  1. WindowsにてBonDriver_ProxyExの導入
  2. VMWareにCentOS7インストール
  3. BonDriverProxy_Linuxの導入
  4. Mirakurunの導入
  5. Chinachu γの導入
  6. Chinachu録画終了後にWindows側のエンコードタスク呼び出し

システム概要

[OS WindowsServer2016] PT3 -> BonDriver_PT3.dll -> BonDriver_ProxyEx
-> [CentOS7(VMware on Windows)] BonDriverProxy_Linux.so -> RecBond(+カードリーダ) -> Mirakurun -> Chinachu γ
-> ssh -> [OS WindowsServer2016] sshd(Cygwin) -> ExProc -> エンコードバッチファイル(GUIを含む)


1. WindowsにてBonDriver_ProxyExの導入

ここを参考に進めればOK
yanoshi.hatenablog.jp
https://github.com/u-n-k-n-o-w-n/BonDriverProxyExのコードをVC++2015でコンパイル
PT3のドライバがあるフォルダと同じフォルダに入れて.iniを編集。
起動したらWindows側でTVTest+BonDriver_Proxyで動作を確認。
確認したら手動でスタートアップに登録して完了。


2. VMWareにCentOS7インストール

CentOS7をminimalでインストールする。
Windows側の録画フォルダを共有フォルダとして接続。
カードリーダーをVM側に接続。
VMwareToolsのインストール
アップデートと必要なパッケージをインストール

yum update
yum install wget curl yasmpt-get install build-essential curl git-core libssl-dev yasm libtool autoconf
yum install python hit unzip bzip2 gcc gcc-c++ make autogen automake kernel-devel patch
yum install perl-ExtUtils-MakeMaker libtool openssl-devel libboost-all-dev boost-devel cmake

足りないものは順次追加

カードリーダーのドライバをインストール

wget http://search.cpan.org/CPAN/authors/id/W/WH/WHOM/pcsc-perl-1.4.13.tar.bz2
tar xvjf pcsc-perl-1.4.13.tar.bz2
cd pcsc-perl-1.4.13
perl Makefile.PL
make
make install
wget https://launchpad.net/ubuntu/+archive/primary/+files/pcsc-tools_1.4.23.orig.tar.gz
tar xvzf pcsc-tools_1.4.23.orig.tar.gz
cd pcsc-tools-1.4.23/
make
make install
systemctl enable pcscd
systemctl start pcscd
pcsc_scan
# 色々表示されるが最後にJapanese Chijou Digital B-CAS Card (pay TV)と表示されていればOK

libarib25のインストール

git clone https://github.com/stz2012/libarib25.git
cd libarib25/
ls
cmake .
make
make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf


3. BonDriverProxy_Linuxおよびrecbondの導入

git clone https://github.com/u-n-k-n-o-w-n/BonDriverProxy_Linux ~/BonDriverProxy_Linux
cd BonDriverProxy_Linux/
make client
vi BonDriver_Proxy.conf
# Windows側BonDriver_ProxyEXのAddressとPortを指定。
# BONDRIVER=PT-S または PT-Tを指定(Windows側BonDriver_ProxyEXの設定で指定したドライバ名)。  

cp BonDriver_Proxy.so BonDriver_Proxy-S0.so
cp BonDriver_Proxy.so BonDriver_Proxy-S1.so
cp BonDriver_Proxy.so BonDriver_Proxy-T1.so
cp BonDriver_Proxy.so BonDriver_Proxy-T0.so
cp BonDriver_Proxy-S.conf BonDriver_Proxy-S0.so.conf
cp BonDriver_Proxy-S.conf BonDriver_Proxy-S1.so.conf
cp BonDriver_Proxy-T.conf BonDriver_Proxy-T1.so.conf
cp BonDriver_Proxy-T.conf BonDriver_Proxy-T0.so.conf
# 必要な分だけコピー

recbondはBonDriver_Proxy.soのあるフォルダ内でmakeする。
git clone https://github.com/dogeel/recbond.git ~/BonDriverProxy_Linux/recbond
cd recbond/
./autogen.sh
./configure
make
make install

recbond --driver /xxx/BonDriver_Proxy-T0.so --b25 -space B1 3 /mnt/hgfs/Videos/test.ts
# テスト recbond --driver <ドライバパス> --b25 -space <チャンネル> <録画時間> <保存ファイルパス>
# ※チャンネル指定はBonDriver_PT3のチャンネルに準拠する。B数字の形で指定。
# 録画されていればOK


4. Mirakurunの導入

配布元の注意を呼んでインストール
GitHub - Chinachu/Mirakurun: A Modern DTV Tuner Server Service.
node.jsのバージョンに注意。

curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum -y install nodejs
npm install pm2 -g
npm install mirakurun -g --unsafe --production

mirakurun config tuners

# commandでの指定方法に注意(チャンネルの頭にBが必要)
- name: BonDriver_Proxy-S0
  types:
    - BS
    - CS
  command: recbond --driver /xxx/BonDriver_Proxy-S0.so --b25 -space B<channel> - -
  decoder: ~
  isDisabled: false

- name: BonDriver_Proxy-T0
  types:
    - GR
  command: recbond --driver /xxx/BonDriver_Proxy-T0.so --b25 -space B<channel> - -
  decoder: ~
  isDisabled: false

mirakurun config channels
# BonDriver_Proxyを使っている場合はチャンネルスキャンが機能しないので注意。
# BonDriver_PT3-T or S.ChSet.txt のドライバ内でのチャンネルに対応している。
# 例GR: BonDriver_PT3-T.ChSet.txt -> 18ch 0 5 68 0
- name: テレビ大阪
  type: GR
  channel: '5'
#例BS: BonDriver_PT3-S.ChSet.txt -> BS15/TS1 NHK BS1 0 9 7 16625
- name: NHK BS1
  type: BS
  channel: '9'
  serviceId: 101
# serviceidは必要なさそう?(ここで調べられるhttps://www.yuhisa.com/tv/bs-list/)


5. Chinachu γの導入

配布元の注意を呼んでインストール
Gamma Installation V2 · Chinachu/Chinachu Wiki · GitHub

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xvzf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install
useradd chinachu
su - chinachu
git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
cd ~/chinachu/
./chinachu installer
# Auto を選択
vi ./config.json
#config.jsonは録画用ディレクトリと録画ファイル名を変更。
#必要に応じてユーザー名:パスワードも変更。
./chinachu service wui execute
# 問題なく起動できたらCtrl+\で終了
./chinachu update
# EPG取得テスト(エラーが出た場合は恐らく Mirakurun に接続できていません)

ここを参考にsystemdに対応させる。 Chinachu γ(ガンマ) インストール手順(CentOS 7編) | 自分に負けないラボラトリー
公式で対応済み

cd ~/chinachu
wget https://www.jifu-labo.net/files/systemd.patch.gz
zcat systemd.patch.gz | patch
./chinachu service operator unitfile > /tmp/chinachu-operator.service
./chinachu service wui unitfile > /tmp/chinachu-wui.service
#ここからrootに戻る
cd /tmp
chown root:root chinachu-*.service
cp chinachu-*.service /lib/systemd/system/
systemctl enable chinachu-operator
systemctl enable chinachu-wui
systemctl start chinachu-operator
systemctl start chinachu-wui
# これで以降はsystemctlで操作できる。

Firewalledの設定も忘れずに

cd /usr/lib/firewalld/services/
cp ssh.xml chinachu.xml
vi chinachu.xml
#名前を変更してtcp 10772を開放
firewall-cmd --add-service=chinachu --zone=public --permanent
firewall-cmd --list-services --zone=public  --permanent

ブラウザからhttp://address:10772/にアクセスして動作確認
※起動した直後はMirakurunのチャンネル設定が終わっていないために表示されているチャンネル数が少ない場合がある。
※BonDriver_ProxyExの情報ウィンドウでtunerへのアクセスがあればおそらくチャンネルをチェックしている。

6. Chinachu録画終了後にWindows側のエンコードタスク呼び出し

※かなり特殊な環境での使用を想定している。 普通なら以下だけでOK

vi chinachu/recorded-script.sh
#!/bin/sh
ssh winsrv /cygdrive/c/xxx/task_chinachu.bat "$1"

sshから直接の実行ではGUIが必要なプログラムが正常に起動しないのでPsExecを介して実行する。
PsExecの場合は引用符が外れてしまうので"\“$1\”“で引用符を二重にしておく。

vi chinachu/recorded-script.sh
#!/bin/sh
ssh winsrv /cygdrive/c/xxx/task_chinachu.bat "\"$1\""

task_chinachu.bat

PsExec -i -u <PC名>\<ユーザー名> -p <password> \\<address> <プログラムのパス> %1

※予めWindows側でPsExecを起動して承認を通しておく。


おわり

以上でおそらく動くはず。
検証は不十分なので自信はない。
何か問題が出たらログを読んで対応。

mirakurun log server
less /home/chinachu/chinachu/log/operator