3.1Release AudioManager 播放音频文件无播放进度回调问题分析报告
1 关键字
3.1Release;播放音频文件
2 问题描述
开发板型号:rk3568
OH版本:OpenHarmony 3.1 Release
问题现象:根据@ohos.multimedia.mediaLibrary模块下的AudioPlayer播放音频文件时,使用AudioPlayer.on('timeUpdate')订阅音频播放进度回调事件,无法正常回调。
3 问题原因
3.1 正常机制
根据@ohos.multimedia.mediaLibrary模块下的AudioPlayer播放音频文件时,当播放进度发生变化,AudioPlayer.on('timeUpdate')正常回调。
3.2 异常机制
根据@ohos.multimedia.mediaLibrary模块下的AudioPlayer播放音频文件时,当播放进度发生变化,AudioPlayer.on('timeUpdate')无法回调。
4 解决方案
修改3.1Release openHarmony源码中相应代码,可以解决此问题。
源码路径:foundation\multimedia\media_standard\frameworks\kitsimpl\js\player\player_callback_napi.cpp
在此文件中找到OnPositionUpdateCb方法,将该方法改成如下代码:
void PlayerCallbackNapi::OnPositionUpdateCb(int32_t postion) const
{
MEDIA_LOGD("OnPositionUpdateCb is called, postion: %{public}d", postion);
CHECK_AND_RETURN_LOG(timeUpdateCallback_ != nullptr, "Cannot find the reference of timeUpdate callback");
PlayerJsCallback *cb = new(std::nothrow) PlayerJsCallback();
CHECK_AND_RETURN_LOG(cb != nullptr, "No memory");
cb->callback = timeUpdateCallback_;
cb->callbackName = TIME_UPDATE_CALLBACK_NAME;
cb->valueVec.push_back(position);
return OnJsCallBack(cb);
}
按照以上步骤修改代码之后,AudioPlayer.on('timeUpdate')可正常回调。
5 定位过程
1.在音频进度变化时,通过日志查到了相关日志信息:“OnPositionUpdateCb is called, postion”,于是根据该日志搜索源码找到相关cpp文件player_callback_napi.cpp的相应方法:OnPositionUpdateCb,发现该方法下只有一行打印日志的代码,并没有实现相应回调逻辑。
2.通过观察发现该cpp文件中已定义音频进度发生变化的相关回调:timeUpdateCallback,因此只需在OnPositionUpdateCb方法中使用timeUpdateCallback 即可实现回调逻辑。
6 知识分享
3.1Release下ohos.multimedia.mediaLibrary模块下的AudioPlayer的音频播放事件实现源码位于foundation\multimedia\media_standard\frameworks\kitsimpl\js\player\player_callback_napi.cpp中。
更多推荐


所有评论(0)