Swift 通过firebase数据库问题连接到vimeo视频
我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在firebase存储中,并通过将它们的链接放入firebase数据库来访问它们。 经进一步检查,我认为把它们存放在消防基地可能有点贵。因此,我四处寻找其他选择,并认为vimeo存储视频可能更便宜 我的问题是,当我将url插入firebase数据库时,无法查看Vimeo视频。但是任何存储在firebase存储中的firebase视频的url都可以使用。我正在使用avkit观看视频 我无法理解url对vimeo视频不起作用,但对firebase存储的视频起作用 我的数据库如下所示: 它有视频1试图调用vimeo视频(不起作用),视频2链接到firebase视频(起作用) 我的代码是: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
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并在客户端播放。我也更新了我的答案。