【HarmonyOS NEXT】音频渲染,通过OH_AudioDecoder得到的buffer和回调中得到的buffer length不匹配

 【关键字】

音频渲染 / buffer length / OH_AudioDecoder

【问题描述】

实现音视频编解码的音频渲染过程中,通过OH_AudioDecoder得到的buffer数据大小和OH_AudioRenderer_Callbacks::OH_AudioRenderer_OnWriteData这个回调中得到的buffer length不匹配如何处理,是否有demo可以参考。

【解决方案】

buffer length不匹配是正常现象。

处理方式:可以做缓存 或者 用audioRenderer_->Write(destBuffer, destLength);不要用回调,回调一般是给低时延使用的。

比如avplayer示例代码如下:

auto mem=input->memory_;
auto srcBuffer = mem->GetAddr();
auto destBuffer = const_cast<uint8_t *>(srcBuffer);
auto srcLength= mem->GetSize();
size_t destLength= srcLength;
while (isForcePaused_ && seekable_ ==Seekable::SEEKABLE) {
OHOS∷Media∷SleepInJob(5); //5ms
continue;
}
OHOS∷Media::AutoLock lock(renderMutex_);
FALSE RETURN_V(audioRenderer != nullptr,Status∷ERROR_NULL_POINTER);
for(;destLength>0;){
ret= audioRenderer_->Write(destBuffer, destLength);
if(ret<0){
MEDIA_LOG_E("Write data error ret is:" PUBLIC_LOG_D32,ret );
break;
} else if (static_cast<size_t>(ret) < destLength) {
0HOS::Media::SleepInJob(5); //5ms
}
destBuffer += ret;
destLength-=ret;
MEDIA_LOG_DD("written data size " PUBLIC_LOG_D32,ret);
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值