androidmediacodec强制申请关键帧

215 篇文章 4 订阅

https://github.com/AnyRTC/anyRTC-RTMP-OpenSource/issues/49

 

V_H264Encoder::RequestKeyFrame

Android 6.0推送全是I 帧 或者全是P帧 急急急 #49

Open

jinlong0813 opened this Issue on Nov 9, 2016 · 9 comments

Comments

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

5 participants

@jinlong0813 @DyncEric @mtdxc @xiaoqunSun @liuxinpeister

@jinlong0813

jinlong0813 commented on Nov 9, 2016

AnyRTC团队,我在测试Android端推送的时候使用MediaCodec硬件编码,遇到在三星S6、nexus5(都是Android6.0)上一直只输出 I 帧,没有P帧,在三星note3、荣耀1、红米note1(Android5.0及以下版本)上是正常的,将nexus5从Android6.0降到5.0也正常了。
调试时发现只要执行过b.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0); 如上两个6.0的机型就再也不输出P帧了,全部都是关键帧。5.0/4.4的机型执行一次输出一个I 帧,不执行就输出P帧,很正常。
本人没找到解决方案,望各位专业大牛帮解决,我的联系QQ:420306380
谢谢。

 

@DyncEric

Contributor

DyncEric commented on Nov 11, 2016

这个问题我们正在努力复现,多谢

 

@DyncEric

Contributor

DyncEric commented on Nov 17, 2016

这个问题目前来看没有特别好的解决办法,可以暂时规避掉,MediaCodec编码器如果可以定时如3s输出关键帧,则可以注释掉这行代码。

 

@jinlong0813

jinlong0813 commented on Nov 17, 2016

目前确认是所有Android 6.0上都有这个问题。 按你说的,注释掉这句代码,Android 6.0上就只有一开始有个I帧,后面一直没有I帧了,全是P帧, MediaFormat.KEY_I_FRAME_INTERVAL设置不生效。Android 4、Android 5版本上这个设置都是生效的。 所以现在Android 6.0上要么只有第一个I帧,后面全是P帧, 要么全是I帧没有P帧, 这都不正常啊。

 

@mtdxc

Contributor

mtdxc commented on Nov 20, 2016

可以用软件方式强制让它生成关键帧么……

 

@jinlong0813

jinlong0813 commented on Nov 22, 2016

@DyncEric @mtdxc 知道怎么破吗,这个问题还比较严重啊

 

@jinlong0813 jinlong0813 changed the title from Android推送部分机型全是关键帧没有P帧 to Android 6.0推送全是I 帧 或者全是P帧 急急急 on Nov 22, 2016

@xiaoqunSun

xiaoqunSun commented on Nov 29, 2016

印象中webrtc的编码函数是可以设置生成关键帧的。
我给的建议是降 MediaFormat.KEY_I_FRAME_INTERVAL设成0,
然后自己数帧,每过几帧就强制编码器生成关键帧
也就是说自己实现KEY_I_FRAME_INTERVAL逻辑

 

@jinlong0813

jinlong0813 commented on Nov 29, 2016

@xiaoqunSun KEY_I_FRAME_INTERVAL设置成0,用什么方式强制获取I帧,是MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME吗?

 

@mtdxc

Contributor

mtdxc commented on Nov 30, 2016

V_H264Encoder::RequestKeyFrame

 

@liuxinpeister

liuxinpeister commented on Mar 30, 2017

我也碰到这个问题,最后找到的问题原因是colorformat不正确,在Android6.0上,如果使用的是硬编码器,我的是qcom的编码器,需要使用YUV420SP的colorformat,才能正常出关键帧,使用YUV420P不行。机型:小米4。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值