如何在 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】:

我能想到的最好方法是使用WKWebViewUIWebView。步骤:

    在视图控制器中添加所需大小的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&amp;title=1&amp;byline=1&amp;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】:

我设法实现这一点的方式是使用AVKitAVFoundation

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 在 vi​​tamio 播放器中播放视频?

如何在颤振中播放来自vimeo的私人视频

如何在 iPhone 的应用程序中播放 youtube/vimeo 视频

风格 vimeo 播放栏和播放按钮

如何从 vimeo 帐户检索视频源以在 exoplayer android 中播放?

304 在 iOS Cordova 应用上播放 html5 视频时未修改