From eb8cc132f96a3066b33fbeed452d2570c5ad81c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A7=89?= Date: Wed, 4 Oct 2023 11:07:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A3=80=E6=9F=A5=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/music.js | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/public/music.js b/public/music.js index 03d094d..5c38db9 100644 --- a/public/music.js +++ b/public/music.js @@ -161,26 +161,29 @@ export default class MusicList { console.log('播放器加载分片:', item.name, `${index}/${chunkNumber}`) const 播放状态 = !this.audio.paused && this.playing === item const 加载状态 = item.arrayBufferChunks.length < chunkNumber - const 播放进度 = this.audio.currentTime / this.audio.duration - const 加载进度 = index / chunkNumber + //const 播放进度 = this.audio.currentTime / this.audio.duration + //const 加载进度 = index / chunkNumber const 结束时间 = sourceBuffer.buffered.length && sourceBuffer.buffered.end(0) const 缓冲时间 = 结束时间 - this.audio.currentTime //console.log({ 播放状态, 加载状态, 播放进度, 加载进度, 缓冲时间 }) if (!播放状态 && !加载状态) break // 播放停止且加载完毕则退出 - if (缓冲时间 > 60) await new Promise(resolve => setTimeout(resolve, 30000)) // 缓冲超过60秒则等待30秒 - if (播放进度 - 加载进度 > 0.5) await new Promise(resolve => setTimeout(resolve, 1000)) // 播放进度超过加载进度0.5则等待1秒 - if (sourceBuffer.updating) { - await new Promise(resolve => sourceBuffer.addEventListener('updateend', resolve)) - } else { - while (item.arrayBufferChunks.length <= index) { - await new Promise(resolve => setTimeout(resolve, 100)) - if (this.audio.paused || this.playing !== item) break // 播放停止或已经切歌则退出 - } - const chunk = item.arrayBufferChunks[index] // 顺序取出一个arrayBuffer分片 - if (this.audio.paused || this.playing !== item) break // 播放停止或已经切歌则退出 - sourceBuffer.appendBuffer(chunk) // 添加到sourceBuffer - index++ + //if (播放进度 - 加载进度 > 0.5) await new Promise(resolve => setTimeout(resolve, 1000)) // 播放进度超过加载进度0.5则等待1秒 + if (缓冲时间 > 60) { // 缓冲超过60秒则等待30秒 + await new Promise(resolve => setTimeout(resolve, 30000)) + continue } + if (sourceBuffer.updating) { // sourceBuffer正在更新则等待更新结束 + await new Promise(resolve => sourceBuffer.addEventListener('updateend', resolve)) + continue + } + if (item.arrayBufferChunks.length <= index) { // 分片数量不足则等待 + await new Promise(resolve => setTimeout(resolve, 100)) + continue + } + const chunk = item.arrayBufferChunks[index] // 顺序取出一个arrayBuffer分片 + if (this.audio.paused || this.playing !== item) break // 播放停止或已经切歌则退出 + sourceBuffer.appendBuffer(chunk) // 添加到sourceBuffer + index++ } console.log('加载完毕====================================') item.arrayBufferChunks = null // 加载完毕释放分片内存