2014-09-29 67 views
2

我使用MediaCodec编码摄像头的视频设置:什么是有效的比特率用于MediaCodec

MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height); 
     format.setInteger(MediaFormat.KEY_BIT_RATE, 250000); 
     format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1); 
     format.setInteger(MediaFormat.KEY_FRAME_RATE, 15); 
     format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); 
     _mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 

什么我发现的是,根据该决议,我给它有一些最低有效比特率来设置。如果我设置了低于这个数值的比特率,它完全被忽略。如果我将比特率设置在这个不可见的阈值之上,它将按预期工作。我想要做的是查询我可以为KEY_BIT_RATE设置的最小比特率是用于任何给定的分辨率。当我设置一个没有任何影响的比特率时,不会引发任何错误或任何错误。

回答

1

最小比特率是谷歌对供应商需要支持的分辨率要求的一部分:https://source.android.com/compatibility/android-cdd.pdf。 看5.2

对于其他决议行为是未定义的。未列在文档中的解决方案还可能引入其他意外问题,因为未包含在Google认证测试(CTS)中,并且不能保证设备供应商使其正常工作

并且在android中没有API来检查最小支持比特率精确分辨率

+2

这似乎并没有真正回答这个问题。 CDD表示设备必须支持以最低比特率进行编码,但这并不意味着设备不允许低于最低要求的比特率。最低要求在那里,因此可以保证达到一定的质量水平。 – cyngus 2015-06-27 01:24:59

+0

同意该文件描述了对硬件设备的要求,而不是对应用程序的要求。 – Ernest 2016-01-19 11:40:14

0

合理限制内的任何比特率都是有效的。您可以使用在线视频比特率calculator来计算所需的比特率。最小阈值可以通过编解码器的特定实现来设置。