Skip to content

fix(scan): MH-SDT[actual] が来ないケーブルの 4K の局も仮の局名で入れる - #2801

Merged
5ym merged 2 commits into
mainfrom
fix/tlv-scan-no-mh-sdt
Nov 14, 2026
Merged

5ym merged 2 commits into
mainfrom
fix/tlv-scan-no-mh-sdt

Conversation

@5ym

@5ym 5ym commented Nov 14, 2026

Copy link
Copy Markdown
Collaborator

QC26 (J:COM の BS4K、0xB111) がスキャンで入らない件です。実機の録り (0.9 秒) を SplitTlv と readTlvServices に通すと、TLV-NIT・PLT・MPT・MH-SDT[other] はあるが MH-SDT[actual] が無く、「局なし (MH-SDT を受信できませんでした)」になりました。MH-SDT[actual] が何秒おきに来るかは確かめていません。

  • TLV のチャンネルは 60 秒待つ。来なければ TLV-NIT のうち PLT の package を持つストリームを自分のものとし、「名前の無い局 (161)」で入れる (記録の行にそう書く)
  • 番組表の取得が MH-SDT[actual] を受信したら、エージェントの控えの仮の局名を書き換える (tlv-names.ts)
  • 試験は録りから抜いた信号の TLV パケット (src/lib/server/fixtures/qc26-si.tlv、7.7 KB) を使う

🤖 Generated with Claude Code

https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT

QC26 (J:COM の BS4K) は 30 秒の間に MH-SDT[actual] が来ず、局なしとして入らなかった。
TLV は 60 秒待ち、来なければ TLV-NIT と PLT で自分の TLV ストリームを見つけて「名前の無い局 (161)」で入れる。
番組表の取得が MH-SDT[actual] を受信したら、エージェントの控えの局名を書き換える。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT
@claude

claude Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 27s —— View job


レビュー結果

大きな不具合は見つかりませんでした。実機の録りで再現し、ownStream と仮の局名で入れる手順も試験で押さえています。確認したい点が 4 つあります。テストは実行していません。コードを読んだだけです。

1. TLV_TIMEOUT の根拠 (要確認)
src/lib/server/scan.ts の TLV_TIMEOUT のコメントは、「TS の SI は NIT と SDT[other] でも 10 秒に 1 回は来る (ARIB TR-B14)」を 60 秒にした根拠にしています。この間隔は TS の SI のものです。MH-SDT[actual] の送出間隔は PR 本文で「確かめていない」としているので、根拠として弱いです。MH-SDT[other] が録りにあり、[actual] が無い理由も分かっていません。

  • 60 秒待っても来ない場合は、仮の局名で入れるだけです。仮の局名が残ることを許容するなら、「根拠は TS の間隔からの推定」と一言添えるほうが正確です。
  • 局名を取得できなかったチャンネルは毎回 60 秒かかります。再スキャンのたびに起きる点は docs に書いてあるとおりです。

2. nameTlvServices の読み書きの競合 (要確認)
src/lib/server/tlv-names.ts は getChannels(agent) で控えを読み、CATV の全チャンネルを putChannels で書き戻します。この間に別のスキャンや番組表の取得が同じエージェントの CATV の控えを書くと、その更新が古い内容で上書きされます。

  • 取得間隔は短く、await をまたぐので起きにくいとは思います。
  • ただし putChannels が控え全体を置き換える作りなら、エージェント単位の直列化か、changed のあったチャンネルだけを書く形にしてください。

3. ownStream の選び方
src/lib/server/scan.ts と packages/arib/src/mmt-si.ts の ownStream は、PLT の package を 1 つでも持つ最初のストリームを返します。実機では 1 つに決まります。複数のストリームが同じ service_id を持つ構成ができたときは、先に見つけたものが選ばれます。いまのところ対処は不要です。コメントに「最初の 1 つ」と書いておくと、選び方が分かります。

4. 文章 (docs/writing.md)

  • tlv-names.ts と epg-collect.ts のコメントにある「預ける」「預け直す」は、putChannels で書き込むことを指しています。「書き込む」「書き戻す」のほうが何をするか分かります。
  • docs/data.md の「記録の行には局名を受信できなかったことを書く」と、実際の表示「MH-SDT を受信できなかったため、局名は仮の名前です。番組表の取得で受信したら直します」の言葉がずれています。docs に実際の文言を引用してください。
  • docs/tuner-it930x.md の「この 4 MB (0.9 秒)」は前の段落の「先頭の 4 MB」を受けています。段落が分かれて読みにくくなったので、「その録り (4 MB・0.9 秒)」のように主語を書き直すと通じます。

良い点

  • hasUnnamed で、仮の名前の局があるチャンネルだけ 2 度目のパースをしています。それ以外のチャンネルに負荷を足しません。
  • 仮の名前の局だけを書き換えるので、スキャンで局名を受信した局を上書きしません。
  • 「MH-SDT も PLT も来ない」場合の試験を分けてあります。TLV-NIT と PLT だけの ownStream の単体試験もあります。

レビューの指摘に合わせて、60 秒の根拠が TS からの推定であること、ownStream が最初の 1 つを選ぶこと、記録の行の文言を書き足した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT
@claude

claude Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 19s —— View job


レビュー結果

大きな不具合は見つかりませんでした。差分 (scan.ts・tlv-names.ts・epg-collect.ts・mmt-si.ts) を読んだだけで、テストは実行していません。

前回の指摘のうち、控えの読み書きの競合は 2 つ目のコミットで直っています。nameTlvServices が queue で 1 つずつ進み、スキャン中は書き換えません。書き込む直前にも scanState() を確認しています。

要確認

  1. TLV_TIMEOUT の根拠 (src/lib/server/scan.ts): コメントは「TS の SI は 10 秒に 1 回」を 60 秒の根拠にしています。MH-SDT[actual] の送出間隔は確かめていないので、TS からの推定だと分かる書き方になっています。この点はこのままで問題ありません。60 秒でも来ないケーブルでは、仮の局名のまま入ります。実機で QC26 を何度か録り、来る間隔を測れると根拠が固まります。
  2. スキャン以外の書き込みとの競合 (tlv-names.ts): queue で直列になるのは nameTlvServices どうしだけです。同じエージェントの CATV の控えを書く別の経路 (番組表の取得で局を取り込み直す処理など) が getChannels と putChannels の間に走ると、古い控えで上書きします。そうした経路があるかは確認できていません。あるなら、changed のあったチャンネルだけを書くか、その経路も同じ queue に載せてください。
  3. スキャンの開始との隙間 (tlv-names.ts): 最後の scanState() の確認から putChannels が控えを置き換えるまでの間に、スキャンが始まる可能性があります。書き換える内容は仮の名前の局名だけで、スキャンの終わりに控えが書き直されます。実害は小さいと見ています。

良い点

  • hasUnnamed で、仮の名前の局があるチャンネルだけ MH-SDT[actual] を読みます。
  • 仮の名前と一致する局だけを書き換えるので、スキャンで受信した局名を上書きしません。
  • ownStream の単体試験と、実機の録りの試験があります。

文章 (docs/writing.md)
差分のコメントと docs に、決まりに反する言い方は見つかりませんでした。前回の指摘にあった「預ける」も「書き込む」「書き戻す」に直っています。

@5ym
5ym merged commit 3a42cff into main Nov 14, 2026
45 checks passed
@5ym
5ym deleted the fix/tlv-scan-no-mh-sdt branch November 14, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant