我试图捕捉一段android设备屏幕的视频,但是在一些三星设备上,我用粉色的失真覆盖层屏蔽了视频。
查看以下Samsung Dous和Pixel XL上的输出视频截图:
android - 屏幕记录输出在某些三星设备上失真-LMLPHP -AA>
三星Duos G532F(API 23)-像素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和其他一些配置文件,结果是一样的

最佳答案

根据documentationCamcorderProfile.hasProfile(CamcorderProfile.QUALITY_TIME_LAPSE_QVGA)可能返回true以获得不支持的分辨率。
为了确保在传统模式下支持给定的分辨率,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

10-08 15:28