swift4 从相册中获取视频数组

注意访问权限

/// 从相册中获取视频数组----**-
    private func getVideosFromAlbum(result: @escaping (([ContestChooseVideo.Video]) -> Void)){
        var videos: [ContestChooseVideo.Video] = []
        // 获取所有资源的集合,并按资源的创建时间排序如果不写就是乱序,并不好使
//        let options = PHFetchOptions()
//        options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
        
        let option = PHVideoRequestOptions()
        option.version = .current
        option.deliveryMode = .automatic
        option.isNetworkAccessAllowed = true
        
        let manager = PHImageManager.default()
        let assets: PHFetchResult = PHAsset.fetchAssets(with: .video, options: nil)
        
        var tempCount = assets.count

        // 获取视频
        for i in 0..<assets.count {
            
            let asset = assets.object(at: i)
            manager.requestAVAsset(forVideo: asset, options: option) { (avasset, audioMix, array) in
                // 为了防止多次回调
                tempCount = tempCount - 1
                
                guard let urlAsset: AVURLAsset = avasset as? AVURLAsset else {
                    if tempCount == 0 {
                       showFailure("获取视频失败")
                       result([])
                    }
                    
                    return
                }
            
                var model = ContestChooseVideo.Video()
                model.asset = asset
                model.avSet = avasset
                model.videoUrl = urlAsset.url
                model.image = UIImage.thumbnailImageForVideo(videoURL: urlAsset.url, time: 0.5)
                model.duration = CMTimeGetSeconds(urlAsset.duration)
                model.creationDate = asset.creationDate
                videos.append(model)
                
                if tempCount == 0 {
                    // 把视频按照日期排序
                    let newVideos = videos.sorted(by: { (video1, video2) -> Bool in
                        guard let date1 = video1.creationDate,
                            let date2 = video2.creationDate else {
                            return true
                        }
                        return date1 < date2
                        })
                    result(newVideos)
                }
                
            }
        }
    }

model:

enum ContestChooseVideo { }

extension ContestChooseVideo {
    struct Video {
        var image: UIImage?             // 视频封面
        var duration: Double?           // 视频时长
        var asset: PHAsset?             // 操作信息的对象
        var videoUrl: URL?              // 视频本地地址
        var avSet: AVAsset?             // 剪辑控制
        var creationDate: Date?         // 视频创建时间
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值