使えるチューナー (PT3・PX-Q3U4・PX-W3U4・PX-S1UD ほか)
使えるチューナーと、要るもの・B-CASカード・困ったときのことです。 入れ方は install.md (Mac は install-mac.md、Windows は install-windows.md)、 エージェントの作りは agent.md。
-
チューナー — 挿してあれば自動で見つけ、種別 (地上波 / 衛星) も見分けます
チューナー 使う仕組み ホストに入れるもの PT2 / PT3、PX-BCUD、PX-S1UD など (tuner-pt3.md) Linux DVB ドライバ PX-Q3U4 / PX-W3U4 / PX-MLT 系など (px4-userland の対応機種。Windows も。tuner-px4.md) px4-userland (同梱) なし (Windows はドライバを WinUSB に) PX-S1UD (smsusb を blacklist したとき。Windows も。tuner-px-s1ud.md) siano-userland (同梱) なし (Windows はドライバを WinUSB に) PX-W3U3 (下記) asicen-userland (試験的。上流のリリース待ちで、まだ入らない) なし -
B-CASカード と PC/SC のカードリーダー (px4-userland の機材は内蔵リーダーでもよい。下記)
-
OS — Linux (amd64 / arm64)、Mac (Apple Silicon)、Windows (x64)
-
Docker (Linux・Mac。Compose 込み) か、Windows は WSL (
wsl --updateで入るwslc。Docker Desktop は要らない)。 Kubernetes なら Helm -
あれば Intel の GPU (
/dev/driを渡す。install.md)。無ければソフトウェアでエンコードします
機材ごとの入れ方は表のリンク先に。
設定の「受信」の「チューナー」に、1台1行の表で出ます。いまの様子と設定を同じ行に並べてあり、 変えたらその場で保存します。
| 列 | 中身 |
|---|---|
| チューナー | 名前と、その下にデバイス |
| 受信できる種別 | GR / BS / CS の切り替え。1つは残します |
| 状態 | 空き / 使用中 (選局しているチャンネル) / 無効と、使っている相手 (「録画: 番組名」「ライブ視聴」「番組表」「局ロゴ収集」「チャンネルスキャン」) |
| 使う | 外すと選局に使いません (ほかのソフトに残すとき。switch.md) |
| ⋯ | 名前・デバイス・LNB と削除 |
表の下の「追加」で1台足し、「自動検出に戻す」で書いた内容を消します。 電波の強さはエージェントが返さないので出しません。
PX-W3U3 は asicen-userland で (試験的。上流のリリース待ち)
Section titled “PX-W3U3 は asicen-userland で (試験的。上流のリリース待ち)”asicen-userland は、px4-userland と同じ作者による
ASICEN 系 (PLEX PX-W3U3) のユーザー空間ドライバです。まだリリースが無い (0.1.0 の予定) ので、
いまは受け口だけ用意してあり、イメージには何も入りません (agent/Dockerfile の
ASICEN_USERLAND_VERSION=0.0.0 が「まだ無い」の印)。配布物が無ければエージェントは機材を挙げません。
0.1.0 が出ると Renovate が版を上げる PR を出し (自動では入れない)、その CI で配布物の名前や形式が
見込みどおりかを確かめます。
上流の現状 (2026-10): 実機で選局できるのは 受信機 0 の衛星と受信機 1 の T27 だけ、使える受信機は同時に1つ、 1台のホストで1筐体まで。上流自身が「まだ4つの受信機として動くドライバではない」と言っています。
- 設定の
deviceはasicen:<USB ポート>:<受信機>(asicen:1-2:1)。USB の serial が無いので、 内蔵ハブのポートで筐体を見分けます。差すポートを変えると別のチューナーになります - LNB は出せません。 設定に
15vと書いてあっても 0V で選局し、設定の「受信」の「チューナー」にその旨を出します - ファームウェアは上流の配布アーカイブに入っているものをそのまま使います。再配布の権利は確かめられていません (licenses.md)。配布物に無ければ「ファームウェアがありません」と記録して、その機材は使いません
- 上流の第一弾は Linux x86_64 だけなので、arm64 のイメージ・Mac・Windows には入りません
- 実機には当てていません (手元に PX-W3U3 が無い)。当てるなら
denpa-agent --tune asicen:1-2:1 T27
エージェントの中でどう扱っているかは agent.md。
カードリーダー
Section titled “カードリーダー”USB のリーダーは usbfs を直接扱います。 /dev/bus/usb が見えていれば動きます。
ホストや別のコンテナで pcscd が動いていると使えません (「別のプロセスがリーダーを
使っています」と出る)。TPDU 単位のリーダー (Gemalto PC Twin など) には T=1 の枠組みを
こちらで組み、APDU 単位のリーダーにはそのまま送ります。カードの無いリーダーや INT に
答えないカードは飛ばし、USB のリーダーを内蔵リーダーより先に試します (CardLinks.cs)。
動いているエージェントがカードと話せているかは /denpa/card で分かります (INT を
1回通す)。止めた状態なら denpa-agent --card でも確かめられます (リーダーを並べ、
ATR とカードの番号を出す。動いているエージェントがリーダーを使っている間は断られます)。
チューナーを使わずに B25 だけ確かめるなら denpa-agent --decode-file <in.ts> <out.ts> (/denpa/decode
と同じことをする。掛かったまま録れてしまったものを救うのにも使える)。
B-CASカードとデスクランブル
Section titled “B-CASカードとデスクランブル”スクランブルはエージェント自身が復号します (B25.cs)。カードが読めないときは
掛かったまま流し、理由を状態に出します。黙って素通しすると「録画は成功してサイズも
それらしいのに中身が全部スクランブル」という分かりにくい壊れ方になるためです。
選局を畳むときに、掛かったまま流したパケットの数と理由を記録にも残します。
- 録画は止めません。 電波は二度と来ないので、スクランブルされたままでも
録ります。denpa がエンコードの前に見て、掛かったままならエージェントに
復号させます (
src/lib/server/scramble.ts→/denpa/decode) - やり取りするのはパスだけです。元のTSの置き場 (
/media/raw) を両方のコンテナに 見せてあるので、読み書きはエージェントが直接やり、数十GBを HTTP で往復させません (charts/denpaが一緒に出すときは、置き場が RWO なので両方の Pod が同じノードにあることが前提です) - 元のTSを残す設定のときは、残るのは復号したTSだけです。掛かったままのものは、 あとから復号できる保証がありません
- 状態は設定の「受信」の「チューナー」にある「カードリーダー」の表に出ます。
リーダーごとに1行で、カードの番号・状態 (使用中・予備・カードなし・エラー)・
そのカードで復号しているチューナーを並べます。
CARD_URLで鍵を貰っているときは、 表の代わりに配り役の URL を出します - 使うカードは1枚です。 INT に答えた最初のリーダーのカードを全部のチューナーで 使い回します (ECM は鍵が変わるときにしか来ないので、1枚で足ります)。残りの リーダーは予備で、使っているカードが答えなくなると、繋ぎ直すときに探し直して 使います。チューナーごとにカードは割り当てません
直らないとき
Section titled “直らないとき”まず /denpa/card で、見えているリーダーと、カードに INT が通るかを見ます
(設定の「受信」の「チューナー」にある「カードリーダー」の表と同じもの)。使っているリーダーは鍵の出どころに
INT を通させ、他のリーダーは開いて覗いて閉じます (USB のリーダーは使うと他から
開けないので、使っているリーダーは開き直しません)。
{ "ok": true, "message": "", "source": "local", "readers": [ { "name": "Gemplus USB SmartCard Reader (usb 4-11)", "card": true, "ids": ["0000012345678901"], "active": true, "tuners": ["PT3-T1", "PT3-S1"] }, { "name": "PX4 内蔵リーダー", "card": false, "ids": [], "active": false, "tuners": [] } ]}message は困ったときだけ入ります (カードがどこにも無い、など)。覗けなかった
リーダーは error に理由が入ります。CARD_URL のときは source: "remote" で、
remote (配り役の URL)・ids・tuners が付き、readers は空です。
鍵を配る範囲と、断られたときの文は 鍵を配るのは LAN の中だけ にあります。
# ホストから呼ぶ (イメージには curl もシェルも無い)。compose は 25252 を出してある。Kubernetes は kubectl -n denpa port-forward deploy/tuner-agent 25252 を挟むcurl -s localhost:25252/denpa/cardreadersが空 —/dev/bus/usbがコンテナに見えていないcard: falseでerrorが無い — そのリーダーにカードが挿さっていない- 「別のプロセスがリーダーを使っています」 — ホストで pcscd が動いている。
止めるか、リーダーをそちらから外す (
denpa-agent --cardを動いているエージェントの 横で起こしたときも、エージェントが使っているのでこう出る) - 応答が無い (タイムアウト) — リーダーが固まっている。USB レベルで入れ直すと戻ります
(
4-11はlsusbと/sys/bus/usb/devicesから引く)
echo 4-11 | sudo tee /sys/bus/usb/drivers/usb/unbindsleep 2echo 4-11 | sudo tee /sys/bus/usb/drivers/usb/bindエージェントは起こし直さなくて構いません。次の ECM で探し直します。
実際に復号できているかは --tune ... --decode で見ます (復号したあとが 0% 近くなら正常)。
衛星で LNB に電源を送るなら --lnb 15v を足します。
kubectl -n denpa exec deploy/tuner-agent -- denpa-agent --tune /dev/dvb/adapter1/frontend0 T27 --decode