三星S10使用CameraX/Camera2无法录制60fps视频求助
问题解决:三星S10 CameraX无法录制UHD 60fps视频
三星S10原生相机可录制UHD 60fps视频,但CameraX默认配置无法触发该模式,核心原因是QualitySelector未指定高帧率过滤规则,以下是具体调整方案:
1. 显式指定60fps帧率范围
修改QualitySelector配置,强制优先匹配支持60fps的UHD规格:
// 定义60fps的帧率范围 Range<Integer> targetFpsRange = new Range<>(60, 60); QualitySelector qualitySelector = QualitySelector.fromOrderedList( Arrays.asList(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD), FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)) // 添加帧率过滤条件,优先选择支持60fps的配置 .setFrameRateRange(targetFpsRange) .setDynamicRange(DynamicRange.SDR);
2. 适配Recorder编码配置
60fps的UHD视频需要更高比特率支持,调整Recorder的比特率参数:
Recorder.Builder recorderBuilder = new Recorder.Builder() .setExecutor(getExecutor()) .setQualitySelector(qualitySelector) // 80Mbps是UHD 60fps的推荐比特率,可根据需求调整 .setTargetVideoEncodingBitRate(80000000);
3. 确认摄像头选择正确性
确保选中支持UHD高帧率的后置主摄像头:
// 精确选择支持超高清录制的后置摄像头 CameraSelector cameraSelector = new CameraSelector.Builder() .requireCapability(CameraSelector.CAPABILITY_ULTRA_HIGH_RESOLUTION) .requireLensFacing(CameraSelector.LENS_FACING_BACK) .build();
4. 验证设备支持性(可选)
通过Camera2 API确认设备是否真的支持UHD 60fps配置:
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { String mainCameraId = cameraManager.getCameraIdList()[0]; CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(mainCameraId); StreamConfigurationMap configMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); // 检查UHD尺寸对应的帧率范围 Size uhdSize = new Size(3840, 2160); Range<Integer>[] fpsRanges = configMap.getHighSpeedVideoFpsRangesFor(uhdSize); for (Range<Integer> range : fpsRanges) { if (range.getUpper() >= 60) { Log.d("CameraSupport", "设备支持UHD 60fps"); } } } catch (CameraAccessException e) { e.printStackTrace(); }
核心原理
原生相机直接调用Camera2的高帧率视频模式,而CameraX的默认QualitySelector只会匹配30fps的常规配置,显式设置帧率范围后,才能触发对高帧率UHD规格的匹配逻辑。
内容的提问来源于stack exchange,提问作者CoDevloop
相关产品推荐
相关产品推荐

