Swift 通过firebase数据库问题连接到vimeo视频

Swift 通过firebase数据库问题连接到vimeo视频,swift,firebase,firebase-realtime-database,swift4,Swift,Firebase,Firebase Realtime Database,Swift4,我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在firebase存储中,并通过将它们的链接放入firebase数据库来访问它们。 经进一步检查,我认为把它们存放在消防基地可能有点贵。因此,我四处寻找其他选择,并认为vimeo存储视频可能更便宜 我的问题是,当我将url插入firebase数据库时,无法查看Vimeo视频。但是任何存储在firebase存储中的firebase视频的url都可以使用。我正在使用avkit观看视频 我无法理解url对vimeo视频不起作用,但对fireba

我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在firebase存储中,并通过将它们的链接放入firebase数据库来访问它们。 经进一步检查,我认为把它们存放在消防基地可能有点贵。因此,我四处寻找其他选择,并认为vimeo存储视频可能更便宜

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

我无法理解url对vimeo视频不起作用,但对firebase存储的视频起作用

我的数据库如下所示:

它有视频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()
    }

}

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

如果要使用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上,因为视频嵌入视频链接是“会话”,这意味着它包含一个在一段时间后过期的令牌


希望这有帮助。

你能分享你的Vimeo视频URL吗?在firebase中,由于某种原因,它被关闭了,但我取出了64,它仍然不工作视频链接必须更改,是吗?HCVimeoVideoExtractor获取url。我把这个url插入firebase,它成功了。24小时后我回来了,但这个链接不起作用。所以我再次运行了hcvimeovidextractor,它生成了一个到我的视频的不同链接。旧的链接不起作用。因此,我将新链接插入firebase,它可以正常工作。我想知道我明天是否会回来,它会为我的视频生成一个新的链接吗?@pete800:我认为你不应该将提取的url放在Firebase上,因为它在一段时间后过期了。我建议您保持Firebase现在的状态,然后使用该web链接提取媒体URL并在客户端播放。我也更新了我的答案。