さわっても熱くない花火

ちょっとした驚きを食べながら生きています

Windows10で作るMirakurun + Chinachu Gammaな録画サーバー ~Docker for WindowsとPT3(BonDriver)を添えて~

夏だ!エアコンだ!引きこもりだ!!!
「夏だから外に出たい気もするけど暑い…」という複雑な感情を抱きながら窓の外を眺めるyanoshiです。皆さんいかがお過ごしでしょうか。


引きこもりライフの充実のために録画サーバーの構成を見直すことにしました。今日はそんな話。
個人的にはWindows上で組む録画サーバーとしてはかなり完成されたものになってきた気がしています。良い話!

なおこの記事で起きるあらゆる事象に対して当方は一切責任を負いません。お約束ですね。




目次

スポンサードリンク





前回までのお話

yanoshi.hatenablog.jp

MirakurunをWindows上で動かして、VirtualBox上でChinachu betaを動かして連携させたってのが前回までのあらすじです。
その後Docker for Windows上で動かそうとしたら、ネットワークが不安定で涙を流すという展開に。


録画マシンを1台にまとめてDocker for Windowsリベンジ

Chinachu ganmaがリリースされ、Dockerのバージョンも1.17になりました。そろそろ上記Docker for Windowsの不具合も直っているだろうと思って再度試してみることにしました。
Mirakurun with PT3(BonDriver) + Chinachu Gamma in Docker for Windowsって感じです。

構成概略図

f:id:yanoshi:20170710090958p:plain

ソフトウェア構成

  • Mirakurun in Windows10 with BonDriver
    • Chinachu Gammaを動かすには必須なので
    • 近頃はBonDriver_Mirakurunが登場しBonDriverProxyExは不要になりました
    • BonDriverを利用しているのでこれまでの録画環境からすぐに移行可能
  • TVTest
    • みんな大好きTVTestさん
  • Chinachu ganma in Docker for Windows
    • 今回の主役!


素晴らしいプロダクトを開発・提供してくださっている方々に多謝!!




ハードウェア構成

GPU

CPU内蔵グラフィック

GR/BS/CSチューナーカード

PT3 3枚

なおPT3のドライバはちゃんとWindows 10でも動作します。はじめての人はドライバ、SDKを以下より入手してセットアップしましょう。
PT3 ソフトウェアのダウンロード (最新版/SHA-2)




今から新規で録画サーバーを組む人へ

PT3はもう生産修了してしまっているので、びっくりするくらい高くなってますね…本構成はBonDriverで動かしているので、Linuxでは動作しないチューナーカードでもMirakurun及びChinachuを動かすことができます。
ってことで今から新規で録画サーバーを組むなら無理してPT3を選ばず、PX-W3PE4等を選択した方が良いのかもしれません。

PX-W3PE4 - TS抜きチューナー備忘録







Mirakurun

MirakurunはチューナーをRESTfulなAPIとして提供してくれるミドルウェアです。Spinel的な機能も有しているので色々と便利。
github.com

Node.jsのインストール

Node.js
2017年7月現在、最新LTSはv6.11.0なのでこちらを入れます。
f:id:yanoshi:20170702164012p:plain

※Node.jsなのでバージョンに関しては割とシビアだと思います。最新版のMirakurunがどのバージョンでの動作が保証されているか、ちゃんとREADME.mdをチェックしましょう。


Mirakurunのインストール

PowerShellを管理者で実行させます。(Creators Updateからスタートボタンを右クリックですぐPowerShellを起動させられるようになったよね。)
f:id:yanoshi:20170702164400p:plain


後はREADME.mdの内容の通り以下コマンドを実行します。npmでサクッとMirakurunがインストールされます。良い話。

npm install @kanreisa/winser -g
npm install mirakurun -g --production

BonRecTestの設置

BonRecTestはBonDriverから得られたデータを標準出力にだばーしてくれる子です。
github.com

以下よりexeを入手し適当な所に展開しましょう。(筆者は C:\soft\PT3\BonRecTest\BonRecTest.exe に設置しました)
Releases · rndomhack/BonRecTest · GitHub


B25Decoder.dllの導入

皆さん御存知の通り、TS復号処理を行ってくれるなにがしですね。以下辺りにあると思います。BonRecTest.exeと同一のディレクトリに設置しましょう。
でーてーぶいあぷろだぁ
http://up.mapopi.com/?get=00009

ちなみにMicrosoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64)がないと動かないのでこちらも入れておきます。


BonDriverの導入

以下をダウンロードして来ます
Releases · epgdatacapbon/BonDriver_PT3-ST · GitHub


編集点等を書き出しておきます。これらのファイルはBonRecTest.exeと同一のフォルダに設置します。

BonDriver_PT3-T.dll、BonDriver_PT3-S.dll、PT3Ctrl.exe

