なんか作りたい

PCとかオーディオとか

WindowsでMirakurun + Chinachu & TVRock な環境たぶん安定

s-sef.hateblo.jp

以前の記事で出た色々な問題点が解決したのでまとめます。
結論はVMware Playerを使うのはやめてVirtualBoxを使いましょうと言う話です。
 

問題点

WindowsServer2016 にMirakurun、CentOS7 on VMware にChinachuで運用すると録画が途中で止まってしまう。
-> Windows上のMirakurunが不安定? 

検証1. MirakurunをCentOS7上で動かす  

結果: 録画は最後までいくものの致命的なドロップが発生した。

検証2. Mirakurun + TVRock 環境をテスト

結果: 正常に動作
-> Windows Server 上のMirakurunは正常に動いているので問題はChinachu側
-> VMwareWindowsの電源管理のせいで停止している?

検証3. WindowsServer2016の電源設定をハイパフォーマンスに設定して運用する

結果: 同様の問題が出た  -> VMwareとChinachuの相性が悪い?   

検証4. CentOS7 on VirtualBox でChinachuを試す

結果: 正常に動作 

ということで仮想環境でChinachuを運用する際はVMware Playerは避けるのが無難。
以下前回のまとめ直し。


最終的な構成

[OS WindowsServer2016] PT3 -> BonDriver_PT3.dll -> BonDriver_ProxyEx -> BonRecTest -> Mirakurun
-> [Ubuntu(VirtualBox)] 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
https://github.com/u-n-k-n-o-w-n/BonDriverProxyのコードをVC++2015でコンパイル
任意のフォルダにPT3のドライバと一緒に配置。
-> C:\xxx\BonDriverProxyEx.exe
-> C:\xxx\BonDriverProxyEx.ini
-> C:\xxx\BonDriver_PT3-S0.dll
-> C:\xxx\BonDriver_PT3-T0.dll
-> C:\xxx\BonDriver_Proxy-S.dll
-> C:\xxx\BonDriver_Proxy-T.dll
-> C:\xxx\BonDriver_Proxy-S.ini
-> C:\xxx\BonDriver_Proxy-T.ini

BonDriverProxyEx.iniの編集。
文字コード、改行コード等を変更しないこと。
※変更箇所周辺のみ表記

[OPTION]  
ADDRESS=xxx.xxx.xxx.xxx  
PORT=1192  
BONDRIVER=PT-T  
[BONDRIVER]  
00=PT-T;BonDriver_PT3-T0.dll;BonDriver_PT3-T1.dll  
01=PT-S;BonDriver_PT3-S0.dll;BonDriver_PT3-S1.dll  

BonDriver_Proxy-S.iniの編集。

ADDRESS=xxx.xxx.xxx.xxx
PORT=11920
BONDRIVER=PT-S
; BonDriver_Proxy-T.iniならPT-T

起動したらTVTest+BonDriver_Proxyで動作を確認。
確認したらBonDriverProxyEx.exeを手動でスタートアップに登録して完了。

2. WindowsにMirakurun導入

まずはBonRecTestをコンパイル
GitHub - rndomhack/BonRecTest: Recoding test program for BonDriver
またB25Decoder.dllを入手しておく
でーてーぶいあぷろだぁ
ドライバ等と同じ場所への配置推奨
-> C:\xxx\BonRecTest.exe
-> C:\xxx\B25Decoder.dll

配布元の注意を読んでインストール
GitHub - Chinachu/Mirakurun: A Modern DTV Tuner Server Service.
node.jsのインストール
バージョンは6.5.0位上7.0.0未満とのこと。
Windowsファイアウォール詳細設定にてnode.jsを許可しておく。

# 管理者権限のPowerShellで以下を実行
npm install winser -g
npm install mirakurun -g --production

# "%USERPROFILE%\.Mirakurun\tuners.yml"を編集
# 文字コード、改行コード等を変更しないこと。
# チューナーの数に応じてコピー
- name: BonDriver_Proxy-S0
  types:
    - BS
  command: C:\xxx\BonRecTest.exe --decoder C:\xxx\B25Decoder.dll --log --driver C:\xxx\BonDriver_Proxy-S.dll --output - --channel <channel>
  decoder: ~
  isDisabled: false
- name: BonDriver_Proxy-S0
  types:
    - CS
  command: C:\xxx\BonRecTest.exe --decoder C:\xxx\B25Decoder.dll --log --driver C:\xxx\BonDriver_Proxy-S.dll --output - --channel <channel>
  decoder: ~
  isDisabled: false
- name: BonDriver_Proxy-T0
  types:
    - GR
  command: C:\xxx\BonRecTest.exe --decoder C:\xxx\B25Decoder.dll --log --driver C:\xxx\BonDriver_Proxy-T.dll --output - --channel <channel>
  decoder: ~
  isDisabled: false

