如何从Firebase数据库/存储中正确下载视频以在表格视图中使用?

时间:2018-06-03 22:30:51

标签: ios swift firebase avfoundation firebase-storage

我正在尝试从Firebase存储中下载视频,并将这些视频放入“表视图/集合视图单元格”中并使用循环自动播放。但是,当视频下载时,它不会显示整个视频(有时),并且每次滚动表格视图时都会重新下载数据。如何正确下载视频并在tableView中播放它们而不是每次都下载它们?

这是我从单元类中的firebase存储中下载视频的地方。

didSet {
        setupProfileImage()
        self.nameLabel.text = user?.username

        guard let videoString = post?.videoURL else { return }
        guard let videoTitle = post?.videoTitle else { return }
        guard let videoURL = URL(string: videoString) else { return }
        self.videoTitle.text = videoTitle
        let storageRef = Storage.storage().reference(forURL: videoString)
        storageRef.getMetadata { (metadata, err) in
            if let error = err {
                print("Error downloading metadata: \(error)")
                return
            }
            DispatchQueue.main.async {
                guard let downloadUrl = metadata?.downloadURL()?.absoluteURL else { return }
                let asset = AVURLAsset(url: downloadUrl)
                let item = AVPlayerItem(asset: asset)
                self.player = AVPlayer(playerItem: item)
                self.videoView.layer.addSublayer(self.videoPlayerLayer)
                self.videoTitle.text = videoTitle
                self.videoPlayerLayer.player = self.player
                self.videoPlayerLayer.frame = CGRect(x: 0, y: 0, width: self.videoView.frame.width, height: self.videoView.frame.width)
                self.player?.play()
            }
            NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: .main) { _ in
                self.player?.seek(to: kCMTimeZero)
                self.player?.play()
            }
        }
    }

0 个答案:

没有答案