Skip to content

feat: 直播源 P3(LIVE/ICY 重连状态机与事件计数门禁) - #160

Merged
wt159 merged 1 commit into
masterfrom
implement/live-source-p3
Nov 13, 2026
Merged

wt159 merged 1 commit into
masterfrom
implement/live-source-p3

Conversation

@wt159

@wt159 wt159 commented Nov 13, 2026

Copy link
Copy Markdown
Owner

摘要

落地 doc/live-source-spec.md 的 P3 域外执行票链(#157 契约 → #158 实现 → #159 门禁):

  • 解码线程重连状态机(重连状态机的归属层与触发点 #149/重连策略、可取消性与停止上界 #150 / ADR 0007):预算 3 次 × 1s 分片等待(取消可打断)、
    唯一终局 FileOpenFailed、规格一致性准入;PCM 与 ffmpeg 两条供给分支单一入口
  • HlsExtractor 诊断旁路三条不变量 + 无状态重开原语 reopenConnection(ADR 0006)
  • pos==0 seek 无限流实现层短路(D21);终止路径恰好三条(D20)
  • LIVE/EVENT 清单放行直通路径(D17/D18,durationMs==0 单一信号);ICY 嗅探补发
    Icy-MetaData: 1(D19);HttpSource 无 Content-Length 响应 1MB 上限
  • liveReconnectAttempts() 事件计数仪表(§10.2 取数点,非能力位)

门禁证据(#159)

  • 本地 ctest -R ^sdk_ -j4:14/14 全绿(61.6s)
  • LiveSourceReconnect 3 例:预算耗尽 attempts==3 / 断流恢复走状态机 / seek 短路零状态变化
  • 变异验证:预算 3→4 → CHECK(4 == 3) 必红,还原复绿(可红可绿)
  • LiveSmoke 三场景 ALL PASS:LIVE 稳态 8s 不主动结束 / stop() ≤5s 有限时间返回 / ICY 稳态 8s
  • mock 素材全本地(127.0.0.1 进程私有端口),公网零依赖;LiveSmoke 不注册 ctest(D23)

授权复核七项清单(D25)留在图外,见 #157。

- HlsExtractor:诊断旁路三条不变量(读失败/流结束分离,nullptr 语义不扩展)、
  无状态重开原语 reopenConnection(#157 契约,ADR 0006/0007)
- AudioStreamDecoder:解码线程重连状态机(预算 3 次、每次 1s 分片等待可打断、
  唯一终局 FileOpenFailed、规格一致性准入);PCM 与 ffmpeg 两条供给分支接入
  单一入口;pos==0 seek 在无限流上实现层短路(D21);liveReconnectAttempts()
  事件计数仪表(规格 §10.2 取数点,非能力位)
- HttpSource:无 Content-Length 响应 1MB 读上限(ICY 无限流探测防护)
- UrlSource:嗅探补发 Icy-MetaData: 1(D19)
- MusicPlayList:LIVE / EVENT 清单放行直通路径(D17/D18,durationMs==0 单一信号)
- HttpMocks:窗口化 LIVE 滑动窗口(段=同一条 wav 流的连续切片、data 块不限长)、
  ICY 端点重写(头组合修正 + metaint 元数据块)、sendAllGuarded 防 TCP 背压
  卡死、按取回序号(seq)的断流注入面
- 测试:LiveSourceReconnect 3 例(预算耗尽 attempts==3 / 断流恢复走状态机 /
  seek 短路零状态变化,事件计数判据,变异验证必红);HlsUrlDirect 判据改写
  (LIVE/EVENT 放行 + ICY 直通 + 诊断旁路);LiveSmoke 手工冒烟独立可执行
  (不注册 ctest,D23:无限流不主动结束 / ICY 稳态 / stop() 有限时间返回)
@wt159
wt159 merged commit efaddd3 into master Nov 13, 2026
2 checks passed
@wt159
wt159 deleted the implement/live-source-p3 branch November 13, 2026 12:46
wt159 added a commit that referenced this pull request Nov 13, 2026
- doc/live-source-spec.md §11.2 表下:登记 P3 执行票链已落地(efaddd3ff + c39ff45 / PR #160 / 6 个 CI run 全绿),附加项「播放主路径挂死」已闭环,③ 授权复核仍属界外未闭环
- doc/network-audio-source-spec.md §5.3 与 §11:同口径时点指针,覆盖「播放主路径未设读超时 / 补 rw_timeout 由图外 effort 落地」的过期措辞
- 既有行、表格单元格、判据数值、TIMEOUT 与 GLOSSARY.md 一字不动(+6 / -0);工作树保持 CRLF
- 票正文不改:#147 / #156 各挂一条更正 comment
- 纯 doc 提交按 workflow paths 过滤不触发 CI
@wt159

wt159 commented Nov 14, 2026

Copy link
Copy Markdown
Owner Author

状态更正(2026-11-14,人工合规动作)—— D25 授权复核已归档

本 PR 正文末句「授权复核七项清单(D25)留在图外,见 #157」是 2026-11-13 合入时点快照。按「PR / 票正文是历史留痕不改」的纪律不回改,此处登记状态变更:

  • D25 七项清单已由仓库 owner(人工)于 2026-11-14 按 doc/live-source-spec.md §10.4 逐项复核并归档,归档载体 = #157 D25 归档 comment;③「授权明确」命中,P3 整体准入阻塞解除。闭环依据是人工复核归档,不是代码落地。
  • 「留在图外」在**复核周期(第 6 项,永久流程项)**意义上仍成立;任何具体公网电台进产品冒烟 / 内嵌列表 / 分发前须按七项清单重核并补齐「条款页 URL + 抓取日期 + 版本」。
  • 本 PR 的实现范围、门禁证据、6 个 CI run 与 MERGED 结论一字不动;三档归类与上位规格 §10 四条规范性措辞不变;本轮零代码 / 零用例 / 零 CI 改动。

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