通过Firebase数据库连接到Vimeo视频问题

时间:2019-02-10 19:23:47

标签: swift firebase firebase-realtime-database swift4

我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在Firebase存储器中,并通过将其链接放在Firebase数据库中进行访问。 经过进一步检查,我认为将它们存放在火场中会有点贵。所以我四处寻找替代选择,并发现vimeo可能更便宜地存储视频。

我的问题是,当我将URL插入Firebase数据库中时,无法观看Vimeo视频。但是,任何存储在Firebase存储器中的Firebase视频的URL都可以使用。我正在使用avkit观看视频。

我无法理解该网址不适用于vimeo视频,但适用于Firebase存储的视频。

我的数据库如下所示: enter image description here

它的视频1试图调用vimeo视频(不起作用),视频2链接到可以正常工作的firebase视频。

我的代码是:

import UIKit
import AVKit
import AVFoundation
import Firebase
import FirebaseDatabase

 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {



var table = [Videos]()
var ref: DatabaseReference!

@IBOutlet weak var Tableview: UITableView!



override func viewDidLoad() {
    super.viewDidLoad()

    ref = Database.database().reference().child("videos")
    ref.observe(DataEventType.value, with: {(snapshot) in
        if snapshot.childrenCount > 0 {
            self.table.removeAll()

            for video in snapshot.children.allObjects as! [DataSnapshot] {

                let Object = video.value as? [String: AnyObject]
                let Title =  Object?["Title"]
                let videolink = Object?["link"]

                //let video = Videos(Title: Title as? String, link: video as? String)
                let video = Videos(Title: Title as? String, link: videolink as? String)
                self.table.append(video)

                self.Tableview.reloadData()
            }
        }
    })
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return table.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = Tableview.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
    let video: Videos

    video = table[indexPath.row]
    cell.titleLabel.text = video.Title

    return cell

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    guard let videoURL = URL(string: table[indexPath.row].link!) else {
        return
    }

    let player = AVPlayer(url: videoURL)

    let controller = AVPlayerViewController()
    controller.player = player

    present(controller, animated: true) {
        player.play()
    }

}

1 个答案:

答案 0 :(得分:1)

您不能将该链接用于AVPlayer,它是Web链接,而不是媒体链接。要从视频帖子中检索媒体链接,应使用VimeoNetworkingHCVimeoVideoExtractor

如果要使用HCVimeoVideoExtractor,请在此处输入代码:

let url = URL(string: "https://vimeo.com/[video_id]")!
HCVimeoVideoExtractor.fetchVideoURLFrom(url: url, completion: { ( video:HCVimeoVideo?, error:Error?) -> Void in                

if let err = error { return }
guard let vid = video else { return }

if let videoURL = vid.videoURL[.Quality1080p] {
    let player = AVPlayer(url: videoURL)
    let playerController = AVPlayerViewController()
    playerController.player = player
    self.present(playerController, animated: true) {
        player.play()
    }
}                            
})

您无法检索提取的URL并将其放在Firebase上,因为视频嵌入式视频链接是“会话”,这意味着其中包含的令牌会在一段时间后失效。

希望这会有所帮助。