読者です 読者をやめる 読者になる 読者になる

さわっても熱くない花火

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

Mirakurun@Windows+BonDriverProxyExで作るChinachuな録画サーバー構築

人生を常にハックして生きていきたいyanoshiです。相変わらず人権を追い求めております。

新生活の人権を向上させるべく、録画サーバーの構成を見直すこととしました。
ということでChinachuを導入します。

前回までのお話

yanoshi.hatenablog.jp

AMDなSoC PCでPT3を3枚接続してWindows上で録画サーバーを構築しました。




運用してわかったこと

PT3は熱暴走する

タイトル通りです。

上記ツイートに示しているように、録画が終わっているのにも関わらずPT3Ctrlが暴走してチューナーを専有するという問題に悩まされていた訳です。
色々と試してみたのですが、結局解決せず…

まぁ最終的にはファンをつけたら嘘みたいに問題は起こらなくなりました。単純明快ですね。
PT3は割と熱を持つようなので、調子が悪い人は冷やしてみると直るかもしれませんよ?

Windows向けの録画ツールはレガシーすぎる

素晴らしい知見とツールには大感謝なのですが、やはりコードの更新が進んでいないものが多く…お世辞にも活発に開発されているとはいえません。
一方Chinachuは現在進行形で活発に開発されているプロジェクトです。(Chinachu Air楽しみだなぁ)
Node.jsで実現されたモダンな構成に綺麗なUI…やはり心躍るものがありますよね。









追記: 近頃のDTV録画界隈の話

最近はPT3の製造中止が発表されたことによって、PT3の値段が2倍以上に跳ね上がっています。

PT3 Rev.A

PT3 Rev.A


ということでこれから録画機を作ろうとしている人はPX-W3PEとかが良いんじゃないかなぁと思う今日このごろです。

お値段的には、PT3の通常価格を思い出すお値段です。

お金持ちの人は地上波4チャンネル、BS/CS4チャンネルチューナー搭載のPX-Q3PEとかを買うと幸せになれるのかもしれません。


