用自己的sdk,在视频采集或者播放的过程中可能屏幕上会出现绿条,这个时候通常是预览或者编码的分辨率跟手机支持的分辨率不匹配,导致系统用绿色填充,这样只需要做一下筛选相机分辨率,设置最接近的分辨率给预览或者编码就好啦
public Camera.Size onPreviewSizeSelected(List<Camera.Size> list) {
/**
* You should choose a suitable size to avoid image scale
* eg: If streaming size is 1280 x 720, you should choose a camera preview size >= 1280 x 720
*/
Camera.Size size = null;
if (list != null) {
VideoEncodingSize encodingSize = getVideoEncodingSize(mCameraConfig);
//如果存在相同比例直接返回
for(Camera.Size s : list){
if((s.width == encodingSize.width) && (s.height == encodingSize.height)){
return s;
}
}
//不存在时进行遍历寻找最接近尺寸
float reqRatio = ((float)encodingSize.width)/encodingSize.height;
float listRatio,minRatio;
float maxRatio=10000.00f;//值不唯一,[2,+∞]
for (Camera.Size s : list) {//预览预览数据列表>设置的数据
if (s.width >= encodingSize.width && s.height >= encodingSize.height) {
listRatio = ((float)s.width)/s.height;
minRatio = Math.abs(listRatio-reqRatio);
if(minRatio<maxRatio) {
size = s;
maxRatio = minRatio;
}
}
}
}
return size;
}