通过 firebase 数据库问题连接到 vimeo 视频
Connecting to vimeo video through firebase database issue
我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在 firebase 存储中,并通过将它们的链接放在 firebase 数据库中来访问它们。
经过进一步检查,我认为将它们存放在火力基地中会有点贵。所以我四处寻找其他选择,并认为 vimeo 存储视频可能更便宜。
我的问题是,当我将 url 插入我的 firebase 数据库时,无法查看 Vimeo 视频。但是任何 url 存储在 firebase 存储中的 firebase 视频都可以。我正在使用 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()
}
}
您不能将 link 用于 AVPlayer,它是网络 link,而不是媒体 link。要从视频 post 中检索媒体 link,您应该使用 VimeoNetworking or HCVimeoVideoExtractor。
如果你想使用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 上,因为 Video embedded video link 是 "session",这意味着它包含一个令牌,该令牌会在一段时间后过期时间.
希望对您有所帮助。
我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在 firebase 存储中,并通过将它们的链接放在 firebase 数据库中来访问它们。 经过进一步检查,我认为将它们存放在火力基地中会有点贵。所以我四处寻找其他选择,并认为 vimeo 存储视频可能更便宜。
我的问题是,当我将 url 插入我的 firebase 数据库时,无法查看 Vimeo 视频。但是任何 url 存储在 firebase 存储中的 firebase 视频都可以。我正在使用 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()
}
}
您不能将 link 用于 AVPlayer,它是网络 link,而不是媒体 link。要从视频 post 中检索媒体 link,您应该使用 VimeoNetworking or HCVimeoVideoExtractor。
如果你想使用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 上,因为 Video embedded video link 是 "session",这意味着它包含一个令牌,该令牌会在一段时间后过期时间.
希望对您有所帮助。