utamt engineer blog

アプリケーション開発について学んだことの備忘録です。

録画サーバ構築(2)

事前作業

utamt.hatenablog.com

チューナーサーバ(Mirakurun)のインストール

チューナーサーバ Mirakurun をインストールしていく。
これにより、録画コマンドの並列処理や、複数チューナーの管理、優先度処理が可能になる。今回使うMirakurunでは、apiを使って多くの処理を簡略化できるため後々の拡張性が高い。

Node.js のインストール

最初に Mirakurun を動かすために必要な Node.js をインストールする。npmをインストールをしている場合が多いが、Node.jsだけでも十分とのこと。

$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - 
$ sudo apt-get install nodejs

Mirakurun のインストール

$ sudo npm install pm2 -g
$ sudo pm2 startup
$ sudo npm install mirakurun -g --unsafe --production

チューナーの設定

Mirakurunがチューナーを認識するよう設定を加える。
Mirakurunがインストールされると、/usr/local/etc/mirakurunに3つの設定ファイルが生成される。
設定が必要なのは、tuners.ymlとchannels.ymlの2つ。

tuners.ymlでは、チューナーの設定を行う。

$ sudo mirakurun config tuners

末尾に下記を追記する。

- name: PX-S1UD-1
types:
- GR
command: recdvb --b25 --strip <channel> - -

尚、今回使用した PX-S1UD V2.0 は 1チューナーなので 1つだけで大丈夫だが、PX-Q1UD の場合は 4チューナーあるので4つ設定が必要となる。

- name: PX-Q1UD-1_1
  types:
    - GR
  command: recdvb --b25 --strip --dev 0 <channel> - -

- name: PX-Q1UD-1_2
  types:
    - GR
  command: recdvb --b25 --strip --dev 1 <channel> - -

- name: PX-Q1UD-1_3
  types:
    - GR
  command: recdvb --b25 --strip --dev 2 <channel> - -

- name: PX-Q1UD-1_4
  types:
    - GR
  command: recdvb --b25 --dev 0 <channel> - -

次に、チャンネルスキャンを実施する。channels.yml に電波塔に応じた物理チャンネル番号を登録する。
channels.yml を手動更新しても良いが、下記 Mirakurun の channels scan API でスキャンするのが簡単なためこちらで実行する。

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

これでMirakurunの設定が完了したので、Mirakurun を再起動する。

$ sudo mirakurun restart
-> status に onlineと表示されればok

設定確認

チャンネルが正しく設定されていることをブラウザ or curlコマンドで確認する。

$ curl http://[IPアドレス]:40772/api/channels

~中略~
...,{"type":"GR","channel":"21","name":"フジテレビ","services":[{"id":3274001056,"serviceId":1056,"networkId":32740,"name":"フジテレビ"},{"id":3274001057,"serviceId":1057,"networkId":32740,"name":"フジテレビ"},{"id":3274001058,"serviceId":1058,"networkId":32740,"name":"フジテレビ"},{"id":3274001440,"serviceId":1440,"networkId":32740,"name":"フジテレビ"}]},...
~中略~

結果がこんな感じで返ってくればチャンネル登録はOK。

補足

この時点で recdvbコマンドを打たなくてもブラウザ経由でのリアルタイムストリーミング配信ができるようになる。視聴方法はrecdvbと変わらないが、URLが下記に変更される。

http://[IPアドレス]:40772/api/channels/GR/[物理チャンネル]/stream

録画サーバ(Chinachu)のインストール

GUIで番組表からの録画予約をできるようにする。
録画サーバ Chinachu は、地デジ波から最新の番組表データを取得でき、ブラウザから録画予約ができるため、市販レコーダーのような操作が可能となる。

# 事前に必要なパッケージをインストールする
$ sudo apt-get install build-essential curl git-core vainfo

# Chinachuをインストールする
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu/
$ ./chinachu installer
-> インストールオプションは、1.Autoを選択する

# 録画ルールの初期ファイルを作成
# 作成しない場合はアニメと笑点辺りを自動で録画するルール(rules.sample.json)が設定される
$ echo "[]" > rules.json

# 録画設定ファイルの作成・編集する
$ cp config.sample.json config.json
$ vim config.json
  "uid": "pi"
  "recordedDir" : "/mnt/hdd1/recorded/",
  "temporaryDir" : "/mnt/hdd1/recorded/",
  ~中略~
  "wuiOpenHost": "0.0.0.0",
  ~中略~
  "recordedFormat": "[<date:yymmdd-HHMM>][<channel-name>]<title> <subtitle> <episode:2>.m2ts",

設定が完了したので、Chinachuを起動する。

$ cd ~/chinachu
$ ./chinachu service wui execute

# 起動できたら一度 [ctrl + c] で停止し、EPG(番組表)の取得テストを行う
$ ./chinachu update

# Chinachuを起動する
$ ./chinachu service wui execute

ブラウザで動作確認する。

http://[IPアドレス]:20772/

下記のようなページが取得できれば成功。

f:id:Utamt:20200503201133p:plain

f:id:Utamt:20200503201937p:plain

先のwuiの起動で、ページ表示、録画予約、設定ファイルの更新などができるようになった一方で、実際に録画処理を実行するにはこれとは別にoperatorを起動する必要がある。
もう一つターミナルを開き、operatorを起動する。

$ cd ~/chinachu
$ ./chinachu service operator execute

これでサーバの構築は完了。