问题:
在某些设备上用MediaRecorder录像,设置比较低的码率时会失效
mMediaRecorder.setVideoEncodingBitRate(600_000);//设置低码率录像
实际设置600kbps,结果录制的视频码率高于600多kbps,在我的设备上(MT6769)实测总是高于800kbps,查看api文档,提示高版本会有录像最低码率限制。
解决方法:
通过查找系统源码,看到有设置编码模式的参数key,尝试了一下,竟然有效。
实测只有设置编码模式为固定码率(CBR)的时候才生效
String mode = "video-param-bitrate-mode="+MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR;
Class<? extends MediaRecorder> clz = mMediaRecorder.getClass();
try {
Method setParameter = clz.getDeclaredMethod("setParameter", String.class);
setParameter.setAccessible(true);
setParameter.invoke(mMediaRecorder, mode);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
网友评论