努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:os:freebsd:ptx:ptx-002

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
documents:os:freebsd:ptx:ptx-002 [2026/05/07 22:20] – ↷ 移動操作に合わせてリンクを書き換えました。 k896951documents:os:freebsd:ptx:ptx-002 [2026/05/30 18:40] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 k896951
行 1: 行 1:
 +====== 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 が稼働していて、[[documents:os:freebsd:ptx:ptx-001|recpt1で録画が可能]]な状態であることが前提。
 +
 +先に、いくつかディレクトリを作る。もしかすると /usr/local/var は既に存在しているかもしれない。\\
 +<del>ディレクトリ /usr/local/var/log はパーミッションをいじっておかないとMirakurunがブツクサ言ってくるのでとりあえずの変更。</del>Chinachuを導入した時にChinachuがブツブツ…
 +<code>
 +# mkdir /usr/local/etc/mirakurun
 +# mkdir /usr/local/var
 +# mkdir /usr/local/var/log
 +# chmod guo+rwx /usr/local/var/log
 +</code>
 +
 +==== 追記 2019/01/28 ====
 +
 +また私の環境下では不要だったようなのですが、[[https://twitter.com/HackerMaskee|@HackerMaskee]]さんからの情報で、
 +<code>
 +# mkdir -p /usr/local/var/db/mirakurun
 +</code>
 +を実行しておく必要があったとの事です。
 +
 +===== インストール =====
 +
 +Node.js配下で動作するサービスなので、それらも含めて前提ソフトウエアを先に導入しておく。
 +Mirakurunの前提環境のバージョン情報から、以下を導入した。Portsでもpkgでも好きな方から導入すればいい。
 +
 +また、こちら [[http://www.mousou.org/node/461|Mirakurun を jail の中で動かす。]] でjailに隔離する方法があるので必要な場合はこちらをご確認ください。
 +
 +==== 前提ソフトウエアの導入 ====
 +
 +  * <del>www/node6</del> www/node8
 +  * <del>www/npm3</del> www/npm5
 +  * shells/bash
 +  * arib-b25-stream-test
 +
 +=== www/node8, www/npm5 ===
 +
 +Portsなりpkgなりで導入する。
 +
 +=== shells/bash ===
 +
 +bashインストール後は以下のシンボリックリンクを張っておく。どうも /usr/local/bin/bash ではなく /bin/bash が前提らしい。
 +
 +<code>
 +ln -s /usr/local/bin/bash /bin/bash
 +</code>
 +
 +=== arib-b25-stream-test インストール ===
 +
 +こちらは[[http://www.mousou.org/node/460|Mirakurun を FreeBSD にインストールする(2018-12-12版)]]の手順そのまま。
 +
 +<code>
 +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
 +</code>
 +
 +==== Mirakurunのインストール ====
 +
 +今回はユーザ mirakurun を作ってホームディレクトリ下にgitでリポジトリをクローンしている。
 +また、2017-05-19 のコミットで番組情報が集積されない不具合が修正されているので古いソースを取得しちゃった人は取り直し。
 +
 +<code>
 +# cd /home/mirakurun
 +# git clone https://github.com/Chinachu/Mirakurun/
 +# cd Mirakurun
 +</code>
 +
 +=== サポートOSにFreeBSDを追加 ===
 +
 +<code javascript 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"
 +    ]
 +  }
 +</code>
 +
 +=== Server.config に Listenアドレスのパラメタを追加 ===
 +
 +オリジナルは、利用可能なすべてのnicのすべてのアドレスでListenするようになっている。
 +
 +NIC1枚でIPを1つ割り当てをしている様な普通の環境なら問題ない。\\
 +が、うちはNIC2枚かつ各NICで複数IPアドレスを振っているのでちと困る。
 +
 +<code javascript 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;
 +</code>
 +
 +<code javascript 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 = [
 +</code>
 +
 +=== Mirakurunビルド ===
 +
 +<code>
 +# npm install pm2 -g
 +# npm install
 +# npm run build
 +# npm install . -g --unsafe --production
 +</code>
 +
 +pm2はmirakurunをバックグラウンドで実行するためのデーモンツール。
 +
 +次にファイルコピー。
 +<code>
 +# 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/
 +</code>
 +
 +==== Mirakurunの設定 ====
 +
 +ディレクトリ /usr/local/etc/mirakurun にコピーした設定ファイルを編集する。
 +以下のコマンドで対応する設定ファイルを編集できる。
 +<code>
 +# mirakurun config server     ← server.ymlの編集
 +# mirakurun config tuners     ← tuners.ymlの編集
 +# mirakurun config channels   ← channels.ymlの編集
 +</code>
 +
 +=== server.yml ===
 +
 +addr パラメタを記述しなければオリジナルの振る舞いになる。
 +addr パラメタを記述する時は IPアドレスを一つだけ定義。
 +<code yaml>
 +# 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
 +</code>
 +
 +=== tuners.yml ===
 +
 +この定義は
 +  * チューナーはPT2が1枚で地上波デジタル放送受信だけ使用。
 +  * recpt1コマンドをチューナーアクセスに使う。--b25オプションで常時スクランブル解除する。
 +  * デコーダーは未指定。
 +
 +デバイス名はFreeBSDでのデバイス名でLinuxのそれとは違うので注意。
 +
 +<code yaml>
 +- 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
 +</code>
 +
 +次の定義は
 +  * チューナーはPT2が1枚で地上波デジタル放送受信だけ使用。
 +  * recpt1コマンドをチューナーアクセスに使う。
 +  * デコーダーに arib-b25-stream-test を利用する。
 +
 +<code yaml>
 +- 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
 +</code>
 +
 +=== channels.yml ===
 +
 +自分の地域での受信環境に合わせる。私の場合は以下だけ追加。
 +
 +<code yaml>
 +- name: TVK
 +  type: GR
 +  channel: '18'
 +  isDisabled: false
 +</code>
 +
 +==== Mirakurun起動 ====
 +
 +引数無しだとヘルプが表示される。
 +
 +<code>
 +# 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.
 +
 +#
 +</code>
 +
 +以下のコマンドで起動する。
 +<code>
 +# mirakurun start
 +</code>
 +
 +コンソール上でログを見る場合は以下のコマンドで。
 +<code>
 +mirakurun log server 
 +</code>
 +
 +=== 追記 2019/01/28 ===
 +
 +私の環境下では発生しなかったのですが、[[https://twitter.com/HackerMaskee|@HackerMaskee]]さんからの情報で、
 +<code>
 +# mirakurun start
 +[PM2][ERROR] script not found : /home/mirakurun/Mirakurun/mirakurun-server
 +
 +</code>
 +とエラーが発生して起動せず、次の手順が必要になったとのことです。
 +
 +<code>
 +# cd /usr/local/lib/node_modules/mirakurun
 +# pm2 start processes.json
 +</code>
 +
 +===== 録画クライアント =====
 +
 +クライアント rivarun をインストールする。
 +
 +<code>
 +# npm install rivarun -g
 +</code>
 +
 +引数無しでヘルプ表示。
 +<code>
 +# 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
 +
 +#
 +</code>
 +
 +ほぼ recpt1と同じように利用できる。
 +<code>
 +# 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 へ記録する
 +</code>
 +
 +Mirakurunのtuners.ymlの設定でdecoderオプションを指定できているならrivarunの--b25オプションは意味あり。 decoder未指定の場合は、recpt1の --b25 オプションでスクランブル解除を行うことになるかと。\\
 +Mirakurunが稼働しているマシンがリモートにあるのなら --mirakurun オプションでMirakurunのサービスを指定できる。
 +
 +
 +===== ストリーミング =====
 +
 +recpt1のように、VLCメディアプレイヤーでストリーミング視聴もできる。以下は192.168.1.20:40772で稼働しているMirakurunに接続しチャンネル16をストリーミングする例。\\
 +{{documents:os:freebsd:freebsd-025.00.png?nolink|}}\\
 +
 +サービスIDを指定しないため、チャンネルによってはワンセグがストリーミングされるかもしれない。その場合にはサービスIDを明示する。\\
 +{{documents:os:freebsd:freebsd-025.01.png?nolink|}}\\
 +
 +サービスIDはMirakurunのAPIで確認ができる。\\
 +{{documents:os:freebsd:freebsd-025-02.png?nolink|}}\\
 +
 +以下のrivarunコマンドでAPIから取得する事もできる。
 +<code>
 +# rivarun --list | nkf
 +</code>
 +rivarunの表示はutf-8で行われるので、nkfで文字化けを抑止している ※うちの環境はeuc-jpなので。
 +
 +または、Chinachu γ を導入するのもよい。
 + https://github.com/Chinachu/Chinachu 
 +
 +Chinachu γならブラウザでストリーミング視聴出来たり、予約録画や番組表を参照できる。
 +
 +{{tag> 技術資料 FreeBSD PT1 PT2 PT3 Mirakurun rivarun}}
  
documents/os/freebsd/ptx/ptx-002.txt · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki