【2023年10月】Ubuntu + Mirakurun + EDCB-Wine + KonomiTV (px4_drv + recisdb + ISDBScanner) でパパッと Linux 録画鯖構築の手引き

またまたお久しぶりです。録画関連の記事書いたのいつ以来だろう…。

訳あって、最近 Linux 環境の録画サーバー構築を手軽にできるような諸々の調整をいろいろ進めています。ただまとまった情報を書いていないこともあってかさほど使われていないようなので、ざっくりコマンドメモ程度にまとめておきます。

文章を懇切丁寧に書くのがだるかったのでビギナー向けになっているかは微妙ですが(さすがに Linux で録画鯖組もうなんて輩に PC 初心者レベルの人はいないやろ…)、大半のパッケージを Debian パッケージ化したりやチャンネルスキャンと設定ファイルの生成を完全自動化したことで、今まで一般的とされていた手順よりも大幅に簡略化されています。
インターネット上に数ある Linux での DTV 環境構築記事の中でも、今のところ一番無難で手軽でクリーンでミスらない手順になっているのではないでしょうか(私調べ)。

Mirakurun を除き今回導入するソフトはすべて私が何らかの形で開発に関与しているため、やむを得ず手前味噌や自画自賛と取れる内容が多分に含まれております。あらかじめご了承ください…🥺

Sponsored Link

前提条件

  • Ubuntu 20.04 LTS / Ubuntu 22.04 LTS
    • 今のところ Ubuntu 20.04 LTS でしか検証していないけど、パッケージ自体は後方互換がある (20.04 向けの Debian パッケージは 22.04 でも概ね動く) ので大丈夫のはず…?
    • Arch Linux とかいう録画サーバー用途では極めて不安定なドM向け OS と RedHat 系は知らんがな…
      • Debian は… glibc 的には Debian 11 以降なら Ubuntu 20.04 LTS と同じ glibc 2.31 だから行けんじゃねえのかな、知らんけど
      • GitHub Actions の GitHub-Hosted Runner にあるのが Ubuntu 20.04 LTS が下限なのもある (バージョン古い方の OS で Debian パッケージビルドすればバージョン新しい方でも大体使えるので)
    • 親切なので arm64 対応 (ラズパイ4はスペック足らんので Rockchip RK3588 のやつとか) も考慮して諸々パッケージとか作ってます
      • エーッ今 armv7 (32bit) の SBC 使ってる?さすがに Windows 11 ですら 64bit に完全統一された大 64bit 時代のご時世諸々サポート状況が厳しいので窓から投げ捨ててもろて…… (ラズパイ3以降の SoC は確か OS さえ 64bit にすれば 64bit になるので 32bit が動かないから動かないは甘え、OS を入れ直そう)
      • ただし今回使ってる EDCB-Wine は大元が x86_64 向けなので arm64 だと動かなさそう (arm64 対応意味なくね…?)
  • PLEX / e-better から発売されている Digibest 製チューナー or PX-S1UD / MyGica VT20 を持っている
    • 正確には PLEX / e-better チューナーのうち tsukumijima/px4_drv でサポートされている機種のみ
      • DTV02(A)-1T-U は SDR (Software Defined Radio) チューナーなので対応不可
    • PX-S1UD / MyGica VT20 は Siano Mobile Silicon 製チューナー IC を採用していて、このドライバは Linux カーネルに DVB 版ドライバとして組み込まれている
      • 以前の recisdb は V4L-DVB 版ドライバに対応していなかったが、v1.2.1 以降で対応したため問題ない
  • B-CAS + スマートカードリーダー or B-CAS エミュレーターを事前に準備している
    • スマートカードリーダーを使う場合は pcscd / pcsc-tools / libpcsclite1 あたりのインストールをお忘れなく (pcsc_scan で B-CAS やカードリーダーの認識状態を確認できる)
    • B-CAS エミュレーターは最近だと これ とか
    • ちなみに物理 B-CAS カードは有象無象の謎の中古が Amazon のマケプレ で売られてる(どんなものが送られて来るかは知らない、以前は大量のマケプレ業者が群がってたページがあったんだけどなんかいつの間にか消えてた…) 一応 2,000 円以上出して新品を「再発行」したりごみステーションに捨てられてるボロレコーダーから漁る手がなくもないが…
  • 録画用 HDD が /mnt/ 以下のパスにマウントされている
    • さすがにそれくらいはやってるよ…ね?
  • Mirakurun をローカルで動かすための Node.js 18.x がインストールされている
    • Docker 版 Mirakurun はデフォルトでドライバやスマートカードリーダーのアクセス周りが面倒 (特に DVB 系ドライバ以外の recpt1 や recisdb が入っていない) で有志の Dockerfile を漁るか自分で作るか setup.sh を書くかとかの羽目になる上トラブルシューティングも面倒になるので、個人的にはこだわりがなければあまりおすすめしません
      • そこそこ長い間 PM2 でローカルに動かしてますが特に問題ないです
    • 正直ローカルの Node.js を 16.x から上げられてないのでうーんって感じなんだけど、とりあえず この辺 (NodeSource) を参照してインストールするのが手軽で良さそう
    • NodeSource は手軽なインストーラーがいつの間にか非推奨になってて謎だけど、こだわりがなければ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - の方がいいかも知れぬ
  • Docker と Docker Compose V2 がインストールされている
    • EDCB-Wine を動かすために使います
      • なんでも Docker にするとかえって面倒じゃね?主義なんだけど、これに関しては性質上さすがに環境を Docker コンテナに閉じ込めないとつらい感じだったのでこうなってる
    • インストールは各自でやってください(Docker Compose V1 (docker-compose でハイフンで繋がるやつ) はもうサポート終わったので代わりに V2 にしてくれ)

px4_drv のインストール

チューナーを認識させるにはまずドライバから。

GitHub - tsukumijima/px4_drv: Unofficial Linux / Windows (WinUSB) driver for PLEX PX4/PX5/PX-MLT and e-better series ISDB-T/S receivers (not V4L-DVB)
Unofficial Linux / Windows (WinUSB) driver for PLEX PX4/PX5/PX-MLT and e-better series ISDB-T/S receivers (not V4L-DVB) ...

本家の px4_drv は大変残念ながら作者の nns779 大先生が2021年夏を最後に失踪なさっているので、代わりに私のフォーク版 px4_drv を使っていきます。
DKMS + Debian パッケージ対応なので、リリースページで公開している Debian パッケージをインストールしておくだけでカーネルが更新された際に自動的にドライバが再ビルドされ、「いつの間にかドライバが消えてた…」なんて事態を防ぎます。DKMS は偉大。

特に本家版 px4_drv は Linux 6.4 系・6.8 系での API 変更に対応できていないため、Linux 6.4 以降では DKMS での再ビルドに失敗してしまいます。

PX-S1UD / MyGica VT20 しか持ってない人はこの手順を飛ばしてしまっても構いません。なお、これらの機種 (Siano SMS2270 採用チューナー) のドライバは Linux カーネルに付属しています。

…ただし、Ubuntu にはデフォルトで Siano SMS2270 のファームウェアが同梱されていません (linux-firmware から何故か意図的に除外されている) 。
PX-S1UD の Windows 版ドライバから抽出する方法もありますが、私は Debian に存在する firmware-siano パッケージの .deb ファイル をダウンロード・インストールすることを推奨しています。

wget http://ftp.jp.debian.org/debian/pool/non-free-firmware/f/firmware-nonfree/firmware-siano_20230210-5_all.deb
sudo apt install -y ./firmware-siano_20230210-5_all.deb
rm ./firmware-siano_20230210-5_all.deb

px4_drv に必要なチューナーファームウェアは Debian パッケージの中に同梱済みなので、いちいち抽出する必要はありません。

詳しい情報は tsukumijima/px4_drv の Readme を読んでほしいのでここでは省略します。本家の Readme にさらに加筆し、丁寧めに書いてあるつもりです。
なお、tsukumijima/px4_drv では PX-M1UR/PX-S1UR への追加対応も行われています。

# Debian パッケージをインストール (DKMS のソースパッケージなので amd64 と arm64 共通)
wget https://github.com/tsukumijima/px4_drv/releases/download/v0.4.5/px4-drv-dkms_0.4.5_all.deb
sudo apt install -y ./px4-drv-dkms_0.4.5_all.deb
rm ./px4-drv-dkms_0.4.5_all.deb

# ドライバをロード
# インストールしただけでは自動ロードされないので明示的にロードする必要がある
sudo modprobe px4_drv

# px4_drv がロードされているかを確認 (ちゃんとログ出てきたら OK)
lsmod | grep -e ^px4_drv
dmesg | grep px4
ls -la /dev | grep -e px -e isdb

記事が更新されてないだけで新しいバージョンがリリースされている場合は、適宜新しいバージョンの方を wget してください(バージョンを固定してる意図は今のところないです)。

ここまで来れば多分接続しといたチューナーが認識されていることでしょう(たぶん)。
なんか認識されてなさげな場合は USB とかの接触を確認したり抜き差しするなどしてください。

recisdb のインストール

通常 Linux 録画界隈では recpt1 とか recdvb とか dvbv5-zap とか、あと B25 デコードでは arib-b25-stream-test (2016年から放置されている本家 / tsukumijima/libaribb25 ベースの大幅改良版) などのコマンドラインツールが多用されていますが、いずれもメンテされてなかったりお世辞にもコードがアレだったりとレガシーで散逸しており、取り回しが悪いな〜と思っていました。

GitHub - kazuki0824/recisdb-rs: recisdb-rs and b25-sys are more convenient Rust wrapper for libaribb25. recisdb can read both Unix character device-based and BonDriver-based TV sources.
recisdb-rs and b25-sys are more convenient Rust wrapper for libaribb25. recisdb can read both Unix character device-base...

そんなところに現れたのが Rust で書かれた recisdb で、tsukumijima/libaribb25 のデコード機能を統合し、いろいろモダンによしなにチューナーコマンドをやってくれます。
さらに px4_drv をはじめとした chardev 版ドライバと、Linux カーネル内蔵の smsusb (PX-S1UD / MyGica VT20 用) のような V4L-DVB 版ドライバ (DVB デバイス) の両方に対応している点も特徴です。オールインワンなので取り回しが良い!!

tune と checksignal と decode がまとまっていたり、arib-b25-stream-test と異なりデコードに失敗した場合もフォールバックとして未デコードのストリームを流してくれる、ログが丁寧などいろいろメリットがあります(私もレガシーで壊れそうな C 言語コードの山にウーンと思っていたところだったので、少しだけ開発に参加しています)。

recisdb を入れる場合は recisdb 自体が B25 デコードもやってくれるので、arib-b25-stream-test や recpt1 は不要になります。
まあ recpt1 自体に不具合があるわけじゃないので recpt1 でも良いんだけど、やっぱりモダンで整って整理されているのが良いじゃん? (recpt1 –b25 が非推奨?とされていたのはよくわからんけど recisdb tune で既定で自動 B25 デコードされるやつは全然問題なさげに動いてるかんじ)

現状の recisdb には「物理カードリーダー (not SoftCas) + CS 放送」の組み合わせでチューナーに問題がなくてもドロップする問題があります。処理速度が圧倒的に速い SoftCas でなら全くドロップしないあたり何らかのタイミングが影響しているはずですが、今のところ原因を掴めていないようです。
・・・とはいえ、CS を全く見ない(契約してない)方が大半だと思いますので、あまり気にしなくてもいいと思います。私はそもそも ISDBScanner (後述) で BS の有料放送と CS はチャンネルリストから除外した状態で運用しています(その方が EPG 取得も速いです)。

# x86_64 環境
wget https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.2/recisdb_1.2.2-1_amd64.deb
sudo apt install ./recisdb_1.2.2-1_amd64.deb
rm ./recisdb_1.2.2-1_amd64.deb

# arm64 環境
wget https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.2/recisdb_1.2.2-1_arm64.deb
sudo apt install ./recisdb_1.2.2-1_arm64.deb
rm ./recisdb_1.2.2-1_arm64.deb

recisdb のリリースページに Debian パッケージがあるのでこれを使ってインストールするだけ。
わざわざインストールするときに Cargo とか Rust の開発環境インストールしたくないっしょ?それはそう。

(2回目) 記事が更新されてないだけで新しいバージョンがリリースされている場合は、適宜新しいバージョンの方を wget してください(バージョンを固定してる意図は今のところないです)。

recisdb help でこうなっていれば OK 。

ISDBScanner のインストールと実行

GitHub - tsukumijima/ISDBScanner: 受信可能な日本のテレビチャンネル (ISDB-T/ISDB-S) を全自動でスキャンし、スキャン結果を様々な形式で出力するツール
受信可能な日本のテレビチャンネル (ISDB-T/ISDB-S) を全自動でスキャンし、スキャン結果を様々な形式で出力するツール - tsukumijima/ISDBScanner

さてここで登場するのが、最近私が開発した ISDBScanner。
px4_drv で対応しているチューナーデバイスを自動で認識し、完全自動でチャンネルスキャンを行って EDCB-Wine / Mirakurun / mirakc 向けのチャンネル設定ファイル / チューナー設定ファイルを全自動で生成できる便利ツールです(自画自賛)。

