Mirakurun互換で動作が軽いと言うmirakcをPCのDebian 10.1とRaspberry Pi 3のRaspbian Buster Liteにインストールしてみた。
mirakc-aribのインストール
epgdumpやtssplitterに相当するmirakc-aribが必要なのでインストールする。基本的にはドキュメントのHow to buildの通りだけど、ninjaコマンドを使っているのでninja-buildパッケージも予めインストールしておく必要がある。逆にdos2unixは無くても問題ないみたい。cmakeでconfigure的な役割を、ninjaでmake的な役割を行っている。必要なバイナリはmirakc-aribの1ファイルだけ。
sudo apt-get install -y git cmake ninja-build g++ autoconf pkg-config libtool git clone https://github.com/masnagam/mirakc-arib cd mirakc-arib cmake -S . -B build -G Ninja -D CMAKE_BUILD_TYPE=Release ninja -C build vendor ninja -C build sudo cp build/bin/mirakc-arib /usr/local/bin/ cd ..
mirakcのインストール
mirakcはCやC++のように使えるプログラミング言語のRustで作られているので、ビルドするためにRustをインストールする。インストール途中に「Current installation options:」が出たら「1) Proceed with installation (default)」を選択するために「>」に「1」を入力する。終わったら設定をsourceで読み込んでパスを通す。
sudo apt-get install -y curl curl https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env
mirakcのビルド方法はamd64 native buildのDockerfileの中に書いてある。cargoはRust向けのビルドツールでmake的な役割を行っている。必要なバイナリはmirakcの1ファイルだけで、設定ファイルを-cオプションで指定して起動するだけ。設定ファイルで指定したEPGデータの格納ディレクトリは起動したユーザで書き込めるようにしておく。
git clone https://github.com/masnagam/mirakc cd mirakc cargo build --release sudo cp target/release/mirakc /usr/local/bin/ cd ..
mirakcの設定
mirakcのインストールでconfig.ymlのサンプルが記載されているので、チャンネルとチューナーの設定を自分の環境に合わせて書き換えて作成する。
sudo mkdir /etc/mirakc cat << 'EOT' | sudo tee /etc/mirakc/config.yml server: address: '0.0.0.0' port: 40772 workers: 3 channels: - name: NHKEテレ type: GR channel: '13' - name: BS朝日1 type: BS channel: BS01_0 serviceId: 151 - name: TBSチャンネル1 type: CS channel: CS2 serviceId: 296 tuners: - name: PT3-S1 types: - BS - CS command: recpt1 --b25 --device /dev/pt3video0 {{channel}} {{duration}} - - name: PT3-T1 types: - GR command: recpt1 --b25 --device /dev/pt3video2 {{channel}} {{duration}} - tools: scan-services: mirakc-arib scan-services{{#xsids}} --xsid={{.}}{{/xsids}} collect-eits: mirakc-arib collect-eits{{#xsids}} --xsid={{.}}{{/xsids}} filter-service: mirakc-arib filter-packets --sid={{sid}} filter-program: mirakc-arib filter-packets --sid={{sid}} --eid={{eid}} epg-cache-dir: /var/lib/mirakc/epg EOT sudo mkdir -p /var/lib/mirakc/epg
mirakcの起動
あとは「mirakc -c /etc/mirakc/config.yml」で起動できる(/var/lib/mirakc/epgディレクトリに書き込みが出来るユーザで起動する)が、Mirakurun同様に自動起動させたいので、systemdでサービス化して、有効化と起動を行う。以後は sudo systemctl status mirakc で状態確認が行える。
cat << 'EOT' | sudo tee /etc/systemd/system/mirakc.service [Unit] Description = mirakc [Service] ExecStart = /usr/local/bin/mirakc -c /etc/mirakc/config.yml Restart = always Type = simple [Install] WantedBy = multi-user.target EOT sudo systemctl enable mirakc sudo systemctl start mirakc
mirakcとMirakurunの仕様の違い
mirakcはソケットファイルの/var/run/mirakurun.sockが使えないっぽいので、EPGStationで使う場合はconfig.jsonのMirakurunPathを http://localhost:40772 等に書き換えないと動作しない。
あと、Mirakurunは番組表などで使われる四角で囲まれた文字([再]や[字]など)を「[」と「]」で囲って表すが、mirakcはUnicodeの囲み文字として1文字で表すので、EPGStationでMySQL(MariaDB)を使っていると、これが格納できない文字として扱われ、エラーになってしまう。SQLiteならば問題ない模様。
mirakcの挙動
mirakcは起動すると各チャンネルを10秒間(BSは20秒間、CSは1800秒間(30分)だが、いずれもサービス一覧が得られた時点で終了する)録画してmirakc-aribコマンドのscan-servicesオプションでサービス一覧を取得、その後は各チャンネルを70秒間(BSは390秒間(6分30秒)CSは600秒間(10分)だが、いずれも番組表が得られた時点で終了する)録画してmirakc-aribコマンドのcollect-eitsオプションで番組表を取得する。
番組表の取得が全て終わると/var/lib/mirakc/epgディレクトリ(設定ファイルのepg-cache-dirで指定)にサービス一覧や番組表などをJSON形式で格納したファイルのschedules.jsonが作成される。
番組録画時は対象チャンネルを秒数無制限で録画してmirakc-aribコマンドのfilter-packetsオプションで--sid=2056のようにサービスIDを指定、--eid=2303のようにイベントIDを指定して対象番組の終了日時まで録画を行う模様。
その他
今回はmirakcのチューナー設定に「rivarun --b25 --mirakurun hogehoge.local:40772 --priority 0 --ch {{channel}} {{duration}} -」のように既に稼働しているMirakurunサーバをrivarunでチューナーとして使って動かしたりもしてみた。当然ながらチャンネル設定のチャンネル名は例えば13ならGR/13にする等の変更が必要になる。