Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)
(本文代码已升级至Swift4)
默认情况下,UIImagePickerController 打开系统“照片”后允许用户选择所有的媒体文件(不管是照片还是录像),我们可以通过 mediaTypes 属性设置。让其只显示视频录像。
1,样例说明
(1)下面样例点击“选择视频”按钮后,会自动打开相册选择视频。
(2)由于设置了 mediaTypes,所有的图片都会过滤掉,只留下视频选择。
(3)选择完毕,系统会自动将视频复制一个到应用的 tmp 文件夹(临时文件夹)下。我们可以直接对这个文件进行操作,而不会影响到系统相册中的原视频。
(4)本样例选择后,就直接使用 AVPlayerViewController 进行播放。
2,效果图
可以看到选择后,视频会被复制到 tmp 目录下:
选择完毕后自动播放该视频:
3,样例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import UIKit import MobileCoreServices import AssetsLibrary import AVKit import AVFoundation class ViewController : UIViewController , UIImagePickerControllerDelegate , UINavigationControllerDelegate { override func viewDidLoad() { super .viewDidLoad() //创建一个ContactAdd类型的按钮 let button: UIButton = UIButton (type:.system) button.frame = CGRect (x:10, y:150, width:100, height:30) button.setTitle( "选择视频" , for :.normal) button.addTarget( self , action:#selector(selectVideo), for :.touchUpInside) self .view.addSubview(button) } //选择视频 @objc func selectVideo() { if UIImagePickerController .isSourceTypeAvailable(.photoLibrary) { //初始化图片控制器 let imagePicker = UIImagePickerController () //设置代理 imagePicker.delegate = self //指定图片控制器类型 imagePicker.sourceType = .photoLibrary //只显示视频类型的文件 imagePicker.mediaTypes = [kUTTypeMovie as String ] //不需要编辑 imagePicker.allowsEditing = false //弹出控制器,显示界面 self .present(imagePicker, animated: true , completion: nil ) } else { print ( "读取相册错误" ) } } //选择视频成功后代理 func imagePickerController(_ picker: UIImagePickerController , didFinishPickingMediaWithInfo info: [ String : Any ]) { //获取视频路径(选择后视频会自动复制到app临时文件夹下) let videoURL = info[ UIImagePickerControllerMediaURL ] as ! URL let pathString = videoURL.relativePath print ( "视频地址:\(pathString)" ) //图片控制器退出 self .dismiss(animated: true , completion: {}) //播放视频文件 reviewVideo(videoURL) } //视频播放 func reviewVideo(_ videoURL: URL ) { //定义一个视频播放器,通过本地文件路径初始化 let player = AVPlayer (url: videoURL) let playerViewController = AVPlayerViewController () playerViewController.player = player self .present(playerViewController, animated: true ) { playerViewController.player!.play() } } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
UIImagePickerControllerMediaURL 这个值是空的 但是UIImagePickerControllerReferenceURL有值
拿不到视频