获取视频数组的缩略图

时间:2019-06-12 06:07:54

标签: swift ipad video uicollectionview avasset

我找到了几种使用ramVectorTable获取视频缩略图的方法,但是我想获取一系列视频的缩略图。我正在从iPad上的应用程序文档文件夹中填充阵列。这就是我得到数组的方式:

AVAsset

我正在像这样在 func listVideoFiles(){ let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! let videoFolderPath = documentDirectoryPath.appending("/Videos") let videoFiles = FileManager.default.enumerator(atPath: videoFolderPath) while let file = videoFiles?.nextObject() { videoArray.append("\(file)") print("") } if videoFiles == nil { videoArray.append("No Videos Found") print("No Files") } } 中显示数组:

collectionView

如何获取每个视频的缩略图并将其显示在相应的单元格中?

1 个答案:

答案 0 :(得分:0)

尝试以下代码:

//Get the document directory path
    let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
            let videoFolderPath = documentDirectoryPath.appending("/Videos/")

//Generate the document directory enumerator
let videos = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last!.appendingPathComponent("Videos")
        let videoFilesEnumerator = FileManager.default.enumerator(atPath: videos.path).   //This will contain all the files in the videos folder

使用以下功能从“视频”文件夹中的视频生成图像

func generateThumbnail(path: URL) -> UIImage? {
        do {
            let asset = AVURLAsset(url: path, options: nil)
            let imgGenerator = AVAssetImageGenerator(asset: asset)
            imgGenerator.appliesPreferredTrackTransform = true
            let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(value: 0, timescale: 1), actualTime: nil)
            let thumbnail = UIImage(cgImage: cgImage)
            return thumbnail
        } catch let error {
            print("*** Error generating thumbnail: \(error.localizedDescription)")
            return nil
        }
    }

您可以将图像数组作为属性(在此处为“ thumbImages”)并按如下所示填充该数组:

while let element = videoFilesEnumerator?.nextObject() as? String {
     let thumbImage = self.generateThumbnail(path: videos.appendingPathComponent(element))
     thumbImages.append(newImage)
}

根据方案要求,您必须注意代码中的可选值。提取所有缩略图图像后,您可以将图像直接设置为表格视图中的单元格。

希望这会有所帮助。