HarmonyOS 鸿蒙Next avPlayer是否播放完后自动销毁 不执行reset()或release()方法无效

HarmonyOS 鸿蒙Next avPlayer是否播放完后自动销毁 不执行reset()或release()方法无效

页面中要播放4个mp3,点击第一个按钮播放第1个mp3,播放完第1个后,再点击第二个按钮去播放第2个mp3,但是第二个按钮点一次无效,必须要点第二次才会播放,请问是什么原因呢?

日志里面提示:PipeLineThread HiPlayer_8_A remove all Task

我已在代码里控制第一个音频播放完之后不去执行stop()方法,同样无效,以下是代码片段

initAvPlayer() {
media.createAVPlayer().then((avPlayer: media.AVPlayer) => {
this.avPlayer = avPlayer;
this.playerCallback(this.avPlayer);
})
}
playerCallback(avPlayer: media.AVPlayer) {
//this.avPlayer?.stop()
avPlayer.on(‘timeUpdate’, (time: number) => {
//console.info('AVPlayer timeUpdate. time = ’ + time / 1000);
})
// error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
avPlayer.on(‘error’, (err: BusinessError) => {
console.error(Invoke avPlayer failed, code is ${err.code}, message is ${err.message});
avPlayer.reset(); // 调用reset重置资源,触发idle状态
})
// 状态机变化回调函数
avPlayer.on(‘stateChange’, async (state: string, reason: media.StateChangeReason) => {
switch (state) {
case ‘idle’: // 成功调用reset接口后触发该状态机上报
console.info(‘AVPlayer state idle called.’);
if(this.needPlayAnswer && this.avPlayer!=undefined){
this.needPlayAnswer=false
this.avPlayer.url=this.questionList[this.currentIndex].answermp3
}

break;
case ‘initialized’: // avplayer 设置播放源后触发该状态上报
console.info(‘AVPlayer state initialized called.’);

avPlayer.audioRendererInfo = {
usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
rendererFlags: 0
}
avPlayer.prepare();
break;
case ‘prepared’: // prepare调用成功后上报该状态机
console.info(‘AVPlayer state prepared called.’);
avPlayer.play()
break;
case ‘completed’: // prepare调用成功后上报该状态机
console.info(‘AVPlayer state completed called.’);

if(this.playAnswer){
this.needPlayAnswer=true
this.playAnswer=false
this.avPlayer?.reset()
}
else{
this.avPlayer?.seek(0)
this.avPlayer?.pause()
}

break;
case ‘playing’: // play成功调用后触发该状态机上报
console.info(‘AVPlayer state playing called.’);
break;
case ‘paused’: // pause成功调用后触发该状态机上报
console.info(‘AVPlayer state paused called.’);
break;
case ‘stopped’: // stop接口成功调用后触发该状态机上报
console.info(‘AVPlayer state stopped called.’);
//avPlayer.reset()
break;
case ‘released’:
console.info(‘AVPlayer state released called.’);
break;
default:
console.info(‘AVPlayer state unknown called.’);
break;
}
})
}

1 回复

更多关于HarmonyOS 鸿蒙Next avPlayer是否播放完后自动销毁 不执行reset()或release()方法无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,关于avPlayer是否在播放完内容后自动销毁的问题,这通常取决于avPlayer的实现细节和生命周期管理策略。在大多数情况下,播放器对象不会自动销毁,除非明确调用了销毁或释放资源的相关方法。

如果未执行reset()release()方法,avPlayer可能会继续占用系统资源,包括内存和处理器时间,这可能导致资源泄露或性能下降。因此,建议在播放完成后手动调用这些方法以释放资源。

如果avPlayer在播放完毕后没有按预期行为销毁或释放资源,可能的原因包括:

  1. 播放器对象被其他部分的代码引用,导致垃圾回收器无法回收。
  2. 播放器对象被设置为静态变量或全局变量,生命周期超出了预期范围。
  3. 代码中可能存在逻辑错误,导致reset()release()方法未被正确调用。

为了解决这个问题,建议检查avPlayer的生命周期管理代码,确保在播放完毕后正确调用reset()release()方法。同时,检查代码中是否有不当的引用或全局变量使用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!