Получить эскизы для массива видео - PullRequest
0 голосов
/ 12 июня 2019

Я нашел несколько способов получить миниатюру для видео, используя AVAsset Однако я хочу получить миниатюры для массива видео.Я заполняю массив из папки документов приложений на iPad.Вот как я получаю массив:

    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 следующим образом:

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cellA = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! VideoViewCell
    cellA.VideoCellLabel.text = videoArray[indexPath.item]
    gradientLayer = CAGradientLayer()
    gradientLayer.frame = cellA.contentView.bounds
    gradientLayer.colors = [#colorLiteral(red: 0.5137254902, green: 0.3764705882, blue: 0.7647058824, alpha: 1).cgColor, #colorLiteral(red: 0.1803921569, green: 0.7490196078, blue: 0.568627451, alpha: 1).cgColor]

    cellA.contentView.layer.insertSublayer(gradientLayer, at: 0)

    return cellA
}

Как бы получить миниатюру для каждого видео и отображенияэто в соответствующей ячейке?

1 Ответ

0 голосов
/ 12 июня 2019

Попробуйте код ниже:

//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

Используйте функцию ниже для создания изображений из видео в папке 'Videos'

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)
}

Вы должны позаботиться о дополнительных значениях в коде в соответствии с вашими требованиями сценариев.После извлечения всех миниатюрных изображений вы можете напрямую установить изображения для ячеек в табличном представлении.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...