You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将通过UIImagePicker调用的原生相机拍摄质量调整为4K?

现有代码问题根源

  1. UIImagePickerController的videoQuality属性的.typeHigh枚举值并未绑定4K分辨率,在绝大多数iOS设备上该值默认对应1920x1080/30fps的视频规格,无法通过该参数直接触发4K录制。
  2. 从iOS 13开始videoExportPreset正式被弃用,系统不再响应该属性的配置,所以你原来设置AVAssetExportPreset3840x2160的逻辑完全无效。

解决方案

方案一:依赖系统配置的UIImagePicker兼容方案

仅作为临时过渡方案,可控性极低:

  • 引导用户提前在系统「设置-相机-录制视频」选项中,手动选择4K分辨率的录制规格,UIImagePicker默认会复用系统相机的全局配置,此时再使用.typeHigh参数有可能拿到4K视频。
  • 该方案完全依赖用户的系统设置,无法保证所有用户都能输出4K视频,仅适合小范围内部测试使用。

方案二:使用AVFoundation自定义相机(推荐)

这是实现稳定4K录制的唯一可靠方案,完全可控不受系统全局配置影响,实现步骤如下:

  • 首先导入AVFoundation框架,创建AVCaptureSession实例,指定会话预设为4K规格:
let captureSession = AVCaptureSession()
// 优先设置4K预设
if captureSession.canSetSessionPreset(.hd4K3840x2160) {
    captureSession.sessionPreset = .hd4K3840x2160
} else {
    // 设备不支持4K时降级到1080P
    captureSession.sessionPreset = .hd1920x1080
}
  • 配置相机输入、音频输入:获取后置/前置相机设备,创建AVCaptureDeviceInput实例,添加到会话中,同时添加音频输入实现有声录制。
  • 添加输出源:如果需要直接录制视频文件,使用AVCaptureMovieFileOutput作为输出,可直接输出指定分辨率的视频文件;如果需要逐帧处理画面,使用AVCaptureVideoDataOutput。
  • 配置预览层:创建AVCaptureVideoPreviewLayer绑定到会话,添加到你的自定义界面的View层上,实现拍摄画面实时预览。
  • 自定义录制交互:自己实现开始录制、结束录制、切换摄像头等交互按钮,调用输出源对应的启停方法即可。

注意事项

  • 提前在Info.plist中添加NSCameraUsageDescription(相机权限)和NSMicrophoneUsageDescription(麦克风权限)的申请描述,否则应用会在调用相机时直接崩溃。
  • 所有AVFoundation的会话配置、启停操作都建议放到子线程执行,避免阻塞主线程导致UI卡顿。

内容的提问来源于stack exchange,提问作者Ellyn_Philip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:21:03