しかしながら、パット見この子たちにはLinux向けドライバーの情報が少ない(もしかしたら無い?)ようです。
ってことでこの子たちからTS抜きをしたい場合はBonDriverを使わざるを得ないってことですね。
すわなち…
「PX-W3PEやPX-Q3PEを使ってChinachuを動かしたい場合はMirakurun@Windowsが便利かも」
ってことですね。良い話。やっとこの記事の有用性を見つけられた気がします(白目
理論上は当記事の内容でPX-W3PEやPX-Q3PEでChinachuを動作させることが可能です。


今から録画サーバーをChinachuで構築したい人は是非参考にしてあげてください。
ちなみにPX-W3PEやPX-Q3PEのBonDriver等の情報は下記リンクに転がってそうです。
vladi.cocolog-nifty.com









構築した我が録画環境構成

f:id:yanoshi:20160519012545p:plain

はい。ひと目でわかるおかしな構成です。
「その気になれば1台にまとまるじゃん」とかそういう無粋なツッコミはやめてください。色々と事情があるのです。
「BonDriverProxy要らなくね?」というツッコミもあるかもしれません。それは確かに的を得ている気がしますけど組んじゃったんだもの。しょうがない。

データの流れ

f:id:yanoshi:20160519012555p:plain


使っているソフトウェア一覧(一応階層的に書いている)

  • Windows 10 Pro : PT3サーバー用。Windowsなら何でも良かった。
    • Node.js
      • Mirakurun : Chinachu向けのSpinel的なやつ
        • BonRecTest : Mirakurunは標準出力からTSを吐き出せるソフトウェアを必要とするので
    • BonDriverProxyEx : 機能が削減されたSpinel的なやつ
    • Visual Studio 2015 : BonDriverProxyExとBonRecTestのコンパイルに使うよ
  • Windows Server 2012 R2 : ファイルサーバー用。今後はChinachu用サーバーとしても活躍します。
    • VirtualBox : ChinachuをWindowsで動かす勇気はなかった
      • Ubuntu 14.04
        • Node.js
          • Rivarun : Mirakurunからのパケットを受け取ってChinachuに投げてくれる子
          • Chinachu : 録画及びストリーミング視聴ができるWebアプリケーション

BonDriverProxyExの導入@Windows10

Windows版のビルド

GitHub - u-n-k-n-o-w-n/BonDriverProxyEx
こちらからソースコードを拝借して、VisualStudioでコンパイルしてしまいましょう。
私はVisualStudio 2015を利用してコンパイルしました。

x64Windowsを使っているなら無難にx64でビルドしましょう。
あとソリューション構成のRelease_SVCってやつはコマンドライン版らしいです。
私はGUI版にしました。

f:id:yanoshi:20160418003058p:plain

BonDriver_PT3-○○.dllの配置

BonDriverProxyEx.exeと同じディレクトリに「BonDriver PT-ST 人柱版3(up0305)(新BS対応)」なDLLを配置します。
ダウンロードはこの辺から。
でーてーぶいあぷろだぁ
BonDriver PT-ST 人柱版3(up0305)(新BS対応)

設定等は前の記事と同じなのですが、一応メモっておきます。

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

BonDriverProxyEx.iniの記載

Gistにおいておきました。
BonDriverProxyEx.ini
↑Mirakurunが動作しているマシンのIPが192.168.0.3の場合

あと、デフォルトのポート(1192番)が当方の環境では何かと衝突しちゃったので、代わりに11920番ポートを使っています。

ファイル構成

例えばPT3を3枚接続している当環境ではこんな感じになります。
f:id:yanoshi:20160519020142p:plain

ファイヤーウォールの設定

ちゃんと受信規則も送信規則を設定しときませう。
f:id:yanoshi:20160422012451p:plain
f:id:yanoshi:20160422012555p:plain

起動

起動させるとタスクトレイに常駐します。
動作してない時は情報ウィンドウに何も表示されません。
f:id:yanoshi:20160422013222p:plain

安心してください。動作しているときはここに何かが表示されます。
f:id:yanoshi:20160519035000p:plain

自動起動の設定

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp」にBonDriverProxyEx.exeへのショートカットを置いておきましょう。








BonDriver_Proxyのコンパイル

BonDriverProxyExのクライアント側となるDLLのコンパイルをしておきます。

後述するRecBonTestやTVTest等で利用します。

github.com

OSがx64ならx64コンパイルすれば良いと思います。
私はこんな構成でコンパイルしました。
f:id:yanoshi:20160519023842p:plain
ちなみに必要なのは「BonDriver_Proxy」だけなので、他のやつはコンパイルする必要はありません。









TVTestでテスト

さて、ここまでの設定でBonDriverProxyExが動作するか試してみましょう。
TVTestに関しては前回の記事を見てください。
チャンネル設定ファイルが欲しければ以下を参照すると良いでしょう。
px-w3pe @ ウィキ - TVTestチャンネル設定ファイル


先ほど作ったBonDriver_Proxy.dllコピー+リネームBonDriver_Proxy-S.dllBonDriver_Proxy-T.dllを作成。その後TVTest.exeと同じディレクトリに配置します。
また同じ場所にBonDricer_Proxy-S.iniBonDriver_Proxy-T.iniを配置します。これもGistにおいてます。
BonDriver_Proxy-S.ini
BonDriver_Proxy-T.ini


ch2ファイルはこれまでの物を流用すると良いと思います(BonDriver_Proxy-S.ch2とBonDriver_Proxy-T.ch2にリネーム)

これで普通に動作するはず(多分
f:id:yanoshi:20160519025228p:plain

注意点

  • 当然ですが、BonDriver_Proxyをx64でビルドしたならTVTestもx64版を利用しましょう
  • BonDriverProxyExにはスクランブルを解除する機能は付いていません
    • ということでスクランブル解除機能付きのTVTestを利用しましょう

Mirakurunの導入@Windows10

MirakurunはChinachu用のSpinelみたいな子らしいです。
ナウでヤングらしく、Chinachu Airはこちらの子でしか動作しないらしいので後々の事を考えて導入してみました。

基本的に公式ページに書いてある方法で普通にインストールできました。
GitHub - kanreisa/Mirakurun: DTV Tuner Server Service for Chinachu Air.

RecBonTestのコンパイルと配置

Mirakurun自身はチューナーにアクセスする機能を有していません。標準出力からTSを吐いてくれるソフトウェアを介してチューナーとやり取りするようです。
AutoConvertの作者さんでもあるrndomhack氏が良い感じのソフトウェアを作ってくださっているのでそれを活用します。
ちなみにスクランブル解除はこの子にて行っています。

コンパイル

GitHub - rndomhack/BonRecTest: Recoding test program for BonDriver

ダウンロードしてよしなにしてください。
BonDriver_Proxyと同じターゲットプラットフォーム設定でコンパイルしましょう。

設定

BonRecTestには特に設定は存在していません。なぜなら設定情報は全てコマンドライン引数で与えれるからです。
ということで適当な場所にファイルを配置しておきましょう。
私の場合は次のようなディレクトリ構造にしました。
BonDriver_Proxy-T.dll等は前述のTVTestで動作確認できている物を持ってきます。

C:\soft\PT3\BonRecTest
 |
 |-BonRecTest.exe
 |-B25Decoder.dll
 |
 |-proxy
    |
    |-BonDriver_Proxy-S.dll
    |-BonDriver_Proxy-S.ini
    |-BonDriver_Proxy-T.dll
    |-BonDriver_Proxy-T.ini

B25Decoder.dllは下記リンクあたりから拾ってください。
でーてーぶいあぷろだぁ


Node.jsの導入

バージョン5.9.0以上であればOKみたいです。
Node.js
適当に入れましょう。

インストール

「管理者権限で起動したPowerShellを使ってね」とのこと。

npm install winser -g
npm install mirakurun -g --production

ちなみにこのwinserってのはNode.jsでWindowsサービスを実現するためのなにがしらしいです。
ということで、サービスでMirakurunが動作します。

設定

これもまたGistにまとめてあります。
channels.yml
server.yml
tuners.yml
チャンネル情報は有料チャンネルを含め全て書き込んでいるので、適宜無効にして使うとすっきりするはずです。

注意点

WindowsでMirakurunを動作させる場合、Linux向けに書かれた設定情報はほぼ流用できません。
BonDriverはLinux上のPTx向けドライバとは違ったチャンネル番号だったりするので、BonDriver向けの設定にしてやる必要があります。

私はこれに気が付かなくてかなり時間を浪費しました…









VirtualBoxのインストール+Ubuntuのインストール@Windows Server

この辺は特別なことはしてないので割愛します。
Oracle VM VirtualBox
Homepage | Ubuntu Japanese Team









Ubuntuの下準備@VirtualBox

基本的に参考文献から引っ張ってきました。多謝。
以下のコマンドで色々と必要な物をぶち込んだ後にユーザーを作ってます。

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


その後、適当に管理者権限をいじいじして…

sudo visudo
...末尾...
chinachu ALL=(ALL)ALL


ユーザー切り替え。

sudo -i -u chinachu

共有フォルダ

一応ホストOSな領域にTSファイルを保存しておきたかったので、共有フォルダに関する設定をしておきました。
f:id:yanoshi:20160519033200p:plain

また、共有フォルダにアクセスできるユーザの設定をしないとややこしいことになるのでやっておきましょう。
VirtualBoxにおいて、ホストOSとゲストOS間の共有フォルダを作成する方法 - Qiita

sudo gpasswd --add chinachu vboxsf

自動起動の設定

ホストOSが起動したタイミングでUbuntuが立ち上がるように設定しておくと、色々とはかどります。

以下の様なバッチファイルを作って…

"C:\Program Files\Oracle\VirtualBox\vboxmanage" startvm "ubuntu14" --type headless

そのバッチファイルへのショートカットを「C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp」に置いておけばWindowsが起動すると自動的にゲストOSも立ち上がります。








Rivarunの導入@Ubuntu

ここに書いてある後半の方を実行します。
Using Mirakurun with Rivarun on Chinachu Beta · kanreisa/Chinachu Wiki · GitHub

Node.jsの導入

Node.jsの5.9.0以上である必要があるっぽいので、適当に下ごしらえします。

cd /tmp/
wget https://nodejs.org/dist/v5.9.0/node-v5.9.0-linux-x64.tar.xz
tar Jxf node-v5.9.0-linux-x64.tar.xz
cd node-v5.9.0-linux-x64/
sudo cp -uv bin/* /usr/local/bin/
sudo cp -ruv include/* /usr/local/include/
sudo cp -ruv lib/* /usr/local/lib/
sudo cp -ruv share/* /usr/local/share/

しかしながらこれだけではどうしてかnpmが動いてくれません。
ググるとこんな記事がありました。
qiita.com
私と同じように上手く行かない人は以下のコマンドを実行しましょう。

curl -0 -L http://npmjs.org/install.sh | sudo sh

インストール

さすがNode.jsで作られているだけはありますね。
コマンド一つで入っちゃいます。

sudo npm install rivarun -g

Rivarunの仕様について

github.com








Chinachu Betaの導入@Ubuntu

以下に書いてある通りにやれば動きます。
Installation · kanreisa/Chinachu Wiki · GitHub

インストール

適当に必要な物を放り込んで…

sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf

クローン+インストール

git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
cd ~/chinachu/
./chinachu installer
# Auto を選択

設定

空のルール設定ファイルを作成

echo [] > rules.json

基本的には以下のリンクの通りに設定すれば良いですが…
Configuration · kanreisa/Chinachu Wiki · GitHub
一部をRivarun(もっと言うとBonDriver)向けに記述する必要があります

ということでconfig.jsonをGistにおいておきました。
Chinachu設定ファイル(Windowsで動くMirakuruに対して、Rivarunを使って接続) · GitHub
仕様は次のようになっています。

  • 以下のIDとパスワードでログイン可能
    • ID: akari
    • Pass: hirakegoma
  • 動画の保存ディレクトリは、共有フォルダとして自動マウントしているrecフォルダ
    • /media/sf_rec/
  • Mirakurunが動作しているマシンのIPは192.168.0.3

動作チェック

./chinachu service wui execute
# 問題なく起動できたらCtrl+\で終了

./chinachu update -f
# EPG取得テスト

サービスとして登録

./chinachu service operator initscript > /tmp/chinachu-operator
./chinachu service wui initscript > /tmp/chinachu-wui
sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui
sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui
sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/

insservの設定ができてなかったので、事前に設定してから…

sudo ln -s /usr/lib/insserv/insserv /sbin/insserv

chinachu-operatorとchianchu-wuiを登録

sudo insserv chinachu-operator
sudo insserv chinachu-wui

サービス起動

sudo service chinachu-operator start
sudo service chinachu-wui start

完成

http://chinachuの動作するUbuntuIPアドレス:10772/ でアクセスできるはずです。








おわりに

素晴らしいシステムを作ってくださり、更にSlack上でも気さくに質問に対応してくださったkanreisa氏に多謝。

エンコード等の話についてはまた別の記事でまとめることにします。とりあえずこんな感じ。