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

6 回复
问题解决了,猜测原因如下,视频播放中每隔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


单击上下曲按钮切换播放正常,但是播放完成后调用下一曲失败,

在HarmonyOS鸿蒙Next中,多媒体Player播放完成后无法继续播放的问题,可能是由于播放状态未正确重置或事件监听未正确处理导致的。鸿蒙Next的多媒体框架中,播放器在播放完成后会进入PLAYBACK_COMPLETE状态,此时需要手动调用reset()prepare()方法重新准备播放器,或者通过监听onPlaybackComplete事件来触发重新播放的逻辑。如果未正确处理这些状态或事件,播放器将无法继续播放。检查代码中是否对播放完成事件进行了处理,并确保在播放完成后正确重置播放器状态。

在HarmonyOS鸿蒙Next中,如果多媒体Player播放完成后无法继续播放,可能是由于播放状态未正确重置或事件监听未正确处理。建议检查以下方面:

  • 监听播放完成事件:确保在播放完成时(如onCompletion事件)正确重置播放器状态或调用prepareAsync()重新准备播放。

  • 循环播放设置:如果需要循环播放,可以通过setLooping(true)方法启用循环模式。

  • 资源释放:确保播放完成后未意外释放资源,如调用release()方法。

  • 日志排查:通过日志检查是否有异常或错误信息,帮助定位问题。

如果以上方法无效,建议检查系统版本和播放器实现,确保与最新文档一致。

回到顶部