【问题标题】:How to play Vimeo videos in iOS Swift?如何在 iOS Swift 中播放 Vimeo 视频?
【发布时间】:2017-04-07 16:46:14
【问题描述】:

我创建了一个使用 Vimeo 播放视频的 iOS 应用。我想知道在 iOS Swift 中显示 Vimeo 视频的最佳方法是什么。

我已经修复了,当点击图像时,占位符图像将被隐藏,但视频不会直接播放。除此之外,所有 Vimeo 界面元素都是可见的。我知道你应该把功劳归功于 Vimeo,所以不用说我在视频底部显示了一个 Vimeo 标志。是否有可能隐藏网络播放器的所有 Vimeo 元素?

我可以找到更多信息的来源会很好。 如果还有任何问题,请告诉我! 提前致谢。

【问题讨论】:

标签: ios swift vimeo


【解决方案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。步骤:

  1. 在视图控制器中添加所需大小的WKWebView。

  2. 从 Vimeo 原始视频中获取视频嵌入代码(点击视频下方的“分享”按钮可找到嵌入代码。)

  3. 单击弹出的 Vimeo 共享表上的“更多选项”以配置嵌入视频的外观。

  4. 使用以下代码示例嵌入视频:

    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】:

我设法实现这一点的方式是使用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。我需要对此做一些研究。 @尼丁
    猜你喜欢
    • 2012-01-08
    • 2016-03-16
    • 1970-01-01
    • 2014-09-23
    • 2015-10-20
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多