Swift - Firebase видео в изображение / слайд-шоу на uiTableView - PullRequest
0 голосов
/ 12 сентября 2018

Я на Swift 4 и пытаюсь отобразить на UITableView изображения и видео из моей базы данных / хранилища Firebase.

Я использовал этот тип функции, но он не работает

функция преобразования видео в uiImage:

  func getThumbnailFrom(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(0, 1), actualTime: nil)
            let thumbnail = UIImage(cgImage: cgImage)

            return thumbnail

        } catch let error {

            print("*** Error generating thumbnail: \(error.localizedDescription)")
            return nil

        }

    }

В моем cellforRowat я поместил эти строки:

 CatsListLine = self.CatsListlist[indexPath.row]

             print ("CatsListLine.CatsList_MovieOrImage = \(CatsListLine.CatsList_MovieOrImage)")
            // CatsListLine.CatsList_MovieOrImage = https://firebasestorage.googleapis.com/v0/b/catshistory-***a.appspot.com/o/Videos*****.mp4?alt=media&token=****-***-4**6-ac**1-6****05
            if CatsListLine.CatsList_MovieOrImage == "Image" {
            Services().getImage(CatsListLine.CatsList_Photo!) { (image) in
                if image != nil {
                                   cell.CatsList_ImageCatsList.image = image  }
                       }
            } else {
                //Movie thumbnail
                do {
      print ("CatsList_Photo = \(CatsListLine.CatsList_Photo!)")
                     let url = URL(string:CatsListLine.CatsList_Photo!)!
           let imageURL = getThumbnailFrom(path: url)

                     if imageURL != nil {

                        DispatchQueue.global(qos: .background).async {

                            cell.CatsList_ImageCatsList.image =  imageURL

                        }


                    } else {
                        print (« the image URL is nil)
                    }

Результат -> "URL изображения ноль"

Мои вопросы:

1) Я хотел бы просто извлечь один кадр из моего URL (https://firebasestorage.googleapis.com/v0/b/catshistory-*a.appspot.com/o/Videos*****.mp4?alt=media&token=****-*-46-ac1-6****05),, но каждая попытка сделать это была безуспешной (даже при этот функционал я пробовал)

func imageFromVideo(url: URL, at time: TimeInterval) -> UIImage? {
    let asset = AVURLAsset(url: url)

    let assetIG = AVAssetImageGenerator(asset: asset)
    assetIG.appliesPreferredTrackTransform = true
    assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels

    let cmTime = CMTime(seconds: time, preferredTimescale: 60)
    let thumbnailImageRef: CGImage
    do {
        thumbnailImageRef = try assetIG.copyCGImage(at: cmTime, actualTime: nil)
    } catch let error {
        print("Error: \(error)")
        return nil
    }

    return UIImage(cgImage: thumbnailImageRef)
}

2) Если это возможно, я хотел бы, чтобы в моем UITableview был небольшой предварительный просмотр моего видео (например, 5-секундное зацикливание видео). Это возможно, не занимая слишком много памяти?

Спасибо за вашу помощь!

...