# "%USERPROFILE%\.Mirakurun\channels.yml"を編集
# 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/)

動作はTVTest+BonDriver_mirakurunでテストする。
Releases · Chinachu/BonDriver_Mirakurun · GitHub
BonDriver_Mirakurun.ini

[GLOBAL]
SERVER_HOST="xxx.xxx.xxx.xxx"
SERVER_PORT=40772
; B25(1=enable)
DECODE_B25=1
; Priority(0=Low Priority)
PRIORITY=0

なおMirakurunはWindowsのサービスに登録される。
タスクマネージャーのサービスタブ等から起動の操作が可能。

3.Mirakurun + TVRockでのチャンネル設定(必要であれば)

TVRockのチャンネルを設定->チューナーにおいて手動で変更。
Mirakurunでのチャンネル設定+13の値をチャンネルで指定する。
BS・CSについては従来通りTVTestのリファレンス通りに設定すればOK。

4. CentOS7 on VirtualBoxの準備

CentOSを普通にVirtualBoxにインストールしてアップデート確認。
必要なパッケージを順次インストール

sudo yum update
sudo yum upgrade
sudo yum install make g++ build-essential curl git-core libssl-dev yasm libtool autoconf automake libboost-all-dev pkg-config node npm

VirtualBoxのファイル共有では"/media/sf_xxx/“に自動マウントされる。
以下を実行してアクセス権限をChinachuの実行ユーザーに与える必要がある。 *なおpm2でサービスに登録するとユーザーグループが変更されるためかアクセスできなくなる。

gpasswd --add {ユーザ名} vboxsf

Firewallの設定

sudo firewall-cmd --zone=public --add-port=20772/tcp --permanent


5. CentOS7にChinachu γの導入

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

sudo -i
# chinachu γ ではnode.jsはバージョン7未満をインストール
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum -y install nodejs
npm install pm2 -g
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

# chinachu実行用ユーザー作成
useradd chinachu
# のちのち必要なuidを調べておく 
id- u chinachu

ここからはchinachuユーザーで作業をすすめる

su - chinachu
git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
cd ~/chinachu/
./chinachu installer
# Auto を選択
echo [] > rules.json
vi ./config.json
# config.jsonは録画用ディレクトリと録画ファイル名を変更。
# uidは上で調べたものを入力
# wuiUsersではChinachuをブラウザで開く際の["ユーザー名:パスワード"]を指定
# wuiOpenHostはこのマシンのIPアドレスを指定
  "uid": xxxx,
  "mirakurunPath": "http://xxx.xxx.xxx.xxx:8888/",
  "recordedDir": "/media/sf_xxx/"
  "wuiUsers": ["user:pass"],
  "wuiOpenHost": "xxx.xxx.xxx.yyy",
  "recordedFormat": ""
# 例[<>channel-name] <title> #<episode> <subtitle>.m2ts" とか "[<>channel-name] <fulltitle>"

#起動テスト
./chinachu service wui execute
# 問題なく起動できたらCtrl+\で終了
./chinachu update
# EPG取得テスト(エラーが出た場合は恐らく Mirakurun に接続できていません)

ここを参考にsystemdに対応させる。 Chinachu γ(ガンマ) インストール手順(CentOS 7編) | 自分に負けないラボラトリー *04/14現在、公式ではpm2を使った方法が推奨されている。 ただし、VirtualBoxで運用する場合はユーザーグループの関係でエラーが出るため別の方法を使う。

# サービスに登録
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

cd /tmp
sudo chown root:root chinachu-*.service
sudo cp chinachu-*.service /lib/systemd/system/
sudo systemctl enable chinachu-operator
sudo systemctl enable chinachu-wui
sudo systemctl start chinachu-operator
sudo systemctl start chinachu-wui
# これで以降はsystemctlで操作できる。
# systemctl stop xxx -> systemctl disable xxx で無効化できる。
# systemdの設定を完全に消したい場合は /lib/systemd/system/chinachu-*.service を削除
# パッチのかかった実行ファイルをchinachu.origで置き換える。 
# pm2との共存はできないのでpm2を使う場合はsystemdの設定は削除する。逆もまた然り。

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

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

※かなり特殊なことをしているので全く推奨しない。
Windows側においてCygwinSSHをセットアップしておく。
CentOSのChinachuユーザーでssh接続可能なことを確認。
.ssh/configにwinsrvで設定を作っておく。

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のログは"%USERPROFILE%\AppData\Local\Mirakurun"内に、
Chinachuのログは"/home/chinachu/chinachu/log/“内にそれぞれ配置してある。 (pm2で起動している場合はpm2 logから見ることが可能)
よくあるトラブルとしてはアンテナ線が抜けてた、カードリーダーのカードが抜けてたなどがある(あった)。