我正在构建一个包含多个视频文件的应用程序。我最初将它们存储在Firebase存储器中,并通过将其链接放在Firebase数据库中进行访问。 经过进一步检查,我认为将它们存放在火场中会有点贵。所以我四处寻找替代选择,并发现vimeo可能更便宜地存储视频。
我的问题是,当我将URL插入Firebase数据库中时,无法观看Vimeo视频。但是,任何存储在Firebase存储器中的Firebase视频的URL都可以使用。我正在使用avkit观看视频。
我无法理解该网址不适用于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()
}
}
答案 0 :(得分:1)
您不能将该链接用于AVPlayer,它是Web链接,而不是媒体链接。要从视频帖子中检索媒体链接,应使用VimeoNetworking或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上,因为视频嵌入式视频链接是“会话”,这意味着其中包含的令牌会在一段时间后失效。
希望这会有所帮助。