我正在尝试捕获Android设备屏幕的视频,但是在某些三星设备上,我的视频被粉红色的失真覆盖遮盖了。
检查下面的三星DOUS和Pixel XL输出视频的屏幕截图:
三星DUOS G532F(API 23)-Pixel XL 2(API 27)
这是我设置媒体记录器的方式
MediaRecorder recorder = new MediaRecorder();
recorder.setVideoSource(SURFACE);
recorder.setOutputFormat(MPEG_4);
recorder.setVideoFrameRate(recordingInfo.frameRate);
recorder.setVideoEncoder(H264);
recorder.setVideoSize(recordingInfo.width, recordingInfo.height);
recorder.setVideoEncodingBitRate(3 * 1000 * 1000);
recordingInfo
private static final int DEFAULT_VIDEO_WIDTH = 540;
private static final int DEFAULT_VIDEO_HEIGHT = 960;
private static final int DEFAULT_VIDEO_FRAMERATE = 30;
camcorderProfile.videoFrameWidth = DEFAULT_VIDEO_WIDTH;
camcorderProfile.videoFrameHeight = DEFAULT_VIDEO_HEIGHT;
camcorderProfile.videoFrameRate = DEFAULT_VIDEO_FRAMERATE;
还有CamcorderProfile
CamcorderProfile camcorderProfile;
if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_TIME_LAPSE_QVGA)) {
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_QVGA);
} else {
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
}
我也尝试了CamcorderProfile.QUALITY_HIGH
和其他一些个人资料,结果是一样的
答案 0 :(得分:2)
根据documentation,CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_TIME_LAPSE_QVGA)
可能会返回true
以获得不支持的分辨率。
要确保在LEGACY模式下支持给定的分辨率,CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP
中给出的配置必须包含支持的输出尺寸下的分辨率。
CamCorderProfile(int cameraId, int quality);
例如:
CamcorderProfile.hasProfile(CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,
CamcorderProfile.QUALITY_TIME_LAPSE_QVGA)
然后,为了获取摄像机ID列表,以便获取受支持的摄像机ID列表,可以执行以下操作:
CameraManager cManager = (CameraManager) this.getApplicationContext().getSystemService(CAMERA_SERVICE);
推荐的检查方法是使用StreamConfigurationMap.getOutputSizes(Class)
和所需的记录端点的类,并检查所需的分辨率是否包含在返回的列表中。
受支持的端点类here的示例。