StreamMusic icon indicating copy to clipboard operation
StreamMusic copied to clipboard

长音频播放进度续播异常问题与优化建议

Open h00cker opened this issue 2 months ago • 0 comments

Steps to reproduce(重现步骤)

在处理较长音频文件(如时长 20 分钟)的播放过程中,存在播放进度续播行为不一致的现象,具体表现为:

  • 可续播场景:用户在 9 分钟处 停止播放并退出 App,重新启动后能从 9 分钟位置继续播放。
  • 不可续播场景:用户在 15 分钟处 停止播放并退出 App,重新启动后 从起始位置开始播放,无法续播。

经多次观察与分析,该现象的根本原因如下:

App 在重新打开时,仅加载音频文件的前 固定时长片段(假设 10 分钟) 到本地缓存或播放缓冲区。

播放进度是否能够续播,取决于 上次停止的播放位置是否在已加载的音频片段范围内:

  • 若停止位置 ≤ 加载时长(如 ≤10 分钟) → 可定位至该位置继续播放;
  • 若停止位置 > 加载时长(如 >10 分钟) → 目标位置尚未加载,系统无法定位,触发从头播放逻辑。

因此,当前续播机制依赖于 音频预加载范围 与 播放进度的相对关系,导致超过预加载窗口的播放位置无法被恢复。

建议方案: 根据用户历史播放进度动态调整初始加载范围:

应用启动时,除默认加载前 x 分钟外,检查是否存在“未完成播放记录”; 若存在且上次播放位置 > xmin(如 15min),则将预加载窗口扩展至该位置前后一定区间(如 ±2min); 或采用分段加载策略:优先加载包含目标位置的小片段,再后台补齐其余内容。

Expected results(预期结果)

基于对“长音频播放进度续播异常”问题的分析与所提解决方案,预期实现以下改进效果:

播放进度恢复行为一致化:无论用户在 9 分钟或 15 分钟处停止播放,重新打开 App 后均能正确恢复至上次中断位置,消除因预加载范围限制导致的续播失败差异。

超出预加载范围仍可续播:当播放位置超过初始加载时长(如 >10 分钟)时,系统通过渐进式加载或动态扩展缓冲区,确保目标时间点可被定位并播放。

Actual results(实际结果)

播放进度是否能够续播,取决于 上次停止的播放位置是否在已加载的音频片段范围内:

  • 若停止位置 ≤ 加载时长(如 ≤10 分钟) → 可定位至该位置继续播放;
  • 若停止位置 > 加载时长(如 >10 分钟) → 目标位置尚未加载,系统无法定位,触发从头播放逻辑。

Server Type(服务器类型)

Navidrome

Server Version(服务器版本)

0.54.4

Client Version(客户端版本)

1.3.9

Operating System(操作系统)

iOS

Connection Type(连接类型)

Direct Mode(直连模式)

Additional Information(附加信息)

No response

h00cker avatar Sep 15 '25 11:09 h00cker