android mediacodec 在某些机子上无法编码的问题

本文介绍使用MediaCodec进行视频编码时遇到的问题及解决方案。在特定型号手机上,设置的比特率与实际编码的比特率不符。通过调试发现,设置MediaFormat.KEY_FRAME_RATE参数为与输入帧率相同值后,问题得以解决。

以下是使用mediacodec编码的方法:

       MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, config.getWidth(), config.getHeight());

        format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
                MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        format.setInteger(MediaFormat.KEY_BIT_RATE,config.getBitrate());
        format.setInteger(MediaFormat.KEY_FRAME_RATE, config.getHumanFPS());
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
 
        if (VERBOSE) Log.d(TAG, "format: " + format);

        mEncoder = MediaCodec.createEncoderByType(MIME_TYPE);

        mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
        mInputSurface = mEncoder.createInputSurface();
        mEncoder.start();

  

但是在VIVO X5 PRO D手机上在输出数据的时候,birate完全失效,编码出的bitrate跟设置的不一致。

最后经过调试发现是MediaFormat.KEY_FRAME_RATE 参数不能随意设置,必须设置成跟输入的fps一样才可以。

 

 

 

 

转载于:https://www.cnblogs.com/kkia/p/5124247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值