背景
在一些低端机型,或者定制设备上,会出现硬编硬解黑屏/绿屏,有一种情况就是因为设备自身的编解码器分辨率不支持设置的分辨率导致的,此时需要去获取下设备的支持分辨率来验证是否是该问题导致的
如何获取当前手机支持的解码最大分辨率
每个手机下都有这样一个文件,/system/etc/media_codecs.xml (your path)。这是一个xml文件,可以直接看到MediaCodecs–>Decoders节点下的各个视频格式的支持情况,以**华为荣耀7x Android 8.0 **为例
获取解码视频的宽和高
代码语言:javascript复制//获得音视频的配置器MediaFormat
private static MediaFormat getFormat(String path,boolean isVideo) {
try {
MediaExtractor mediaExtractor = new MediaExtractor();
mediaExtractor.setDataSource(path);
int trackCount = mediaExtractor.getTrackCount();
for (int i = 0; i < trackCount; i ) {
MediaFormat trackFormat = mediaExtractor.getTrackFormat(i);
if (trackFormat.getString(MediaFormat.KEY_MIME).startsWith(isVideo ? "video/" :"audio/")) {
return mediaExtractor.getTrackFormat(i);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//单独获取宽高
MediaFormat newFormat = getFormat(path,true);
int videoWidth = newFormat.getInteger(MediaFormat.KEY_WIDTH);
int videoHeight = newFormat.getInteger(MediaFormat.KEY_HEIGHT);
//结合编码时获取宽高
MediaFormat newFormat = mMediaCodec.getOutputFormat();
int videoWidth = newFormat.getInteger(MediaFormat.KEY_WIDTH);
int videoHeight = newFormat.getInteger(MediaFormat.KEY_HEIGHT);
如果证实了确实是不支持的分辨率,可以告知系统层去处理该问题