目次
FreeBSDでMirakurunを動かす
2019/01/28
色々コメントを貰いドキュメント構成を変更。情報追記。
2017/05/21
FreeBSD 11.0 RELEASEで無事導入までできたのでその際のメモ書き。
Mirakurun 2.6.1 はnode6サポートを終了。node8を使われたし。Updateすると当然パッチあてたファイルも書き換わるから再度修正がいる。
Mirakurunって何?
DVR Tuner Server Service for Chinachu Air. https://github.com/Chinachu/Mirakurun
Chinachu Airが何ぞや、という話は置いておく。
Mirakurunはデジタル放送チューナーデバイスを管理するサービス。
recpt1等物理層直叩きなプログラムを隠蔽し、HTTPのREST API経由で操作可能としている。
面倒なチューナーの管理を不要とできるので、このサービスに登録したチューナーデバイスは複数のプログラムやサービスで共用する事が可能になる。
このサービスからEPG情報の取得や放送のストリーミング視聴ができるし、効率的なチューナーの利用がされるので、人によっては録画可能な番組が増えるかもしれない。
例えば、TOKYO MXの地上波デジタル放送だとマルチチャンネルと称し MX1,MX2の2放送が1つのチャンネルで送信されている。
チューナーが2つある環境で同時間帯のMX1,MX2の放送を受信したい場合、
- recpt1コマンド等単体の録画プログラムを使う場合MX1,MX2それぞれ用にチューナーが2つ使用されることになる。同時間帯の他の放送を録画できないし、リアルタイム視聴する事もできない。
- Mirakurun(のサービス)を使う場合、1つのチューナーで受信が行われMX1,MX2にデータが分離されて放送データ提供が行われる。空きチューナーで同時間帯の他の放送を録画したり、リアルタイム視聴する事もできる。
という恩恵がある。
前提
ここの説明では、 PT2/PT3 が稼働していて、recpt1で録画が可能な状態であることが前提。
先に、いくつかディレクトリを作る。もしかすると /usr/local/var は既に存在しているかもしれない。
ディレクトリ /usr/local/var/log はパーミッションをいじっておかないとMirakurunがブツクサ言ってくるのでとりあえずの変更。Chinachuを導入した時にChinachuがブツブツ…
# mkdir /usr/local/etc/mirakurun # mkdir /usr/local/var # mkdir /usr/local/var/log # chmod guo+rwx /usr/local/var/log
追記 2019/01/28
また私の環境下では不要だったようなのですが、@HackerMaskeeさんからの情報で、
# mkdir -p /usr/local/var/db/mirakurun
を実行しておく必要があったとの事です。
インストール
Node.js配下で動作するサービスなので、それらも含めて前提ソフトウエアを先に導入しておく。 Mirakurunの前提環境のバージョン情報から、以下を導入した。Portsでもpkgでも好きな方から導入すればいい。
また、こちら Mirakurun を jail の中で動かす。 でjailに隔離する方法があるので必要な場合はこちらをご確認ください。
前提ソフトウエアの導入
www/node6www/node8www/npm3www/npm5- shells/bash
- arib-b25-stream-test
www/node8, www/npm5
Portsなりpkgなりで導入する。
shells/bash
bashインストール後は以下のシンボリックリンクを張っておく。どうも /usr/local/bin/bash ではなく /bin/bash が前提らしい。
ln -s /usr/local/bin/bash /bin/bash
arib-b25-stream-test インストール
こちらはMirakurun を FreeBSD にインストールする(2018-12-12版)の手順そのまま。
fetch https://registry.npmjs.org/arib-b25-stream-test/-/arib-b25-stream-test-0... tar xf arib-b25-stream-test-0.2.9.tgz mv package arib-b25-stream-test cd arib-b25-stream-test mv package.json package.json.orig sed -e 's/"linux"/"linux","freebsd"/g' -e 's/make /make CC=cc CXX=c++ /g' package.json.orig | jq . > package.json npm install . -g --unsafe
Mirakurunのインストール
今回はユーザ mirakurun を作ってホームディレクトリ下にgitでリポジトリをクローンしている。 また、2017-05-19 のコミットで番組情報が集積されない不具合が修正されているので古いソースを取得しちゃった人は取り直し。
# cd /home/mirakurun # git clone https://github.com/Chinachu/Mirakurun/ # cd Mirakurun
サポートOSにFreeBSDを追加
- package.json.diff
*** package.json.org 2017-05-20 04:56:44.531365000 +0900 --- package.json 2017-05-20 04:56:44.532775000 +0900 *************** *** 92,97 **** "os": [ "linux", "darwin", ! "win32" ] } --- 92,98 ---- "os": [ "linux", "darwin", ! "win32", ! "freebsd" ] }
Server.config に Listenアドレスのパラメタを追加
オリジナルは、利用可能なすべてのnicのすべてのアドレスでListenするようになっている。
NIC1枚でIPを1つ割り当てをしている様な普通の環境なら問題ない。
が、うちはNIC2枚かつ各NICで複数IPアドレスを振っているのでちと困る。
- config.ts.diff
*** src/Mirakurun/config.ts.org 2017-05-20 04:58:10.676229000 +0900 --- src/Mirakurun/config.ts 2017-05-20 04:58:10.677490000 +0900 *************** *** 24,29 **** --- 24,30 ---- // as Remote Server readonly port?: number; + readonly addr?: string; /** `true` to disable IPv6 listening */ readonly disableIPv6?: boolean;
- Server.ts.diff
*** src/Mirakurun/Server.ts.org 2017-05-20 04:59:34.098231000 +0900 --- src/Mirakurun/Server.ts 2017-05-20 04:59:34.098925000 +0900 *************** *** 44,54 **** } if (serverConfig.port) { ! addresses = [ ! ...addresses, ! ...system.getPrivateIPv4Addresses(), ! "127.0.0.1" ! ]; if (serverConfig.disableIPv6 !== true) { addresses = [ --- 44,62 ---- } if (serverConfig.port) { ! if (serverConfig.addr) { ! addresses = [ ! ...addresses, ! serverConfig.addr, ! "127.0.0.1" ! ]; ! } else { ! addresses = [ ! ...addresses, ! ...system.getPrivateIPv4Addresses(), ! "127.0.0.1" ! ]; ! } if (serverConfig.disableIPv6 !== true) { addresses = [
Mirakurunビルド
# npm install pm2 -g # npm install # npm run build # npm install . -g --unsafe --production
pm2はmirakurunをバックグラウンドで実行するためのデーモンツール。
次にファイルコピー。
# cp -v config/DO_NOT_EDIT_THESE_ /usr/local/etc/mirakurun/ # cp -v config/channels.yml /usr/local/etc/mirakurun/ # cp -v config/server.yml /usr/local/etc/mirakurun/ # cp -v config/tuners.yml /usr/local/etc/mirakurun/
Mirakurunの設定
ディレクトリ /usr/local/etc/mirakurun にコピーした設定ファイルを編集する。 以下のコマンドで対応する設定ファイルを編集できる。
# mirakurun config server ← server.ymlの編集 # mirakurun config tuners ← tuners.ymlの編集 # mirakurun config channels ← channels.ymlの編集
server.yml
addr パラメタを記述しなければオリジナルの振る舞いになる。 addr パラメタを記述する時は IPアドレスを一つだけ定義。
# logLevel: <number> logLevel: 2 # path: <string> path: /var/run/mirakurun.sock # port: <number> # You can change this if port conflicted. # Don't expose this port on the internet, not even with NAPT. # Use this in LAN or VPN. # `~` to disable TCP port listening. port: 40772 addr: 192.168.1.100
tuners.yml
この定義は
- チューナーはPT2が1枚で地上波デジタル放送受信だけ使用。
- recpt1コマンドをチューナーアクセスに使う。–b25オプションで常時スクランブル解除する。
- デコーダーは未指定。
デバイス名はFreeBSDでのデバイス名でLinuxのそれとは違うので注意。
- name: PT2-T1 types: - GR command: recpt1 --b25 --device /dev/ptx0.t0 <channel> - - decoder: ~ isDisabled: false - name: PT2-T2 types: - GR command: recpt1 --b25 --device /dev/ptx0.t1 <channel> - - decoder: ~ isDisabled: false
次の定義は
- チューナーはPT2が1枚で地上波デジタル放送受信だけ使用。
- recpt1コマンドをチューナーアクセスに使う。
- デコーダーに arib-b25-stream-test を利用する。
- name: PT2-T1 types: - GR command: recpt1 --device /dev/ptx0.t0 <channel> - - decoder: arib-b25-stream-test isDisabled: false - name: PT2-T2 types: - GR command: recpt1 --device /dev/ptx0.t1 <channel> - - decoder: arib-b25-stream-test isDisabled: false
channels.yml
自分の地域での受信環境に合わせる。私の場合は以下だけ追加。
- name: TVK type: GR channel: '18' isDisabled: false
Mirakurun起動
引数無しだとヘルプが表示される。
# mirakurun Usage: mirakurun <command> ... <command>: config server Edit server configuration. config tuners Edit tuner configuration. config channels Edit channels configuration. log Stream logs. log --help Show usage for log stream. status Show status of services. start Start services. stop Stop services. restart Restart services. version Version info. help Output this information. #
以下のコマンドで起動する。
# mirakurun start
コンソール上でログを見る場合は以下のコマンドで。
mirakurun log server
追記 2019/01/28
私の環境下では発生しなかったのですが、@HackerMaskeeさんからの情報で、
# mirakurun start [PM2][ERROR] script not found : /home/mirakurun/Mirakurun/mirakurun-server #
とエラーが発生して起動せず、次の手順が必要になったとのことです。
# cd /usr/local/lib/node_modules/mirakurun # pm2 start processes.json
録画クライアント
クライアント rivarun をインストールする。
# npm install rivarun -g
引数無しでヘルプ表示。
# rivarun Usage: rivarun [--b25] [--mirakurun host:port] [--priority priority] [--sid SID] [--ch type/channel] rectime destfile Remarks: * if rectime is `-`, records indefinitely. * if destfile is `-`, stdout is used for output. * if `--sid` option specified, will ignore `--ch` option. Options: --b25: Send decode request --mirakurun host:port: Specify Mirakurun hostname and portnumber --priority priority: Specify client priority (default=0) --sid SID: Specify SID number --ch type/channel Specify channeltype and channel type = GR | BS | CS | SKY --help: Show this help --version: Show version --list: Show channel list #
ほぼ recpt1と同じように利用できる。
# recpt1 --b25 --sid hd 18 180 ch18.ts ← recpt1で 18チャンネル を 180秒間 ファイル ch18.ts へ記録する # rivarun --b25 --ch GR/18 180 ch18.ts ← rivarunで 18チャンネル を 180秒間 ファイル ch18.ts へ記録する # rivarun --b25 --mirakurun 10.0.0.100:40772 --ch GR/18 180 ch18.ts ← IPアドレス10.0.0.100で稼働しているMirakurunで 18チャンネル を 180秒間 ファイル ch18.ts へ記録する
Mirakurunのtuners.ymlの設定でdecoderオプションを指定できているならrivarunの–b25オプションは意味あり。 decoder未指定の場合は、recpt1の –b25 オプションでスクランブル解除を行うことになるかと。
Mirakurunが稼働しているマシンがリモートにあるのなら –mirakurun オプションでMirakurunのサービスを指定できる。
ストリーミング
recpt1のように、VLCメディアプレイヤーでストリーミング視聴もできる。以下は192.168.1.20:40772で稼働しているMirakurunに接続しチャンネル16をストリーミングする例。
サービスIDを指定しないため、チャンネルによってはワンセグがストリーミングされるかもしれない。その場合にはサービスIDを明示する。
サービスIDはMirakurunのAPIで確認ができる。
以下のrivarunコマンドでAPIから取得する事もできる。
# rivarun --list | nkf
rivarunの表示はutf-8で行われるので、nkfで文字化けを抑止している ※うちの環境はeuc-jpなので。
または、Chinachu γ を導入するのもよい。 https://github.com/Chinachu/Chinachu
Chinachu γならブラウザでストリーミング視聴出来たり、予約録画や番組表を参照できる。