インストール方法とか仕様の詳細とかはガッツリ Readme に書いてあるのでちゃんと読んでほしいんですけど、一応下にも書いておきます。

# x86_64 環境
sudo wget https://github.com/tsukumijima/ISDBScanner/releases/download/v1.1.6/isdb-scanner -O /usr/local/bin/isdb-scanner
sudo chmod +x /usr/local/bin/isdb-scanner

# arm64 環境
sudo wget https://github.com/tsukumijima/ISDBScanner/releases/download/v1.1.6/isdb-scanner-arm -O /usr/local/bin/isdb-scanner
sudo chmod +x /usr/local/bin/isdb-scanner

PyInstaller でシングルバイナリに固めてあるので、wget して /usr/local/bin なり適当に配置するだけです(別に単発でしか使わないならカレントディレクトリにおいてスキャン後に削除してもいい)。

(3回目) 記事が更新されてないだけで新しいバージョンがリリースされている場合は、適宜新しいバージョンの方を wget してください(バージョンを固定してる意図は今のところないです)。

isdb-scanner --help で使い方が表示されます。

isdb-scanner --list-tuners と実行すると、PC に接続されている、利用可能なチューナーのリストが表示されます。横に (Busy) と出てるのは使用中のチューナーです。
PC に接続したはずのチューナーが認識されていない場合は、チューナードライバのインストール・ロード状態や、チューナーとの物理的な接続状況を確認してみてください。

# BS の有料放送と CS チャンネルをスキャン結果に含めてスキャンする
isdb-scanner ./scanned/

# BS の有料放送と CS チャンネルをスキャン結果から除外してスキャンする
# 有料放送を契約していないほとんどの人におすすめ、有料放送が排除されることで諸々のチャンネルリストとか EPG 取得とかが軽くなってメリットが多い
isdb-scanner --exclude-pay-tv ./scanned/

こんな感じでスキャンを実行します。スキャンにはたぶん5分くらいかかるので、その間放置してください。

スキャンの進捗はめっちゃグラフィカルに表示されます(謎に凝ってしまった、個人的に気に入ってる)。

スキャンに利用されるチューナーは自動検出され、ログ出力された一番上のチューナーが自動で使われます。チューナー受信には recisdb が利用されます。
そのチューナーがなんか他のプロセスで使われてるとか死んでるとかで使えなかった場合は、代わりに他のチューナーが使われます(性質上、すでに Mirakurun / mirakc を導入している場合は競合を避けるために止めてから実行した方が無難です)。

スキャンが完了すると、上記の例のとおり実行した場合は ./scanned/ 以下にこんな感じでファイルが出力されます。
生成されたこれらの設定ファイルはあとで使います。

Mirakurun のインストール

GitHub - Chinachu/Mirakurun: A Modern DVR Tuner Server for Japanese TV.
A Modern DVR Tuner Server for Japanese TV. Contribute to Chinachu/Mirakurun development by creating an account on GitHub...

言わずと知れたチューナー共有サーバーです。
パフォーマンス追求とか諸々の思想とかがあれば別に mirakc でもいいとは思うんですが、GUI ついててチューナー利用状況が把握しやすいので、なんだかんだでこだわりがなければこちらがいいような気はします。
私もなんだかんだで長いことお世話になっています(DTV 界隈はさまざまな過去の偉人のボランティア OSS 活動の積み重ねで今があるわけですから、例外なくプロダクトの存在に感謝せねばなりません)。

前述のとおり個人的には Docker で Mirakurun をインストールするのは DTV 関連技術に長けている人間でもない限り結構面倒だと思うので、PM2 でインストールする方向で行きます(そもそも Docker is 何って人もいるでしょうからね、私も数年前まではそうでした)。

Mirakurun/doc/Platforms.md at master · Chinachu/Mirakurun
A Modern DVR Tuner Server for Japanese TV. Contribute to Chinachu/Mirakurun development by creating an account on GitHub...

ちゃんとこちらの公式ドキュメントに手順が載ってるので基本そこを見てほしいんですが、一応ここにもコマンドを載せておきます(この辺実際に実行検証したわけじゃないのでもしかすると間違えてるかも)。

# Mirakurun 関連は PM2 もそうだが root 権限で実行するのが大変重要、ユーザー権限だと諸々の問題が発生する
# たぶんこれ一発で行けるはず
sudo npm install -g pm2
sudo npm install -g --unsafe-perm --foreground-scripts --production mirakurun

# バージョン確認
# Mirakurun は確かセキュリティ上の理由 (?????) でホスト名でのアクセスを許可していないので、
# API には常に IP 指定でアクセスする必要がある
curl http://127.0.0.1:40772/api/version

たぶんこれでインストール自体はできるはずです。設定何もやってないのでもぬけの殻ですが。

PM2 は Node.js 製のサービスプロセスマネージャーです。Python で言う Supervisord とかそういう系の、Systemd サービスで動かすには面倒だけど…みたいなのをやってくれる優れもの。

# すでに Mirakurun サーバーは起動状態なので、一旦停止させておく
sudo mirakurun stop

# スキャンで生成された設定ファイルを Mirakurun の設定フォルダが配置されている
# /usr/local/etc/mirakurun 以下にコピー
sudo cp -a scanned/Mirakurun/channels.yml /usr/local/etc/mirakurun/channels.yml
sudo cp -a scanned/Mirakurun/tuners.yml /usr/local/etc/mirakurun/tuners.yml
sudo chown -R root /usr/local/etc/mirakurun/

# お好みで server.yml を編集
# GUI から変更することもできる
sudo nano /usr/local/etc/mirakurun/server.yml

# Mirakurun サーバーを再起動
sudo mirakurun start

さて、ここで以前 ISDBScanner でのスキャンで生成された設定ファイルをコピーします。
なお server.yml に関しては ISDBScanner では生成されないので、お好みで調整してください。

一応 Mirakurun にもチャンネルスキャン API はあるんですが、recpt1 のチャンネル指定フォーマットにしか対応してない、遅いなどいくつか問題があるので ISDBScanner がおすすめです (ダイマ)。
なお、mirakc にはチャンネルスキャン API 自体がありません。

ちなみに mirakurun コマンドはシェルスクリプトで、startstop のコマンドは sudo pm2 start mirakurun-server の薄いラッパーになっています。

スキャン結果を反映したところで http://(Ubuntu サーバーの IP):40772/ にアクセスすると、リアルタイムでチューナーの利用状況や認識されているチャンネルが確認できるコントロールパネルが開くはずです!ちゃんとチューナーが認識できてればですが…。

