JS中Audio.duration在音频末尾微小变动是否为文档化行为?
Audio元素播放至末尾时duration微小变动的原因
这是浏览器媒体处理的正常行为,并非你的操作错误。
核心原因:
- 音频的
duration值并非加载完成后就完全固定。浏览器在音频解码和播放过程中,会根据实际解析出的音频帧数据,逐步修正时长的精度。尤其是接近播放结束时,会基于实际播放的最后一帧位置,调整duration到更精确的数值。 - 浏览器必须严格保证
0 <= audio.currentTime <= audio.duration的约束成立。当currentTime接近最初估算的时长时,为了避免播放到最后时currentTime超出duration,浏览器会微调duration来匹配实际的播放终点,这就出现了你看到的末尾数值变化。
关于你的代码:
你的测试代码没有问题,通过requestAnimationFrame持续打印duration的方式,正好捕捉到了浏览器对时长精度的最后修正过程。这种精度调整是符合HTML5媒体规范的,规范允许浏览器根据实际媒体数据动态修正duration值,以保证播放逻辑的一致性。
内容的提问来源于stack exchange,提问作者Alphasaft
相关产品推荐
相关产品推荐

