Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)
作者:hangge | 2016-07-08 10:00
(本文代码已升级至Swift4)
默认情况下,UIImagePickerController 打开系统“照片”后允许用户选择所有的媒体文件(不管是照片还是录像),我们可以通过 mediaTypes 属性设置。让其只显示视频录像。
1,样例说明
(1)下面样例点击“选择视频”按钮后,会自动打开相册选择视频。
(2)由于设置了 mediaTypes,所有的图片都会过滤掉,只留下视频选择。
(3)选择完毕,系统会自动将视频复制一个到应用的 tmp 文件夹(临时文件夹)下。我们可以直接对这个文件进行操作,而不会影响到系统相册中的原视频。
(4)本样例选择后,就直接使用 AVPlayerViewController 进行播放。
2,效果图

可以看到选择后,视频会被复制到 tmp 目录下:


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()
}
}
全部评论(2)
UIImagePickerControllerMediaURL 这个值是空的 但是UIImagePickerControllerReferenceURL有值
站长回复:我又测试了下,UIImagePickerControllerMediaURL是可以取到东西的,不知道你那边是什么情况。
拿不到视频
站长回复:文章代码我已更新成Swift4了,你可以再试下。