EDCB-Wine のインストールと設定

GitHub - tsukumijima/EDCB-Wine: EDCB を Wine を使って Linux 上で動作させるための Docker Compose 構成
EDCB を Wine を使って Linux 上で動作させるための Docker Compose 構成 - tsukumijima/EDCB-Wine

通常 Mirakurun を入れたら EPGStation を入れるのがセオリーですが、今回は EDCB-Wine という『本来 Windows 向けの予約録画ソフトである EDCB を、Wine を使って Linux 上で動作させるための Docker Compose 構成一式』を使います(私の自作)。

EPGStation にあるようなライブ視聴機能・録画視聴機能こそない (正確には EDCB Material WebUI にはあるが、Lua の互換性の問題か何かで動かない…) ものの、予約録画管理は EDCB Material WebUI から EPGStation 以上の使い勝手でバッチリ使えます!
EDCB-Wine の環境設定 (EpgDataCap_Bon や EpgTimerSrv の設定) も、noVNC 経由でブラウザから行えます(リモート操作周りは全て設定済みなので、改めて調整する必要はありません)。

4ヶ月以上サルベージ&バックアップ用深夜アニメ (地上波/BS) 全録サーバーとして運用していますが、Wine が原因での録画失敗は一度も起きておらず、十分安定していると言えるのではないでしょうか。むしろチューナードライバを誤って落としてたり Mirakurun のチャンネル設定ミスったりなど私のヒューマンエラーによる録画失敗の方が多かった…。

ライブ視聴に関しては、今後の手順で導入する KonomiTV を導入することで、EDCB Material WebUI に搭載されているものよりもはるかにリッチな視聴体験を楽しめます(自画自賛)。
…エッ録画視聴機能ないの? 開発遅れてすみません今頑張って実装してます!!!!!!!!!!もうちょっとだけ待っておくれーー!!!!!!

EDCB-Wine の開発動機自体、今後 KonomiTV で予約録画フロントエンド機能を追加する際の予約録画バックエンドとして使えるようにするためだったりします (後述の通り EPGStation はメンテナンスモードな上 EDCB とは諸々のデータ構造が大きく異なるため、両対応は現実的でない) 。

EDCB は主に EpgDataCap_Bon.exe (チューナー制御ソフト) / EpgTimer.exe (予約録画フロントエンド) / EpgTimerSrv.exe (予約録画バックエンド) の3つの実行ファイルから構成される、クライアント/サーバアーキテクチャを採用したソフトウェアです。
このため、サーバー側は EpgDataCap_Bon.exe と EpgTimerSrv.exe (と依存 DLL) さえ動かせれば、EDCB の予約録画サーバーとして動作します。

EpgTimer.exe 自体も EpgTimerNW.exe にリネームすることでネットワーク経由で EpgTimerSrv の TCP API サーバーにリモート接続できるため、Web UI だけでなく EDCB-Wine で稼働中の EpgTimerSrv に Windows PC に配置した EpgTimerNW からリモート接続して、使い慣れた EpgTimer のネイティブ UI から細かく予約録画操作を行うことも可能です。

EPGStation は現在メンテナンスモード で、今後の機能追加や改善は見込めない状況 です。
特に EPGStation は経験上、予約番組が野球中継で延長した際などの追従や、番組延長で後ろ倒しになった番組の録画、イベントリレーなどのイレギュラーな番組編成が行われた際に、かなり高い確率で録画に失敗してしまいます(甲子園とスーパースターの件が記憶に新しい)。
さらに録画マージン設定自体も Mirakurun の設定に依存しているため、設定次第では先頭や末尾が欠けることもあります。

一方 EDCB は元々 Windows 向けに書かれたレガシーな C++ 製ソフトウェアですが、15年以上 (?) の歴史と実績に裏打ちされた確かな録画安定性と、細かく条件を指定して録画予約を設定できる驚異的な多機能性を誇ります。
キーワード指定を間違えたりや放送局側の EPG 送出で放送事故が起きない限り、まず録画失敗(一部が欠ける、全く録画できない)が発生しません。

私が EDCB-Wine を開発したのも、市販のレコーダーとは比べ物にならないほど高い録画安定性を誇る EDCB を、Windows Update での自動再起動などのアクシデントのリスクが少なく安定した Linux 環境で動かしたかったからに他なりません。
個人的には EPGStation と違い、30分番組で数百 MB ほど容量を食う上まず見ることのないデータ放送を録画時に除外できる機能に助けられています(4TB HDD で2ヶ月分ほどサルベージ & バックアップ用にアニメを全録しているため)。

ここまで arm64 対応な記事来たのに本当に申し訳ないんですが、EDCB-Wine はデフォルトでは arm64 アーキテクチャに対応していません。
まず Wine 自体が Windows の x86 / x64 アーキテクチャのバイナリの互換レイヤーなので、現状 arm64 環境での実行には対応していないようです(詳しく調べてない)。なお、EDCB-Wine のリポジトリに同梱している EDCB の Windows バイナリは x64 向けのものです。
…とはいえ Docker 環境に全て閉じ込めているので、M1 Mac で x64 イメージの MySQL を動かすのと同じような方法で、QEMU などを併用して動作させられるかもしれません(安定性はちょっとわからないですが…)。動作報告お待ちしてます。

GitHub - tsukumijima/EDCB-Wine: EDCB を Wine を使って Linux 上で動作させるための Docker Compose 構成
EDCB を Wine を使って Linux 上で動作させるための Docker Compose 構成 - tsukumijima/EDCB-Wine

さて手順を…となるところですが、EDCB-Wine に関しては導入方法がちょっと特殊かつ分量が長めなので、懇切丁寧に説明されている Readme に説明を譲ります。Readme を読んでください。
Readme の手順にしたがってセットアップすれば、比較的簡単に導入できるはずです…!
ドキュメントの執筆だけで確か1週間くらいかかってた気がします。

…ただし ISDBScanner で生成した EDCB-Wine 向けの設定ファイルを使うため、EpgDataCap_Bon でのチャンネルスキャンとその後の手動編集の手順だけは飛ばしてください…!!!

