HarmonyOS 鸿蒙Next AudioRenderer 如何实现 seek time 功能

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next AudioRenderer 如何实现 seek time 功能

我们需要播放音频的时候输出波形图,目前这些功能都可以实现,但是播放器需要支持 seek 功能,即用户可以手动选择播放进度。目前没看到 AudioRenderer 有相关接口,https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-audio-7-V5 这个帖子中貌似也提到了问题。

我们目前对播放器的需求是:
播放,支持 seek 功能,可暂停,可继续,实时输出波形图(PCM buffer 即可)

AVPlayer 不能产出 buffer,AudioRenderer 不能支持 seek,请问咱这边有什么好方案可以建议下吗


更多关于HarmonyOS 鸿蒙Next AudioRenderer 如何实现 seek time 功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

AudioRenderer目前的确无法实现seek,只能通过AVPlayer 来实现seek

可以使用getMaxAmplitudeForOutputDevice: 获取输出设备音频流的最大电平值,大小取值在0-1之间,最小为0,
然后通过电平值转换为波形图。
参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-audio-V5#getmaxamplitudeforoutputdevice12

更多关于HarmonyOS 鸿蒙Next AudioRenderer 如何实现 seek time 功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next AudioRenderer 实现 seek time 功能主要依赖于其内部的时间定位机制。你可以通过以下步骤实现:

  1. 获取当前播放状态:首先,通过调用 AudioRenderer 的相关接口获取当前播放的时长、状态等信息,确保渲染器处于可操作状态。

  2. 设置目标时间:根据需求,设定需要跳转的目标时间。这个时间值需要是一个有效的播放时间点,且不能超出音频文件的总时长。

  3. 调用 seek 接口:使用 AudioRenderer 提供的 seek 方法,将目标时间作为参数传入。该方法会触发渲染器跳转到指定时间点继续播放。

  4. 处理 seek 结果:seek 操作完成后,检查播放状态是否按预期改变,确保音频正确跳转到了目标时间点。

  5. 更新 UI:如果应用有播放进度条等 UI 元素,需要同步更新这些元素以反映当前播放进度。

示例代码(伪代码):

AudioRenderer* renderer = GetAudioRenderer();
int64_t targetTime = /* 目标时间点 */;
renderer->Seek(targetTime);

// 检查 seek 结果,更新 UI 等后续操作

注意:具体实现可能涉及更多细节,如错误处理、状态同步等,需根据实际开发环境进行调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部