x64フォルダ内のBonDriver_PT3-T.dllBonDriver_PT3-S.dllを適宜コピー及びリネームしていきます。(32bit版のWindowsの場合はWin32フォルダ内の物)
筆者はPT3が3枚なので地デジ・BS/CSがそれぞれ6チューナー存在しているので以下みたいになります。

  • BonDriver_PT3-S.dll ->
    • BonDriver_PT3-S0.dll
    • BonDriver_PT3-S1.dll
    • BonDriver_PT3-S2.dll
    • BonDriver_PT3-S3.dll
    • BonDriver_PT3-S4.dll
    • BonDriver_PT3-S5.dll
  • BonDriver_PT3-T.dll ->
    • BonDriver_PT3-T0.dll
    • BonDriver_PT3-T1.dll
    • BonDriver_PT3-T2.dll
    • BonDriver_PT3-T3.dll
    • BonDriver_PT3-T4.dll
    • BonDriver_PT3-T5.dll
  • PT3Ctrl.exe ->
    • そのまま(コピーするだけ)
BonDriver_PT3-ST.ini

筆者の環境ではBS/CSに電源が必要なので以下のように編集しました。

[SET]
;0で使用しない、1で使用する
;LNB電源
UseLNB=1
;1チューナーのDMA転送バッファサイズ(約1.5MB × 設定値)
DMABuff=8
BonDriver_PT3-T.ChSet.txt、BonDriver_PT3-S.ChSet.txt

そのままコピーしましょう

配置後のディレクトリ構造

こんな感じになっているはずです。(PT3が3枚の場合)
f:id:yanoshi:20170702175817p:plain

Mirakurunの設定

%USERPROFILE%\.Mirakurunに設定ファイル一式が存在しているので編集します。編集例は以下の通り。

channels.yml
server.yml
tunners.yml

channels.ymlを編集する上での注意点

serviceIdやchannelの値は、インターネット上に転がっているLinux上で動作しているMirakurunの設定を使うまわすことができません。
BonDriver向けの値を利用する必要があるので気をつけましょう。

Mirakurunの再起動

タスクマネージャーとかから適当に
f:id:yanoshi:20170702224216p:plain

Mirakurun UIの導入

これを入れておくとMirakurunの動作状況の確認ができます。
Releases · Chinachu/Mirakurun-UI · GitHub
f:id:yanoshi:20170710002109p:plain
f:id:yanoshi:20170710002334p:plain


トラブルシューティング

Mirakurunが動作していない雰囲気の時は

%USERPROFILE%\AppData\Local\Mirakurun にログがあるので眺めましょう。

何故かアクセス出来ない時は

大抵ファイアーウォールが原因だと思います。40772ポートへのアスセスを可能なようにしておきましょう。
f:id:yanoshi:20170708123643p:plain
f:id:yanoshi:20170708123722p:plain











TVTest

BonDriver_Mirakurunの登場により、TVTest+Mirakurunがとっても簡単になりました。最高かよ。

LAV Filters(導入していない場合は)

TSを再生するためには何かしらが必要なので。筆者はLAV Filtersを使っています。
Releases · Nevcairiel/LAVFilters · GitHub

TVTestをダウンロード

TVTest自身が復号処理をしてくれる必要はないので、v0.9.0で問題ないと思います。
Release 0.9.0 · DBCTRADO/TVTest · GitHub

BonDriver_Mirakurunの導入

以下より最新版を入手してきて、BonDriver_Mirakurun.dllBonDriver_Mirakurun.iniTVTest.exeと同じ場所に設置します。
Releases · Chinachu/BonDriver_Mirakurun · GitHub

BonDriver_Mirakurun.ini

以下のように編集。

[GLOBAL]
; Mirakurunが動作するIPアドレス
SERVER_HOST="192.168.0.2"
SERVER_PORT=40772

; B25(1=enable)
DECODE_B25=0

; Priority(0=Low Priority)
PRIORITY=0

; MagicPacket(1=enable)
MAGICPACKET_ENABLE=0
MAGICPACKET_TARGETMAC="00:00:00:00:00:00"
MAGICPACKET_TARGETIP="192.168.0.255"

TVTestの設定

こんな感じに設定
f:id:yanoshi:20170702183618p:plain
f:id:yanoshi:20170702183638p:plain

再生テスト

映ればOK
f:id:yanoshi:20170702183658p:plain







Chinachu Gamma

ChinachuはリッチなWebUIを有した録画/ロケフリミドルウェアです。
github.com

今回はDocker for Windows上で動作させていきます。

Docker for Windowsのインストール

Stable channelで良いと思います。
docs.docker.com

録画保存先のディレクトリへアクセス可能に設定

筆者はSドライブに録画データを保存するつもりなので以下のように設定しました
f:id:yanoshi:20170708122646p:plain


