3

我正在尝试捕获 Android 设备屏幕的视频,但在某些三星设备上,我的视频被粉红色的失真覆盖覆盖。

检查以下三星 DOUS 和 Pixel XL 上的输出视频截图:

在三星 DUOS SM-G532F 上-Pixel XL 2(操作系统级别 27)

三星 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了其他一些配置文件,结果相同

4

1 回答 1

2

根据文档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)所需记录端点的类,并检查所需的分辨率是否包含在返回的列表中。

此处支持的端点类示例。

于 2018-07-14T21:00:08.120 回答