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

2 回复

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回调方法来处理。onBufferAvailableAudioRenderer的一个回调接口,当音频缓冲区可用时会触发。你可以在该回调中检查当前缓冲区状态,若发现数据欠载,可以继续填充音频数据。

具体步骤如下:

  1. 实现AudioRenderer.OnBufferAvailableListener接口,重写onBufferAvailable方法。
  2. onBufferAvailable中调用AudioRenderer.getBufferSize获取当前缓冲区大小,判断是否需要填充数据。
  3. 若需要填充数据,调用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());
回到顶部