使用OHAudio native播放单声道采样为8000的单声道音频PCM,出现卡顿现象。
问题代码示例参考如下:
int32_t writeAudioData(OH_AudioRenderer* renderer, void* context, void* buffer, int32_t length){
Audio* pAudio = (Audio*)context;
AVData aVData;
if (pAudio->pQueue->Pop(aVData)) {
memcpy(buffer, aVData.frameBuffer, aVData.size);
length = aVData.size;
OH_LOG_INFO(LOG_APP, "这里播放音频length:%{public}d", length);
}
return 0;
} OHAudio是系统在API version 10中引入的一套C API,此API在设计上实现归一,同时支持普通音频通路和低时延通路。仅支持PCM格式,适用于依赖Native层实现音频输出功能的场景。
在设置音频回调函数时API version 12新增回调函数OH_AudioRenderer_OnWriteDataCallback用于写入音频数据。
检查OH_AudioData_Callback_Result (*OH_AudioRenderer_OnWriteDataCallback)(OH_AudioRenderer* renderer, void* userData,void* audioData, int32_t audioDataSize)回调中往audioData中所填待播放数据长度是否是audioDataSize。
缓存区间长度audioDataSize较大导致往audioData中所填待播放数据长度小于audioDataSize。过大的buffer会导致声音延迟增加,或者在所填充数据不足audioDataSize时出现噪音。