切换片源时旧播放请求报错,怎样识别 load 导致的 AbortError
load 会重新开始媒体资源选择,并中断旧的待决 play 请求。切片时出现 AbortError,应先对照是否由自己的 load 或资源重置触发,不能立即把它解释为文件损坏或网络掉线。
先固定可播放的本地素材
附件只用四秒PCM静音WAV,程序先给资源增加本地查询参数并load重新选择,确保尚未就绪,再显式静音后play并立即load。旧Promise仍待决时流程被重置,预期返回AbortError;若资源早已就绪,play可能已兑现,不能再要求它被取消。等待新的loadedmetadata后记录currentSrc,能看出旧请求失败与新资源就绪可以同时成立。
给每次切片建立自己的归属
真实播放列表应把请求序号或所选条目标记与Promise回调关联。用户迅速从A切到B时,A的拒绝回调不应覆盖B的新状态,尤其不要在所有catch里统一写播放器失败。资源重选属于当前交互的预期路径时,可记录取消原因;真正的解码、格式或权限错误则单独提示。这个归属判断是应用逻辑,不能仅靠错误名称推断是哪段业务发起的切换。
事件顺序用于定位而非死板模板
程序采集emptied、abort、loadstart与loadedmetadata,实际出现哪些事件取决于调用前资源处于什么状态。不要要求每次load都必有完全相同的事件清单;核心断言是待决play被中断以及新资源重新达到元数据状态。若先等播放Promise成功再load,便不再是同一个待决请求实验,不能拿那条成功结果反驳中断机制。
避免把所有中断都静默吞掉
区分主动切片、用户停止、资源失效和意外错误,才能给运维留下有用日志。附件不访问远程服务器、不分析HTTP缓存,也没有解析容器时间戳;如果load之后持续无法就绪,应继续记录networkState、readyState和error.code。现场还要复测快速连续切片和页面退出时的处理,确认旧回调不会把新片源界面改回错误状态。
把取消回调与新条目状态隔离
可以给每次切片分配递增requestId,回调执行时比较是否仍是当前项,再决定是否更新界面。旧请求的AbortError仍可保留诊断日志,但不覆盖新片源的播放按钮与错误提示。若业务需要主动停止,显式记录停止原因比只读最终paused更清楚;暂停、资源重选与加载失败都可能让画面停住,只有完整调用链才能解释为什么。
下载并复现
下载原创HTML夹具、独立验证程序、本次执行记录和依赖与运行说明,放在同一目录。安装Playwright 1.58.0及其Chromium后运行 python verify.py;程序使用两个随机本地端口,自动关闭浏览器与服务,不请求外网或业务接口。
另可下载原创PCM静音样本直接检查媒体文件。HTML使用相对资源地址;验证服务生成相同PCM样本并支持本例字节范围请求。
本次实际环境为Python 3.12.4、Playwright 1.58.0、Chromium 145.0.7632.6。Playwright浏览器鼠标/键盘与页面API实跑;无实体硬件或业务控制。断言已通过;完整事件和数值保留在执行记录,不能把它改名后当目标展项测量。
继续核查与一级出处
基础背景见播放列表与定时播放配置。AbortError与自动播放策略拒绝有不同处置路径,可继续用网页视频写了 autoplay 仍没播,怎样记录 play Promise 的成功与拒绝取证;相关工程入口在专题与产品对接说明。
- load重置过程与待决play Promise中断:2026-10-24已联网读取一级来源;WHATWG HTML Living Standard,读取页标记2026-10-22更新。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。