# scanned/ フォルダ以下の EDCB-Wine 向けチャンネル設定ファイルをコピー
# EDCB-Wine は /opt/EDCB-Wine 以下にインストールされているものとする
# 環境次第ではコピー先のパーミッションや所有者/グループ設定に気をつけること
cp -a scanned/EDCB-Wine/* /opt/EDCB-Wine/EDCB/Setting/

今回は ISDBScanner の出力結果をそのまま使うので、時間がかかるチャンネルスキャンと手動編集の行程はスキップできます。ちゃんと BonDriver_mirakc_T の方は地上波のみ、BonDriver_mirakc_S の方は BS/CS のみ記述されているのでご安心を。

ISDBScanner の出力結果を利用することでチャンネルスキャンの手間を省けるだけでなく、BonDriver_mirakc_T/S でそれぞれ地上波/衛星チャンネルごとに分ける手動編集の工程が不要になります。

生成されたチャンネル設定ファイルをコピーできたら、4.2. EpgTimerSrv の起動と設定 に進んでください。念のため EpgDataCap_Bon で受信できるか確認しておくと良いでしょう。

なお、ISDBScanner のスキャン結果は通常の EpgDataCap_Bon でのチャンネルスキャンと異なり .ChSet4/5.txt 内のチャンネル名がすべて半角になっていますが、これは現状の仕様です。
ISDBScanner が利用している ariblib が ARIB 特有の文字エンコード方式である8単位符号の適切な半角/全角の判定に対応しておらず技術的に自前での実装が厳しそうだった上、EDCB のメンテナである xtne6f 氏から『ChSet4/5.txt に記載されているチャンネル名が EPG のチャンネル名と一致している必要はなく、動作には支障しない』との見解を頂きました。
こうした実装上の問題 + もともと半角の方が見栄えが良いということで、チャンネル名は元の表記に関わらずすべて半角に揃える実装となっています。

KonomiTV のインストール

GitHub - tsukumijima/KonomiTV: KonomiTV: Kept Organized, Notably Optimized, Modern Interface TV media server
KonomiTV: Kept Organized, Notably Optimized, Modern Interface TV media server - tsukumijima/KonomiTV

EDCB-Wine のセットアップができたところで、いよいよ KonomiTV をインストールしていきます。

地味にこのブログで KonomiTV の存在に触れるのはじめてな気がする…。作者なのに今まで記事を書くのをサボっていた(実装されている機能が少なくて紹介するのも…だったのもある)。

…なんですが KonomiTV も Readme のドキュメントに懇切丁寧に導入方法から事前準備まで書いてあるので、以降の導入方法は Readme に丸投げします。Readme 側と更新同期させるの面倒だし…
Readme に記載の通りインストーラーを実行すれば、かなり簡単に導入できるはずです!

インストーラーをダウンロードする際、バージョンごとの リリースノート も一読しておくことを強く推奨します。特定バージョンのみに適用される重要事項が記載されています。

下記に今回構築した環境で KonomiTV をセットアップする際の備考を、箇条書きでメモしておきます。

  • PM2 (ローカル) でも Docker でもインストールできます。
    基本どちらでも動くように作ってあるつもりなのでお好みで。ただし、Docker 環境での検証は今のところあまり行っていません。
    • Docker の方が環境依存は少なくなりますが、KonomiTV 自体外部依存関係をすべて「サードパーティーライブラリ」としてすべて自前で保持する設計になっているため、Ubuntu / Debian 系であればローカルインストールでも問題なく動作するはずです。
  • バックエンドは Mirakurun と EDCB から選べます。
    ただし2023年10月時点の KonomiTV にはライブ視聴機能しか実装されていないため、EPG や放送波ストリームを Mirakurun から取得するか、Mirakurun をチューナーとして使う EDCB-Wine から取得するかの違いでしかありません。
    • 単純にチューナー起動時間のパフォーマンスを求めたいのであれば余計なオーバーヘッドがない Mirakurun バックエンドをおすすめします。
    • EDCB-Wine から Mirakurun にアクセスする際のチューナー優先度は BonDriver_mirakc の ini 設定で 100 に設定されています。
      もし Mirakurun バックエンド利用中に EDCB-Wine から録画が開始され、かつ視聴中のチューナーを潰さないと録画できない状況の場合、チューナー優先度に基づき EDCB-Wine (BonDriver_mirakc) の方が優先されるはずです。
    • EDCB バックエンド利用時は起動中の EpgDataCap_Bon 自体が EDCB-Wine (EpgTimerSrv) によって管理されます。もし視聴中チューナーを立ち下げないと当該番組を録画できない状況の場合は、EpgTimerSrv によって視聴中の EpgDataCap_Bon のチューナープロセスが終了されるはずです。
    • …つまりどちらのバックエンドを利用しても、いざチューナーが足りなくなった際は KonomiTV 側のライブストリーミングが止まり、録画タスクが最優先されるはずです。もっとも多チューナー環境につき実検証はあまりできていませんが…。
  • ローカルインストールを行った場合、ハードウェアエンコーダーを利用するには別途 apt パッケージのインストールが必要になります。
    • Docker インストールでは QSV や AMD VCE などの基本ドライバなどが Docker イメージに含まれていますが、NVENC を使う場合は docker-compose.yaml の変更が必要になります(インストーラーから導入した場合は環境に合わせて自動編集される)。

あとがき

ろくに検証もしてないコマンド集でしたが、みなさんのお役に立てたようでしたら幸いです。

記事に記載のコマンドが間違ってる・動かなかったなどあればお気軽にコメントをお寄せください。
記事の誤りでしたらすぐに修正しますし、コメント内容からそちらのエラー原因をエスパーできそうであれば確認しだい返信させていただきます(すべてのコメントへの返信をお約束するものではありません)。

コメント

  1. 件名:自己解決しました

    前のコメントで「dockerのビルドができない」とお伝えしましたが、こちらのDNSの設定の問題でした。
    nameserverを8.8.8.8に設定したところ、うまくビルドできました。

    お騒がせしましたm(_ _)m

  2. EDCB-Wine のインストールと設定まで完了し、EPGの取得を行いましたが、mirakurunで番組表が表示されません
    mirakurunのログで正常に保存しているように見え、実際にデータが入っていることも確認できたのですが…

    > save db `/usr/local/var/db/mirakurun/programs.json` w/ integirty xxxxxx

    なにかお心あたりや調査ポイントはありますでしょうか

  3. 解決しました…

    https://github.com/tsukumijima/EDCB-Wine/blob/master/Readme.md#5-edcb-material-webui-%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9

    > すぐに EPG 取得を行いたい場合は、番組表ページ右上のメニューから「EPG 取得」をクリックしてください

    とありますがこちらではうまく行かず、EDBC_WineでEpgDataCap_Bonを起動してEPG取得を実行したらOKでした。

  4. 素晴らしいページをありがとうございます。

    PT3のころから録画を行っておりましたが、仮想マシンに録画鯖を構築しようと思いあたり参考にさせていただきました。
    (ほぼページ記載の通りなので参考というより丸コピに近いですが)
    Proxmox上のUbuntu24.04にほぼこのページの通り進めました。
    チューナはPX-MLT8を使用しました。
    EDCB-Wineを試しましたが、録画後に自動で別PCのAmatsukazeでエンコを行いたかった為、EDCB-Wine-Amatsukazeを導入しました。
    サイトと違うところはここだけです。※空白文字の問題はshを書き換えました。
    現在思った通りの動作ができています。

  5. 開発のほか様々な情報提供、ありがとうございます。
    さてISDBScannerですが、PX-BCUDに対応可能ですかね?
    以下エラー吐かれます。

    abcdef@debian:~$ isdb-scanner –list-tuners
    -中略-
    AssertionError: Not USB or PCI(e) device: /dev/dvb/adapter1/frontend0
    [1774] Failed to execute script ‘__main__’ due to unhandled exception!

    recisdb checksignalではレベル見えるので、あともうちょいなんです。

    abcdef@debian:~$ recisdb checksignal –device /dev/dvb/adapter0/frontend0 –channel T27
    [2024/05/24 17:00:10] INFO: recisdb version 1.2.1
    [2024/05/24 17:00:10] INFO: Tuner: /dev/dvb/adapter0/frontend0
    [2024/05/24 17:00:10] INFO: Channel: T27 / Terrestrial: 27
    [2024/05/24 17:00:11] INFO: Checking for the frontend lock…
    [2024/05/24 17:00:12] INFO: Checking for the frontend lock…
    41.25dB

    abcdef@debian:~$ recisdb checksignal –device /dev/dvb/adapter1/frontend0 –channel BS03
    [2024/05/24 17:02:26] INFO: recisdb version 1.2.1
    [2024/05/24 17:02:26] INFO: Tuner: /dev/dvb/adapter1/frontend0
    [2024/05/24 17:02:26] INFO: Channel: BS03 / BS: 3, AsIs
    ERROR Need a LNBf to work
    ERROR frequency 1087.84MHz (tune freq 1087.84MHz) is out of LNBf Japan 110BS/CS LNBf range
    [2024/05/24 17:02:28] INFO: Checking for the frontend lock…
    24.52dB

    • 情報ありがとうございます。
      PX-BCUD は実機を持っておらず(そもそも現在入手困難)、UID の VendorID / ProductID が分からないため動作するか不明な状態でした。

      エラー発生箇所はおそらく上記箇所 (https://github.com/tsukumijima/ISDBScanner/blob/master/isdb_scanner/tuner.py#L623-L645) で、sysfs 内の /sys/class/dvb/dvb{Adapter 番号}.frontend0/device/ ディレクトリ内に idVendor と idProduct が存在しないために「USB 接続型 DVB チューナー」と判定できずにエラーになっているものと思われます。
      通常 USB 型 DVB チューナーであれば必ず上記パスに USB VendorID と ProductID が記載された特殊ファイルが生成されるのですが、sysfs 内がどのようなディレクトリ/ファイル構成になっているかご教授いただけないでしょうか。
      recisdb でチューナー自体は(エラーが出ているのが気になりはしますが…)動作するとのことなので、当該箇所を修正できれば ISDBScanner も動作させられるはずです。

      • 横からですが下記参考になれば。
        ID 3275:0085 VidzMedia Pte Ltd PX-BCUD
        sysfsの構成
        authorized bInterfaceProtocol dvb modalias uevent
        bAlternateSetting bInterfaceSubClass ep_84 power
        bInterfaceClass bNumEndpoints i2c-1 subsystem
        bInterfaceNumber driver i2c-2 supports_autosuspend

  6. つくみ島様初めまして。
    SonyのNasne保守が終了してこの界隈に飛び込んだものです。
    マザボはN100DC-ITX
    Ram:32GB
    OS:Ubuntu22.04
    チューナーはPX-W3PE5
    チューナードライバはつくみ島様のtsukumijima/px4_drvを使用しております。

    このページにある方法だと視聴・EPG取得ができました。
    ありがとうございます。

    また、現行主流のMirakurun+EPGStationでも試そうと思い、
    MirakurunのDocker構築時に以下のように差し込んでみましたが構築できず、
    wget https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.2-rc.2/recisdb_1.2.1-1_amd64.deb && \
    apt-get install -y ./recisdb_1.2.1-1_amd64.deb && \

    Mirakurun構築後にdocker exec -it mirakurun bash で中に入り、
    上記コマンドを試したところ以下のようなエラーが出ました。

    root@0604495373dc:/app# apt install ./recisdb_1.2.1-1_amd64.deb
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Note, selecting ‘recisdb’ instead of ‘./recisdb_1.2.1-1_amd64.deb’
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    recisdb : Depends: libc6 (>= 2.29) but 2.28-10+deb10u4 is to be installed
    E: Unable to correct problems, you have held broken packages.

    Mirakurun内のDokcerlibc6 のVerが高いのでインストール不可ということであってますでしょうか・・?
    あまりDokcerやこの手の物を触ったことがないので、頓珍漢な質問をしていたら申し訳ありません。

    また、MirakurunでPX-W3PE5を動かす場合、recpt1 or recisdb-rs(ページ上部の奴)がMirakurun側に必要という認識であっていますでしょうか。
    (docker-mirakurun-epgstationの場合、DVBドライバ向けのdvbv5-zapを録画コマンドに使っていので、PX-W3PE5では使用できないとわかりました・・・)

    recpt1 の場合、いくつかサンプルがあり、recpt1 をdockerfileにスクリプトを埋め込むことでMirakurun側でチューナーの認識ができますので・・・
    (あれがいまいち良く分からないんです・・・
    必要なライブラリインストール→recpt1 ビルド→インストール→不要パッケージ消すっていう流れなのはわかるのですが・・・)

    ご教授していただけないでしょうか。
    よろしくお願いします。

    • > Mirakurun内のDokcerlibc6 のVerが高いのでインストール不可ということであってますでしょうか・・?
      > あまりDokcerやこの手の物を触ったことがないので、頓珍漢な質問をしていたら申し訳ありません。

      むしろ逆で、Mirakurun の Docker イメージで使われているベースイメージが、数年前にセキュリティ更新が停止された Debian 10 Buster から更新されていないからです。
      recisdb の Debian パッケージは Ubuntu 20.04 LTS でビルドされていますが、Debian 10 Buster は 2019 年にリリースされているため、libc のバージョンもより古いです。
      古いバージョンの libc でビルドしたバイナリは概ね新しい libc でも動作しますが、その逆は不可能です。そのため、recisdb の Debian パッケージをインストールするにはベースイメージを Debian 11 Bullseye 以降に変更する必要があります。

      > また、MirakurunでPX-W3PE5を動かす場合、recpt1 or recisdb-rs(ページ上部の奴)がMirakurun側に必要という認識であっていますでしょうか。
      > (docker-mirakurun-epgstationの場合、DVBドライバ向けのdvbv5-zapを録画コマンドに使っていので、PX-W3PE5では使用できないとわかりました・・・)
      Mirakurun の Docker イメージには dvbv5-zap 以外同梱されていないため、Docker イメージ側に別途録画コマンドをインストールする必要があります。
      また Docker イメージを動かす際には、Docker コンテナに /dev/px4video0 のような chardev デバイスファイルをマウントする必要があります。しかし、明示的なマウントはもしチューナーデバイスとの物理的な接続が一時的に切れた時、果たして再接続後にちゃんとデバイスファイルがコンテナに入ってくるのか?という疑念が残ります。

      私は Mirakurun を Docker で構築することをあまり推奨していません。
      昨今はメンテナンスされておらず、チューナーコマンドの導入が面倒くさい上、ホストの pcscd を止める必要があったりチューナー毎にマウントする必要があるなど面倒な点が多いです。
      第一チューナーというハードウェアに直接アクセスする重要なコンポーネントですから、抽象化レイヤーを挟むと面倒ごとが増えると考えています。
      Node.js のバージョン問題こそあるかもしれませんが、ローカルに Node.js をインストールし PM2 で Mirakurun を動かした方が遥かに楽だと思います。私はそれで安定運用しています。
      まあ Docker でも安定運用できるとは思いますが、より考えることが多くなります。考えることを減らして物事をシンプルにしたいなら、私の記事通りに Mirakurun を Docker なしでインストールすべきです。
      なお EPGStation はエンコードを除きハードウェアにあまり依存しないため、Docker 上で動かしても良いとは思います。

      • 返信ありがとうございます。
        現在、録画鯖を構築中でLinux/Winでのどちらでも構築を試そうとやっていた最中のお話でした。
        docker-mirakurun-epgstationの内部OSバージョンが古すぎるということを教えていただき、ありがとうございます。
        (NextCloudの構築もローカルしかやったことがなかったので、その可能性に至りませんでした。)

        一応、PM2を使用する方法があるのは知っていましたが、
        構築が楽・・・と各方面で書いてあったので、Linux版でDockerを採用していました。
        そのため、この辺で初めてDockerを触る運びとなり上記のような質問が出てきました。
        レイヤを挟む回数が多くなるとトラブルシューティングがやりづらくなるのはおっしゃる通りですし、
        物理デバイスの瞬断→再接続後に関しては考慮していませんでした。

        最終的にはRaidカードがUbuntuに非対応でしたので、
        (rpmをalienで変換してもパッケージがうまく動かなかった)
        現在、Win版での構築中が終了し、ケーブルの到着待ちです。
        (SFF-8643 to SFF-8087:primeデーで買ったのにまだ来ない・・・・( ;∀;))
        なお、起動はNvmeで録画HDDは1TB HDD(ニアラインSATA)8発のRaid60予定です。

        ご教授いただき、ありがとうございました。

  7. はじめまして
    最近出たASUSのN100マザーボードでpx4_drv(Q3PE5)+Mirakurun+recisdb+EPGStationで
    録画環境を組んでみました。
    とりあえずは動作していますがある操作をするとドロップが発生するので既知の問題か確認したく思います。
    ある操作とは
    1.Mirakurun+recisdbをTVTestで視聴する(EPGStationは止めておく)
    2.ブラウザでMirakurunのステータスページを開く
    3.約5秒後に必ず15~20程度ドロップする(ブロックノイズが出ます)

    この現象はリロードするとやはり5秒後にドロップします。開いているストリーム1つでも複数でも
    発生タイミングは同じです。
    ちなみにrecpt1に変更するとドロップはしませんが同じタイミングで音声が少し途切れます。

    Mirakurunのhttp処理に問題があるのかストリームが止まってしまうようです。
    このときrecisdbはバッファを捨ててしまう仕様なのでしょうか?(それとも根本的に足りない?)

    • 私は聞いたことないですね… recpt1 でも音声が途切れるということは(映像ストリームに影響がないだけで)ドロップしているんだと思います。
      recisdb の既知の問題として CS 放送 + 物理カードリーダー使用時のみドロップが多発する問題があるので、それに該当していなければよくわからないです。tspacketchk で厳密に確認することをお勧めします。

      • 回答有り難うございます。
        >私は聞いたことないですね… recpt1 でも音声が途切れるということは(映像ストリームに影響がないだけで)ドロップしているんだと思います。

        そちらではそういう状態になったことはないということでしょうか?(いわゆるおま環?)
        視聴チャンネルに関連性はないです。

        >tspacketchk で厳密に確認することをお勧めします。

        試してみます。

      • recisdb 1.2.2最新版はバッファ周りを調整しているようですが安定化には寄与していないようです。
        やはりrecpt1と比較してドロップが多いので採用を見送りました。

        EDCB-Wineもインストールしてみましたが以下の問題がありました。
        /mnt/以下に外部のsambaをマウントするとEDCB-WineのDocker内部から参照すると
        “シンボリックリンクの階層が多すぎます”というエラーになってアクセスできませんでした。
        そこでdocker-compose.yamlの
        – type: bind
        source: ‘/mnt/’
        target: ‘/mnt/’

        – type: bind
        source: ‘/mnt/share/’
        target: ‘/mnt/share/’
        とマウントポイントも含めるようにすると問題が解決しました。

        安定性についても問題があり/EMWUI/epg.htmlで番組表が表示はされるのですが
        CSのページに切り替えるとEpgTimerが落ちることがありました。(coreを吐く)
        再起動を繰り返しているうちに症状が出なくなりました。
        (EPGデータが不完全だと落ちる?)

        • recisdb 1.2.2 + CS + 物理カードリーダーでドロップする問題は把握しており作者の方とも内々に連絡を取り合っているのですが、どうもかなり根深い問題のようで、バッファ調整だけではどうやっても回避できていない状況です。
          私は BS を使っていないので特に支障はないのですが、CS が必要な方は当面 recpt1 を使い続ける他なさそうです。

          番組表を CS にすると EpgTimer が落ちる?件も知りませんでした…。
          手元環境では EPG 取得軽量化のため、ISDBScanner で地デジと BS の無料チャンネルのみスキャンし CS はチャンネル設定自体から除外しているため気づきませんでした。

          実は最近 EDCB に公式に Linux 対応が入りました。
          まだ動作報告がありませんが、https://github.com/tsukumijima/Multi2Dec をビルドすると出来る B25Decoder.so と https://github.com/matching/BonDriver_LinuxMirakc を組み合わせることで、Linux ネイティブで EDCB (EpgTimerSrv) が動作するようになっています( B25Decoder.so に関しては mirakc 側でスクランブル解除するなら不要)。

          私は EDCB-Wine で安定稼働できていること、Linux 版は設定の変更方法が Legacy WebUI のみになる(GUI は当然ない)ことからまだ試せていませんが、試してみる価値はあると思います。

          • >私は EDCB-Wine で安定稼働できていること、Linux 版は設定の変更方法が Legacy WebUI のみになる(GUI は当然ない)ことからまだ試せていませんが、試してみる価値はあると思います。

            試してみました。
            最初インストールはできたのですがBonDriverの認識方法がわからず手間取っていました。
            Document/Readme_Mod.txt
            にさらに細かな手順が書いていることに気づきなんとかなりました。
            ちなみに以下の手順が必要でした。
            1. BonDriver_LinuxMirakc.soを/usr/local/lib/edcb/ 直下に置く(so.ini_sampleもso.iniに変更)
            2. EpgDataCap_Bon -d BonDriver_LinuxMirakc.so -chscan を実行(これをやらないとwebにBonDriverが出てきません)
            3. /var/local/edcb/Setting/EpgData ディレクトリを作成(これをやらないとEPG取得開始で失敗します)

            ところでBSのチャンネル変更が実施されたのでisdb-scannerを再実行したところ
            以下のエラーがでて作成できません。(1回目はできていました)

            $ isdb-scanner ./scanned/
            ========================== ISDBScanner version 1.2.0 ==========================
            Scanning ISDB-T (Terrestrial) channels…
            ————————————————————————————————————-
            Traceback (most recent call last)
            in main:126
            in getAvailableISDBTTuners:779
            in getAvailableISDBTOnlyTuners:803
            in __init__:60
            in __getTunerDeviceInfo:166
            in find:1309
            NoBackendError: No backend available
            [794] Failed to execute script ‘__main__’ due to unhandled exception!

            となります。
            とうぜんですが今現在稼働中でmirakcは機能しています。
            環境はproxmoxのLXCコンテナで/dev/px4videoをパススルーしています。(px4_drvはホスト上にインストールしています)

          • Linux 版 EDCB が動いたようで何よりです。
            その ISDBScanner のエラーは見たことがないですね…。
            PyInstaller でパッケージされた単独バイナリでインストールされていますよね?
            USB デバイスの検出のために libusb-package (https://github.com/pyocd/libusb-package) という libusb1 を PyPI パッケージとして同梱するライブラリを使っていますが、なんらかの原因で libusb のバックエンドバイナリを取得できずにエラーが発生しているようです。
            https://github.com/pyocd/libusb-package/blob/main/src/libusb_package/__init__.py を読む限り、システムに libusb1 がインストールされていれば動作する可能性があります。

  8. >libusb1 を PyPI パッケージとして同梱するライブラリを使っていますが、なんらかの原因で libusb のバックエンドバイナリを取得できずにエラーが発生しているようです。

    USBカードリーダーのUSBパススルー設定を外していたので通らなかったようです。
    LXCにUSBパススルー設定をしたところ完走しました。

    チャンネルスキャンだけならカードリーダーは不要だと思っていたのですが
    違うのでしょうか?

    • やはり特殊環境が原因だったようですね。
      仰る通りスキャン処理にカードリーダーは不要ですが、USBチューナーの識別・認識のために libusb を使った処理が必要です。
      LXC のことはよく分かりませんが、通常と異なる設定をしたために libusb1 の初期化に失敗したなどの可能性が考えられます。
      本来 Linux x64 なら libusb1 は ISDBScanner の PyInstaller バイナリに含まれているはずです。

  9. コメント失礼致します。
    PX-MLT5PEを使用してこの記事の構成を組んでみたところ、EDCB-Wineの録画にて録画開始処理に失敗して録画ができないという問題に悩まされています。Logを見てみると

    [241023150515.900] ****** LOG START ******
    [241023150515.900] EgpDataCap3 [InitializeEP : id=1]
    [241023150515.901] BonDriver_mirakc.dll
    [241023150515.928] CBonDriverUtil: #Open
    [241023150516.131] SetCh space 0, ch 7
    [241023150516.131] CBonDriverUtil: #SetCh
    [241023150517.992] COneServiceUtil::SetSID 0xFFFF => 0x0400
    [241023150517.998] Global\EpgDataCap_Bon_TCP_PORT_1_0
    [241023150517.998] View_Ctrl_BonPipe_560
    [241023150518.008] CMD2_VIEW_APP_SET_ID
    [241023150518.008] CMD2_VIEW_APP_SET_STANDBY_REC
    [241023150518.015] CMD2_VIEW_APP_SET_CH
    [241023150518.019] CMD2_VIEW_APP_CREATE_CTRL
    [241023150518.019] CMD2_VIEW_APP_SET_CTRLMODE
    [241023150518.019] COneServiceUtil::SetSID 0xFFFF => 0x0400
    [241023150519.569] ★Ch Change 0xFFFF 0xFFFF => 0x7FE0 0x7FE0
    [241023150519.570] ★Z:\EDCB\B25Decoder.dll のロードに失敗しました。
    [241023150519.570] ★★Decode DLL load err [CTSOut::OnChChanged()]
    [241023150523.835] CMD2_VIEW_APP_REC_START_CTRL
    [241023150523.835] *:StartSave
    [241023150523.849] CWriteTSFile::StartSave Err 2
    [241023150523.850] CWriteTSFile::StartSave Err fileList 0
    [241023150523.850] CWriteTSFile::StartSave Err 1
    [241023150523.850] CMD2_VIEW_APP_CLOSE
    [241023150523.871] CmdServer stopped
    [241023150523.873] CBonDriverUtil: #Closing
    [241023150523.934] EgpDataCap3 [UnInitializeEP : id=1]
    [241023150523.935] ****** LOG STOP ******
    がありました。
    この場合はhttps://github.com/tsukumijima/DTV-Builds/blob/master/EDCB-240622.zipからB25Decoder.dllを入れるという考えでよろしいでしょうか?

    • B25Decoder のロードに失敗するのは仕様であり、関係ありません。
      なぜなら Wine 側でスクランブル解除することを考慮しておらず、また Wine 環境でカードリーダが認識されていないからです。
      それよりも StartSave でエラーがでていることを確認すべきでしょう。何らかの理由でファイルを保存できていないものと思われます。Docker コンテナやアクセス権限を確認する必要がありそうです。
      実体験として、コンテナをdownしてから再度up -dすることで直ったこともありました。