【发布时间】:2018-07-13 00:53:10
【问题描述】:
Google 刚刚更改了 Chrome 预加载 audio 和 video 的方式;见:https://googlechrome.github.io/samples/media/preload-metadata
据我了解,只需将 preload 属性设置为 auto 即可解决问题,但是,我无法这样做:
let mp3 = 'https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3';
let audio = new Audio(mp3);
audio.preload = 'auto';
audio.play();
<audio src="https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3" preload="auto" autoplay></audio>
这两者都将在一分钟内停止在 Chrome 64 和 Chrome 65-dev 上播放(其他浏览器和旧版 Chrome 不受影响)。我已经在 Mac、Windows 和 Android 上复制了这个问题。
在调试过程中,我已将所有 possible media events 附加到 JS 对象(即 audio.addEventListener('timeupdate', () => { console.log('timeupdate') })),起初事件是这样触发的:
progress
timeupdate
progress
timeupdate
[...]
以后是这样的:
timeupdate
timeupdate
timeupdate
[...]
当音频播放停止时,我收到了一些error 事件,转储audio.error 返回:PIPELINE_ERROR_DECODE: Failed to send audio packet for decoding: timestamp=81763265 duration=26122 size=201 side_data_size=0 is_key_frame=1 encrypted=0 discard_padding (ms)=(0, 0)
我该如何解决这个问题?这是 Chrome 的错误吗?
更新:
- OGG 播放良好:https://jsfiddle.net/NinoSkopac/2hktqcqt/1/
- 这似乎是一个 Chrome 错误:https://bugs.chromium.org/p/chromium/issues/detail?id=794782
- Github 上的类似错误:https://github.com/video-dev/hls.js/issues/1529
更新 2:
chrome://media-internals/ 揭示了这一点:
更新 3:
此问题已在 Chrome 65 中得到修复。
【问题讨论】:
标签: javascript google-chrome audio