HarmonyOS 鸿蒙Next 手机MediaCodec编码dequeueOutputBuffer一直返回-1

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

HarmonyOS 鸿蒙Next 手机MediaCodec编码dequeueOutputBuffer一直返回-1

webrtc(m94版本)在鸿蒙(4.2.0)的华为手机上使用MediaCodec 进行H264编码时,出现dequeueOutputBuffer一直返回-1的问题。

这个错误码并不是一开始编码就会出现的,手机放着不动,用摄像头一直采集画面,有多路编码或者有解码的时候比较容易出现。我现在的处理方式是连续出现多次返回-1,就flush掉,但是这样做会导致视频会卡。想找到真实原因和解决手段,求大神支招。

3 回复

调试发现,通过以下这种方式触发mediacodec生成关键帧就很容易会导致dequeueOutputBuffer的时候一直返回-1.

Bundle b = new Bundle();
b.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0);
codec.setParameters(b);
都是海思芯片的会出现这个问题,创建编码器是使用"OMX.hisi.video.encoder.avc"创建的MediaCodec编码器。

针对您提到的HarmonyOS 鸿蒙Next手机上MediaCodec编码时dequeueOutputBuffer一直返回-1的问题,这通常指示着编码器尚未准备好输出数据。以下是一些可能的原因和检查点:

  1. 输入数据完整性:确保您已正确地向编码器输入了有效的数据帧,并且输入缓冲区已被正确标记为已处理。

  2. 编码器状态:检查编码器是否已成功配置并启动。configurestart方法必须被正确调用且顺序无误。

  3. 输出缓冲区可用性dequeueOutputBuffer返回-1也可能意味着当前没有可用的输出缓冲区。确认您是否已通过createInputBufferscreateOutputBuffers为编码器和解码器分配了足够的缓冲区。

  4. 错误处理:检查是否有通过getErrorCodegetDiagnosticInfo方法可获取的错误信息,这有助于进一步定位问题。

  5. 同步问题:确保所有编码相关的调用都在正确的线程上执行,通常是在创建MediaCodec对象的线程。

如果以上检查均无误但问题依旧存在,可能是底层系统或特定硬件相关的问题。此时,建议您直接联系设备制造商或访问官方技术支持渠道。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部