Swift实现点击按钮打开视频录制器但代码仅启动拍照功能的解决方案问询
问题原因
你的代码没有指定媒体类型,UIImagePickerController默认仅捕获静态图片,所以只会弹出拍照界面。
修改方案
只需要添加mediaTypes属性配置指定捕获视频即可,修改后的完整代码如下:
import MobileCoreServices // 必须导入该框架才能使用视频类型常量 @IBAction func uploadVideoButton(_ sender: UIButton) { // 先判断设备是否支持相机录制视频,避免闪退 guard UIImagePickerController.isSourceTypeAvailable(.camera), let availableMediaTypes = UIImagePickerController.availableMediaTypes(for: .camera), availableMediaTypes.contains(kUTTypeMovie as String) else { // 不支持的场景可自行添加弹窗提示用户 return } let vc = UIImagePickerController() vc.sourceType = .camera // 指定媒体类型为视频 vc.mediaTypes = [kUTTypeMovie as String] vc.allowsEditing = true vc.delegate = self // 可选配置:设置最大录制时长、视频质量 vc.videoMaximumDuration = 15 // 单位为秒,这里设置最长录制15秒 vc.videoQuality = .typeMedium present(vc, animated: true) }
额外注意事项
- 必须在项目的Info.plist中添加两项权限声明,否则会触发崩溃:
NSCameraUsageDescription:相机使用权限说明NSMicrophoneUsageDescription:麦克风使用权限说明(录制视频需要同步收音,缺少该权限会导致录制无声音甚至崩溃)
- 实现
UIImagePickerControllerDelegate代理方法时,视频的返回结果可以从info[.mediaURL]中拿到本地存储的临时文件地址,对应处理即可。
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

