AudioRender,边解码边播放音频,如果数据欠载了需要怎么调用HarmonyOS 鸿蒙Next API
AudioRender,边解码边播放音频,如果数据欠载了需要怎么调用HarmonyOS 鸿蒙Next API 【设备信息】Mate60
【API版本】Api13
【DevEco Studio版本】5.0.7.200
【问题描述】
通过audio.AudioRendererWriteDataCallback 给AudioRender 写入播放数据的时候,如果数据未准备就绪(欠载,缓冲中),应该怎么处理。
直接返回:AudioDataCallbackResult.INVALID吗?
后续数据OK了 如何重新写入。使用废弃的口:write(buffer: ArrayBuffer): Promise<number>?
更多关于AudioRender,边解码边播放音频,如果数据欠载了需要怎么调用HarmonyOS 鸿蒙Next API的实战教程也可以访问 https://www.itying.com/category-93-b0.html
AudioRendererWriteDataCallback一般配合on(‘writeData’)使用,不会出现数据未准备就绪情况,只是会出现数据失效的情况,如果数据失效就会返回INVALID,后续有正确数据写入变回执行监听
数据没准备好,返回AudioDataCallbackResult.INVALID告诉系统。后续数据OK了,调用on(‘writeData’)接口按buffer大小下发给系统。
更多关于AudioRender,边解码边播放音频,如果数据欠载了需要怎么调用HarmonyOS 鸿蒙Next API的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,如果使用AudioRender
进行边解码边播放音频时出现数据欠载,可以通过调用onBufferAvailable
回调方法来处理。onBufferAvailable
是AudioRenderer
的一个回调接口,当音频缓冲区可用时会触发。你可以在该回调中检查当前缓冲区状态,若发现数据欠载,可以继续填充音频数据。
具体步骤如下:
- 实现
AudioRenderer.OnBufferAvailableListener
接口,重写onBufferAvailable
方法。 - 在
onBufferAvailable
中调用AudioRenderer.getBufferSize
获取当前缓冲区大小,判断是否需要填充数据。 - 若需要填充数据,调用
AudioRenderer.write
将解码后的音频数据写入缓冲区。
示例代码片段如下:
class MyBufferListener implements AudioRenderer.OnBufferAvailableListener {
onBufferAvailable(audioRenderer: AudioRenderer): void {
let bufferSize = audioRenderer.getBufferSize();
if (bufferSize > 0) {
let audioData = // 获取解码后的音频数据
audioRenderer.write(audioData, 0, audioData.length);
}
}
}
let audioRenderer = new AudioRenderer();
audioRenderer.onBufferAvailable(new MyBufferListener());