uni-app uni.createInnerAudioContext() 安卓onTimeUpdate触发频繁
uni-app uni.createInnerAudioContext() 安卓onTimeUpdate触发频繁
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 15.6 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:15.6
HBuilderX类型:正式
HBuilderX版本号:4.36
手机系统:Android
手机系统版本号:Android 14
手机厂商:OPPO
手机机型:open reno10
页面类型:vue
vue版本:vue3
打包方式:云端
项目创建方式:HBuilderX
代码太长了,请删减代码,使用简单的 audio 是否可以复现?请提供可以直接运行的简单代码方便我测试和定位问题,提供更多信息,有助于定位和解答你的问题。
多次切换播放url就会导致 onTimeUpda打印频率增加 并且多次出发play事件也会
2024 12月10日 最新bug 在平板端 当调用seek播放指定的播放位置的声音和按照顺序的差2秒上下。手机端不会 比如一个10分钟的小说正常播放到214秒和调到214秒声音是不同的 在平板 你好
在处理 uni-app
中使用 uni.createInnerAudioContext()
时遇到的安卓设备上 onTimeUpdate
事件触发频繁的问题,这通常是由于系统音频处理机制导致的。尽管我们不能直接控制事件触发的频率,但可以通过一些编程技巧来优化事件处理,减少不必要的性能开销。以下是一个通过节流(throttling)技术优化 onTimeUpdate
事件处理的示例代码。
// 创建一个音频上下文
const innerAudioContext = uni.createInnerAudioContext();
// 节流函数,限制函数执行频率
function throttle(func, wait) {
let context, args, timeout;
return function () {
const now = Date.now();
if (!previous) previous = now;
const remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
func.apply(context, args);
previous = now;
} else if (!timeout) {
timeout = setTimeout(function () {
previous = Date.now();
timeout = null;
func.apply(context, args);
}, remaining);
}
};
}
// 定义一个处理时间更新的函数
function handleTimeUpdate() {
console.log('当前播放时间:', innerAudioContext.currentTime);
// 在这里添加你的逻辑处理,比如更新UI等
}
// 监听时间更新事件,并使用节流函数包装
const throttledHandleTimeUpdate = throttle(handleTimeUpdate, 1000); // 每秒最多触发一次
innerAudioContext.onTimeUpdate(throttledHandleTimeUpdate);
// 设置音频源并开始播放
innerAudioContext.src = 'https://example.com/audio.mp3';
innerAudioContext.play();
// 其他可能的音频控制逻辑,如暂停、停止等
// innerAudioContext.pause();
// innerAudioContext.stop();
在这个示例中,throttle
函数用于创建一个节流包装器,它限制了 handleTimeUpdate
函数的执行频率。这里设置为每秒最多触发一次,你可以根据需要调整这个频率。这样,即使在安卓设备上 onTimeUpdate
事件触发得非常频繁,我们的处理函数也不会过于频繁地执行,从而减少了性能开销。
注意,节流是一种常用的性能优化技术,但具体实现可能需要根据实际场景进行调整。此外,确保音频URL是有效的,且在实际应用中处理音频加载、播放错误等异常情况。