如何在 iOS Swift 中播放 Vimeo 视频?
Posted
技术标签:
【中文标题】如何在 iOS Swift 中播放 Vimeo 视频?【英文标题】:How to play Vimeo videos in iOS Swift? 【发布时间】:2017-04-07 16:46:14 【问题描述】:我创建了一个使用 Vimeo 播放视频的 ios 应用。我想知道在 iOS Swift 中显示 Vimeo 视频的最佳方法是什么。
我已经修复了,当点击图像时,占位符图像将被隐藏,但视频不会直接播放。除此之外,所有 Vimeo 界面元素都是可见的。我知道你应该把功劳归功于 Vimeo,所以不用说我在视频底部显示了一个 Vimeo 标志。是否有可能隐藏网络播放器的所有 Vimeo 元素?
我可以找到更多信息的来源会很好。 如果还有任何问题,请告诉我! 提前致谢。
【问题讨论】:
您考虑过还是正在使用a SDK to play Vimeo videos?还是您只是使用 API 来获取电影数据? 见-> github.com/satishVekariya/LXVimeoKit 【参考方案1】:您可以使用这个 Swift 库 HCVimeoVideoExtractor 提取 mp4 视频 URL,然后使用 AVPlayer 播放它。只需传递 Vimeo 视频链接或视频 ID。
let url = URL(string: "https://vimeo.com/254597739")!
HCVimeoVideoExtractor.fetchVideoURLFrom(url: url, completion: ( video:HCVimeoVideo?, error:Error?) -> Void in
if let err = error
print("Error = \(err.localizedDescription)")
return
guard let vid = video else
print("Invalid video object")
return
print("Title = \(vid.title), url = \(vid.videoURL), thumbnail = \(vid.thumbnailURL)")
if let videoURL = vid.videoURL[.Quality540p]
let player = AVPlayer(url: videoURL)
let playerController = AVPlayerViewController()
playerController.player = player
self.present(playerController, animated: true)
player.play()
)
【讨论】:
这个库只是解析https://player.vimeo.com/video/[video ID]/config
返回的JSON。【参考方案2】:
我能想到的最好方法是使用WKWebView
或UIWebView
。步骤:
在视图控制器中添加所需大小的WKWebView
。
从 Vimeo 原始视频中获取视频嵌入代码(点击视频下方的“分享”按钮可找到嵌入代码。)
单击弹出的 Vimeo 共享表上的“更多选项”以配置嵌入视频的外观。
使用以下代码示例嵌入视频:
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
self.view.addSubview(webView)
let embedhtml="<html><head><style type=\"text/css\">body background-color: transparent;color: black;</style><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes\"/></head><body style=\"margin:0\"><div><iframe src=\"//player.vimeo.com/video/139785390?autoplay=1&title=1&byline=1&portrait=0\" width=\"640\" height=\"360\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div></body></html>"
let url = URL(string: "https://")!
webView.loadHTMLString(embedHTML as String, baseURL:url )
webView.contentMode = UIViewContentMode.scaleAspectFit
【讨论】:
您好 Nitin,您能否告诉我您托管此视频的 vimeo 帐户类型,因为标题共享按钮等没有显示在上面? 我刚刚检查了 vimeo 嵌入链接,代码自 2016 年以来没有改变。我没有完全明白你的问题?我无法访问当时使用的帐户,但它是一个 Vimeo Pro 用户帐户。在 vimeo 中,我认为视频上传者可以选择使视频不可嵌入,如果这是你所坚持的。【参考方案3】:我设法实现这一点的方式是使用AVKit
和AVFoundation
:
let url: URL! = URL(string: "https://01-lvl3-pdl.vimeocdn.com/01/3355/3/91775232/243724947.mp4?expires=1498547278&token=073f7b03877a8ed3c8029")
let player: AVPlayer = AVPlayer(url: url)
let controller: AVPlayerViewController = AVPlayerViewController()
controller.view.translatesAutoresizingMaskIntoConstraints = false
controller.player = player
// Add `controller` to your view somehow
player.play()
诀窍在于您不能使用显示网站的链接(在我的情况下为 https://vimeo.com/91775232)。
我必须检查来源并找到视频的实际 URL(即:https://01-lvl3-pdl.vimeocdn.com/01/3355/3/91775232/243724947.mp4?expires=1498547278&token=073f7b03877a8ed3c8029)。
一旦我使用它,一切正常。
【讨论】:
嘿,我从哪里获得 Vimeo 中视频的源链接? 这行不通 - vimeocdn URL 不能直接使用:您在此处发布的完整 URL 具有“expires”属性,过期后会给出403 Forbidden
错误。
【参考方案4】:
对于 Swift 4,我在 storyboard 中使用了 WKWebView 并实现了以下代码:
import WebKit
@IBOutlet 弱变量 webKitView: WKWebView!
在 WebView 中播放视频:
if yourVimeoLink.lowercased().contains("vimeo.com")
let url: NSURL = NSURL(string: yourVimeoLink)
webKitView.contentMode = UIViewContentMode.scaleAspectFit
webKitView.load(URLRequest(url: url as URL))
希望能有所帮助! :)
【讨论】:
【参考方案5】:import AVFoundation
import AVKit
let videoURL = "https://vimeo.com/blablabla/whatevertheURLis"
func playExternalVideo()
let videoURL = NSURL(string: self.videoURL)
let player = AVPlayer(url: videoURL as! URL)
let playerViewController = AVPlayerView()
playerViewController.player = player
确保添加 AVKit Player View 并给它一个 AVPlayerView 类。至于 Vimeo 交易,它应该在没有 Vimeo 的 UI 控件的情况下运行。如需更多帮助,请观看此视频。 https://www.youtube.com/watch?v=fhD7hXrpExE
【讨论】:
这些是使用 AVPlayer 播放视频文件的一般说明。这不适用于网络流式传输 Vimeo 视频。 我几乎可以肯定 Apple 会处理流媒体,但如果我错了,一定要纠正我。 @尼丁 是的,Apple 的 AV 播放器库可以流式传输内容。但是,如果我没记错的话,Vimeo 会带来额外的限制。您是否专门尝试过使用这种方法播放 Vimeo 视频? 你可能是对的。我还没有尝试过使用 Vimeo。我需要对此做一些研究。 @尼丁以上是关于如何在 iOS Swift 中播放 Vimeo 视频?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 vimeo 和 facebook 在 vitamio 播放器中播放视频?
如何在 iPhone 的应用程序中播放 youtube/vimeo 视频