Skip to content

SrcBox v1.1.16

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:51
· 66 commits to main since this release

v1.1.16 Release Notes

Release Date: 2026-10-13
Previous Version: v1.1.15


Highlights

本版集中修复回看(回放)与时移链路,并补上 rtp2httpd 的 catchup-source 兼容:

  1. 回看/时移黑屏修复(#44):纯参数段的 catchup-source(形如 ?playseek=…)此前被原样交给播放器,播放器收到的是一个没有主机名的裸参数段,于是画面全黑、日志却显示"视频已显示"。
  2. rtp2httpd 免配置回看:识别 rtp2httpd 地址(默认 5140 端口或 /rtsp/ 路径),频道即使没有任何 catchup-* 标签也能回看/时移。
  3. 时间覆盖不再破坏 playseek:布局为 start_end/start_duration/auto 时不再把 playseek 删改成 starttime/endtime(rtp2httpd 不认后者,会静默回落到直播)。
  4. 界面修复:设置页 rtp2httpd 时区 卡片的提示文字不再与复选框重叠;标题栏的更新红点重启后仍会保持,且只显示红点、不再附带下拉箭头。

1. 回看 / 时移修复(#44)

问题 说明
纯参数段 catchup-source catchup-source="?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}" 这类写法以前直接返回参数段本身,mpv 收到 ?playseek=…(无 http://主机)必然黑屏;现在按已带 ? / 未带 ? 自动选择 & / ? 拼接到该频道的直播地址
catchup="append" 显式声明追加语义,允许 catchup-source 只写一段裸参数(不带 ?)
拼接地址与播放地址不一致 拼接前先按播放路径统一清洗:去掉 $quality 之类后缀、对非 ASCII 路径做百分号编码,避免"拼出来的地址"和"实际播放的地址"不是同一个
日志误导 切到视频区域时的日志不再写成"视频画面已显示",避免"日志正常、画面全黑"无从判断

回看/时移的地址解析规则已抽成独立模块并配回归测试,覆盖 catchup-source、catchup="append"、回放模板、时移模板与 rtp2httpd 兜底五条路径。

2. rtp2httpd 兼容(stackia/rtp2httpd)

rtp2httpd 的回看/时移是在同一个直播地址上带 playseek=开始-结束,本版据此补齐:

场景 行为
频道自带 catchup-source(参数段或完整 URL) 参数段拼到直播地址;完整 URL 原样使用,${utc:…} / {utc:YmdHMS} / {utcend:YmdHMS} 占位符正常展开(rtp2httpd 导出的 M3U 就是这种写法)
频道没有任何 catchup-* 标签 自动为 rtp2httpd 地址生成 playseek=开始-结束 请求,无需逐频道配置
时间基准 未开启「rtp2httpd 时区标记」时按 UTC 表达(rtp2httpd 的默认语义);开启后会随请求带上 TZ/UTC+N 标记,此时直接发本地时间
时移 进入时移、以及时移中按 ←/→,都是换时间段重发同一地址上的 playseek 请求,不是让 mpv 做相对 seek
udpxy(/rtp/、/udp/) 故意不自动生成 playseek:这类服务端会忽略该参数并静默播直播,必须显式配置 catchup-source

3. 「时间覆盖」不再破坏 playseek

  • 此前:设置页打开"时间覆盖"、布局为 start_end / start_duration / auto 时,重写器会先删除地址中的 playseek,再写入 starttime/endtime;rtp2httpd 不认识后者,于是点了回看却播放直播。
  • 现在:地址里已经带 playseek/tvdr 的回看请求只有 playseek 布局才会重写,其它布局一律保持原样;没有时间参数、也没有 playseek/tvdr 的地址仍按配置注入时间(原有能力保留)。

4. 界面修复

问题 说明
设置页文字重叠 「设置 → rtp2httpd 时区」卡片只定义了 5 行网格,提示文字却写在第 6 行;WPF 对越界的 Grid.Row 不报错,而是把元素塞进最后一行,于是一段说明文字被画在「允许无效/自签名证书」复选框上,看起来像文字挤压。已补齐行定义,两者各占一行
更新红点不出现 后台检查此前只在「距上次检查 ≥ 24 小时」时才运行,而"有更新"的状态只存在于内存中:发布晚于上次检查、或重启程序之后都看不到红点。现在检查时机为「从未检查 / 应用版本与上次不同 / 距上次 ≥ 24 小时」,已发现的新版本会跨重启保留,只有真正拿到版本信息才记录节流时间(网络失败下次启动会重试),更新到该版本后红点自动熄灭
红点后的下拉箭头 更新红点按钮此前复用了标题按钮的样式,跟着渲染出一个下拉箭头;现在只显示红点,窗口标题栏与全屏顶部浮层一致

5. 文档与测试

  • 四种语言(中文 / English / 繁體中文 / Русский)的《回看与时移》指南补充:纯参数段 catchup-source 的拼接规则、catchup="append"、rtp2httpd 免配置回看与时间基准、以及"带 playseek/tvdr 的请求只被 playseek 布局重写"的例外说明。
  • 自动化用例总数由 v1.1.15 的 217 提升到 246 通过 / 0 失败:新增用例覆盖地址构建(参数段 catchup-source、catchup="append"、完整 URL、模板优先级、rtp2httpd 兜底)、"时间覆盖"各布局的取舍、更新红点的触发时机与跨会话恢复,以及直接走真实回看/时移入口并断言最终交给 mpv 的 URL 的端到端用例。

Known Issues

  • 浅色主题下全屏 EPG 浮窗的最外圈存在 1 个设备像素的浅灰边(约 #AAAAAA),深色主题下为 #707070;面板内部配色已逐像素对齐,该差异仅出现在透明分层窗口边缘,本版未处理。
  • 远程页面不显示播放源健康状态(数据模型中没有该字段,早期更新日志中的相关条目与实现不符)。
  • 菜单构建仍会累积内部菜单项引用(长时间运行后菜单刷新略慢),沿用上一版的记录,本版未改动。
  • 仍有部分 catch { } 未记录上下文。

Contributors

感谢以下用户的贡献:

  • @zj2201646604 - 报告回看/时移无法播放,并提供 rtp2httpd 转发链路与调试日志 (#44)

Download