docker-mirakurun-chinachu を入手

github.com
zipで落とせばいいと思います。
f:id:yanoshi:20170708095848p:plain

で、適当にSドライブ(前述でShared Drivesに設定したドライブ)に展開しました

こんな感じのディレクトリ構造にしてやりました。

$ tree
.
├── docker-mirakurun-chinachu
│   ├── LICENSE
│   ├── README.md
│   ├── chinachu
│   │   ├── Dockerfile
│   │   ├── conf
│   │   │   ├── config.json
│   │   │   └── rules.json
│   │   ├── config.sample.json
│   │   ├── data
│   │   │   ├── recorded.json
│   │   │   ├── recording.json
│   │   │   ├── reserves.json
│   │   │   └── schedule.json
│   │   └── services.sh
│   ├── docker-compose.yml
│   ├── mirakurun
│   │   ├── Dockerfile
│   │   ├── conf
│   │   │   ├── channels.yml
│   │   │   ├── server.yml
│   │   │   └── tuners.yml
│   │   ├── db
│   │   ├── mirakurun_status.js
│   │   └── services.sh
│   ├── mirakurun-chinachu.service
│   └── recorded
└── rec
    ここに録画した動画が保存されます

docker-compose.yml を編集

mirakurunはコンテナ内で動かなくていいので適当に編集します。
「192.168.0.2」の部分はmirakurunが動作しているローカルIPなので、適宜変更して下さい。

../rec:/usr/local/chinachu/recorded

と設定する事で docker-mirakurun-chinachu と同一階層にあるrecフォルダにデータが保存されます。

version: '2'
services:
  chinachu:
    build:
        context: chinachu
        args:
         - REPOSITORY=git://github.com/Chinachu/Chinachu.git
         - BRANCH=gamma
    container_name: chinachu
    ports:
     - "10772:10772"
     - "20772:20772"
     - "5353:5353/udp"
    environment:
     - "TZ=JST-9"
    volumes:
     - ./chinachu/conf/config.json:/usr/local/chinachu/config.json
     - ./chinachu/conf/rules.json:/usr/local/chinachu/rules.json
     - ./chinachu/data:/usr/local/chinachu/data
     - ../rec:/usr/local/chinachu/recorded
    extra_hosts:
     - "container-mirakurun:192.168.0.2"

chinachu\conf\config.json を編集

"recordedFormat": "<category>/<title>/<channel-name>/[<date:yymmdd-HHMM>]<fulltitle> - <subtitle>.m2ts"

と設定する事で良い感じにフォルダ分けしてくれたりします。

{
  "uid" : "chinachu",
  "recordedDir" : "/usr/local/chinachu/recorded/",
  "temporaryDir": "/tmp/",

  "wuiUsers": [
    "akari:hirakegoma"
  ],
  "wuiAllowCountries": ["JP"],
  "mirakurunPath": "http://container-mirakurun:40772/",

  "wuiPort"             : 10772,
  "wuiHost"             : "0.0.0.0",
  "wuiTlsKeyPath"       : null,
  "wuiTlsCertPath"      : null,
  "wuiOpenServer"       : false,
  "wuiOpenPort"         : 20772,
  "wuiXFF"              : false,
  "wuiPreviewer"        : true,
  "wuiStreamer"         : true,
  "wuiFiler"            : true,
  "wuiConfigurator"     : true,
  "wuiMdnsAdvertisement": true,

  "recordedFormat": "<category>/<title>/<channel-name>/[<date:yymmdd-HHMM>]<fulltitle> - <subtitle>.m2ts",
  "storageLowSpaceThresholdMB": 3000,
  "storageLowSpaceAction": "remove"
}

起動

管理者権限のあるPowerShellでdocker-mirakurun-chinachuフォルダへcdして以下コマンドを実行。

docker-compose up -d

動作確認

http://localhost:10772 へアクセスできれば完了。
f:id:yanoshi:20170708123956p:plain
f:id:yanoshi:20170708124111p:plain
f:id:yanoshi:20170710012030p:plain
f:id:yanoshi:20170710012208p:plain






まとめ

という事で、良い感じに録画サーバーを刷新できました。良い話です。昔よりもかなりシンプルになりましたね!
一応自動エンコードも組んであるのですが、その話についてはまた今度。




余談1: AndroidからChinachuを使う

これを使ってみました。
ywnb.net

以下みたいな設定でロケフリできます。
f:id:yanoshi:20170710013851p:plain

余談2: iOSからChinachuを使う

試してないけどこういうのがあります。
github.com


余談3: どうしてWSLじゃなくてDocker for Windowsなのか

なんだかWSLのバグを踏みました。
パイプ周りが怪しい気がしたのですが疲れたので調べてません…