AVPlayer实现音频播放(c++侧)

 AVPlayer实现音频播放(c++侧)


HarmonyOS
2024-05-28 21:41:14
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
roseprodigal

使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。

使用的核心API

AVPlayer API

核心代码解释

在 CMake 脚本中链接动态库,引入avplayer.h、avpalyer_base.h和native_averrors.h头文件,使用音频录制相关API

target_link_libraries(entry PUBLIC libace_napi.z.so libavplayer.so) 
target_link_libraries(entry PUBLIC ${hilog-lib}) 
​ 
target_link_libraries(entry PUBLIC libace_ndk.z.so) 

接口映射

void SampleBitMap::Export(napi_env env, napi_value exports) { 
  if ((env == nullptr) || (exports == nullptr)) { 
      DRAWING_LOGE("Export: env or exports is null"); 
      return; 
  } 
  napi_property_descriptor desc[] = { 
      {"init", nullptr, SampleBitMap::NapiInit, nullptr, nullptr, nullptr, napi_default, nullptr}, 
      {"jsPlay", nullptr, SampleBitMap::NapiPlay, nullptr, nullptr, nullptr, napi_default, nullptr}, 
      {"jsStop", nullptr, SampleBitMap::NapiStop, nullptr, nullptr, nullptr, napi_default, nullptr}, 
      {"jsRelease", nullptr, SampleBitMap::NapiRelease, nullptr, nullptr, nullptr, napi_default, nullptr}, 
  }; 
  napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
  if (napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc) != napi_ok) { 
      DRAWING_LOGE("Export: napi_define_properties failed"); 
  } 
}

2.初始化:创建实例OH_AVPlayer_Create(),AVPlayer初始化idle状态,设置业务需要的监听事件OH_AVPlayer_SetPlayerCallback(),设置资源:调用OH_AVPlayer_SetURLSource(),设置属性url,AVPlayer进入initialized状态

// 初始化 
void SampleBitMap::inittt() { 
  DRAWING_LOGE("6666666==音频初始化"); 
  // 创建播放实例 
  player = OH_AVPlayer_Create(); 
  AVPlayerCallback callback; 
  callback.onInfo = OnInfo; 
  callback.onError = OnError; 
  // 设置回调,监听信息 
  int32_t ret = OH_AVPlayer_SetPlayerCallback(player, callback); 
  if (ret != AV_ERR_OK) { 
      // 处理异常 
  } 
  const char *path = "https://webfs.hw.kugou.com/202401111158/768c7fbd5cf983c6d931aa0c6a09257e/KGTX/CLTX001/" 
                      "f3473491d197d167edeb0bd2622a605d.mp3"; 
  // 设置url资源 
  int32_t ret1 = OH_AVPlayer_SetURLSource(player, path); 
  if (ret1 != AV_ERR_OK) { 
      // 处理异常 
      DRAWING_LOGE("6666666==音频加载失败"); 
  } 
  // 准备资源 
  int32_t ret2 = OH_AVPlayer_Prepare(player); 
  if (ret2 != AV_ERR_OK) { 
      // 处理异常 
  } 
} 

音频播控:播放OH_AVPlayer_Play(),暂停OH_AVPlayer_Pause(),跳转OH_AVPlayer_Seek(),停止OH_AVPlayer_Stop() 等操作。

id SampleBitMap::play() { 
  DRAWING_LOGI("开始播放"); 
  // 播放资源 
  int32_t ret = OH_AVPlayer_Play(player); 
  if (ret != AV_ERR_OK) { 
      // 处理异常 
  } 
} 
void SampleBitMap::stop() { 
  DRAWING_LOGI("暂停播放"); 
​ 
  // 停止播放 
  int32_t ret = OH_AVPlayer_Pause(player); 
  if (ret != AV_ERR_OK) { 
      // 处理异常 
  } 
}

释放资源

oid SampleBitMap::release() { 
  // 释放资源 
  int32_t ret = OH_AVPlayer_Release(player); 
  if (ret != AV_ERR_OK) { 
      // 处理异常 
  } 
} 

实现效果

使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。

注明适配的版本信息

DevEco Studio Version: 4.1.1.400

SDK:HarmoneyOS 4.1.0.56

分享
微博
QQ
微信
回复
2024-05-29 22:55:47
相关问题
AVplayer开发音频播放功能
485浏览 • 1回复 待解决
AVPlayer实现视频播放
286浏览 • 1回复 待解决
使用AVPlayer实现视频播放
335浏览 • 1回复 待解决
avplayer播放视频demo
363浏览 • 1回复 待解决
SoundPool实现音频播放功能
618浏览 • 1回复 待解决
c++可以直接调用ts的static方法吗?
730浏览 • 1回复 待解决
鸿蒙-如何实现播放一段音频
9812浏览 • 2回复 待解决
如何实现ArkTS与C/C++的HashMap转换?
443浏览 • 0回复 待解决
如何修改C++版本?C++支持情况?
350浏览 • 1回复 待解决
通过Native 调用c++实现文本绘制
475浏览 • 1回复 待解决
AudioCapturer录音+AudioRenderer播放音频
648浏览 • 1回复 待解决
使用AudioRenderer开发音频播放功能
484浏览 • 1回复 待解决
音频播放长时任务不生效
612浏览 • 1回复 待解决
鸿蒙 如何使用 player 播放网络音频
6019浏览 • 1回复 已解决
ts给c++传递数组,c++层如何解析
584浏览 • 1回复 待解决