HarmonyOS鸿蒙Next多媒体Player播放完成后无法继续播放问题
HarmonyOS鸿蒙Next多媒体Player播放完成后无法继续播放问题
使用Player播放rawfile中三曲音乐,通过上下曲按钮切换都可以播放,但是等音乐播放完成后继续播放下一首音乐在prepare环节卡住,核心代码如下所述:
@Override
public void onPlayBackComplete() {
handler.removeAllEvent();
if (index>=list.size()-1){
//如果当前歌曲是最后一首歌曲,则下一首歌曲为第一首歌曲
index=0;
}else{
index++;
}
//播放完成后继续播放下一曲音乐
startPlay(index);
}
private void startPlay(int index) {
player.reset();
try {
RawFileDescriptor mRawFileDescriptor=getResourceManager().
getRawFileEntry("entry/resources/rawfile/"+list.get(index).getPath()).openRawFileDescriptor();
source=new Source(mRawFileDescriptor.getFileDescriptor(),
mRawFileDescriptor.getStartPosition(),mRawFileDescriptor.getFileSize()
);
} catch (IOException e) {
e.printStackTrace();
}
player.setSource(source);
HiLog.error(hiLogLabel,"setSource="+index);
player.prepare();
HiLog.error(hiLogLabel,"prepare="+index);
player.play();
HiLog.error(hiLogLabel,"play="+index);
//获取当前歌曲播放时长
totalTime=player.getDuration();
handler.sendEvent(PLAY_FLUSH_TIME);
titleText.setText(list.get(index).getTitle());
}
更多关于HarmonyOS鸿蒙Next多媒体Player播放完成后无法继续播放问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题解决了,猜测原因如下,视频播放中每隔1秒刷新界面,播放完成后立即播放下一曲,但是上一曲可能还在获取1s后的当前播放时间等数据,而下一曲还没准备好播放,导致冲突。当前视频播放完成后,间隔1s再播放下一曲音乐即可。
```typescript
[@Override](/user/Override)
public void onPlayBackComplete() {
handler.removeAllEvent();
if (index>=list.size()-1){
//如果当前歌曲是最后一首歌曲,则下一首歌曲为第一首歌曲
index=0;
} else {
index++;
}
if (player!=null){
player.reset();
handler.sendEvent(PLAY_COMPLETE,1000);
}
}
更多关于HarmonyOS鸿蒙Next多媒体Player播放完成后无法继续播放问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
单击上下曲按钮切换播放正常,但是播放完成后调用下一曲失败,
您好,看下官方给的java播放器案例,可以作为参考!
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tv-music-playback-0000001050754895
在HarmonyOS鸿蒙Next中,多媒体Player播放完成后无法继续播放的问题,可能是由于播放状态未正确重置或事件监听未正确处理导致的。鸿蒙Next的多媒体框架中,播放器在播放完成后会进入PLAYBACK_COMPLETE
状态,此时需要手动调用reset()
或prepare()
方法重新准备播放器,或者通过监听onPlaybackComplete
事件来触发重新播放的逻辑。如果未正确处理这些状态或事件,播放器将无法继续播放。检查代码中是否对播放完成事件进行了处理,并确保在播放完成后正确重置播放器状态。
在HarmonyOS鸿蒙Next中,如果多媒体Player播放完成后无法继续播放,可能是由于播放状态未正确重置或事件监听未正确处理。建议检查以下方面:
-
监听播放完成事件:确保在播放完成时(如
onCompletion
事件)正确重置播放器状态或调用prepareAsync()
重新准备播放。 -
循环播放设置:如果需要循环播放,可以通过
setLooping(true)
方法启用循环模式。 -
资源释放:确保播放完成后未意外释放资源,如调用
release()
方法。 -
日志排查:通过日志检查是否有异常或错误信息,帮助定位问题。
如果以上方法无效,建议检查系统版本和播放器实现,确保与最新文档一致。