Repository navigation
SrcBox v1.1.16
v1.1.16 Release Notes
Release Date: 2026-10-13
Previous Version: v1.1.15
Highlights
本版集中修复回看(回放)与时移链路,并补上 rtp2httpd 的 catchup-source 兼容:
- 回看/时移黑屏修复(#44):纯参数段的
catchup-source(形如?playseek=…)此前被原样交给播放器,播放器收到的是一个没有主机名的裸参数段,于是画面全黑、日志却显示"视频已显示"。 - rtp2httpd 免配置回看:识别 rtp2httpd 地址(默认 5140 端口或
/rtsp/路径),频道即使没有任何catchup-*标签也能回看/时移。 - 时间覆盖不再破坏 playseek:布局为
start_end/start_duration/auto时不再把playseek删改成starttime/endtime(rtp2httpd 不认后者,会静默回落到直播)。 - 界面修复:设置页 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)