Continuous audio buffer (experimental)
This article follows the authoritative Chinese source. English translation is not yet available. Read the Chinese version.
入口:Apple Music → 澜音设置 → 实验性功能 → 连续播放缓冲。默认关闭,开关实时生效。安装模块更新后仍需强停重开宿主。当前仅开放精确 Apple Music 7.0.0 /1614,先关闭原生交叉淡入淡出;视频、多个音频输出或没有不同下一首时不执行自动切歌。
工作方式
Apple Music 继续负责资源请求、许可证和解码。模块只在其 PCM AudioSink 前接入内存中的前向 FIFO,保存尚未播放的音频,不录音、不落盘,不保存或修改 DRM 密钥。正常播放立即向物理输出供给,不先等待积攒 30 秒。目标容量 30 秒,每个渲染器上限 32 MiB;高采样率、多声道、解码速度或中断发生太早都会减少实际储备。设置显示真实排队时长,不能将目标容量当作已有可播放时长。
原生 fatal stop 前只暂留输出最多 1.5 秒;随后必须收到确认的 DRM 错误、原生处于 IDLE、仍为同一队列且用户仍要求播放,才开始恢复。授权拒绝及其他故障立即交还原生处理。有至少两秒储备和有效物理输出时钟时,使用原生真实下一首 queue ID 请求,再回到原曲实际听到的位置。临时下一首被背压,不能进入音频输出;恢复期间限制原生音频轨道选择到已持有的同一个 renderer,避免第二个 AudioTrack 同时发声。原曲重解码的重复 PCM 按保留尾端裁剪;只有新的原曲 PCM 补入才报告完成,不以 READY 为成功。
原曲第二次确认 DRM 失败且源已停在 IDLE,才额外调用一次原生当前歌曲临时缓存清理,并再执行一次下一首/原曲请求;不清离线下载、账号或许可证。活动源还在加载时不会删缓存。一次事务最多 22 秒,原曲补给等待最多八秒,每个播放器至少冷却两分钟。恢复失败先停掉保留输出并恢复原曲位置,不再追加未受跟踪的自动播放。用户暂停、拖动、换歌、改队列和退出优先,取消延迟操作;关闭开关交还原生。恢复期间原生标题和队列选中项可能短暂显示下一首。
验收标准及当前证据边界
- 关闭时保留原生输出;运行中开启必须接续原生未完成写入的同一个 ByteBuffer,不能重复配置 AAC 去首尾处理器。
- 实际 AudioSink 代理进入前向 PCM;模拟 30 秒后背压不移动生产者 buffer,原生分段写入、环绕、不同 PCM 位深、格式切换、EOF 排空及内存回收均验证。
- 模拟原生 fatal teardown、确认 DRM、真实队列 next/back、原曲 seek 和新 PCM 补给,检查最终物理 sink 的字节序列:没有临时下一首或重复帧;同一个输出 renderer,原生选择策略随后恢复。
- Plan B 限制为当前原曲、未下载、已停止;授权撤销、取消、超时、队列替换、焦点暂停、静音、模块关闭及迟到回调不能启动重试循环或继续输出旧音频。
- 新私有接口以完整官方签名 APK 的精确版本、SHA、DEX 描述符和访问标志单独验证,profile 保持 deviceValidated=false。脚本:
python scripts/verify-native-buffered-playback.py /path/to/apple.apk。 - 当前没有连接实体设备。长播的真实提前解码速度、听感连续性、真实 DRM 服务器响应、后台/锁屏/蓝牙、自定义内核、AAC/无损/高解析度和功耗仍需真机验收;模拟成功不证明这些项通过,也不保证故障必然恢复。
本实验不代理 DRM 服务器、不预取或提取许可证、不替代解码器。若有异常,关闭开关并强停重开 Apple Music;原生播放和非实验性网络恢复的策略不扩大。