【问题标题】:How to embed a Youtube video into my app?如何将 Youtube 视频嵌入到我的应用程序中?
【发布时间】:2016-01-15 18:01:08
【问题描述】:

我正在尝试为我的 Swift 应用程序创建一个视频播放器,但我不断收到“未解析标识符 AVPlayerViewController”的错误消息。我错过了什么?

我是这方面的初学者,我可能不得不用外行的话问几千次。我可能已经在互联网上搜索了一天,以获取有关如何将 Youtube 视频嵌入我的应用程序的视频,但没有任何结果。如果你能给我指出一个很棒的教程!

谢谢!

【问题讨论】:

  • 您的文件顶部有import AVKit吗?
  • 刚添加进去,原来的错误信息消失了,取而代之的是“无法调用类型为“AVPlayerViewController”的初始化程序,参数列表为“(contentURL:NSURL)”和“使用未解析的标识符” 'AVPlayerViewControllerStyleNone'
  • 另外,如何添加 MediaPlayer 框架?
  • 您无法使用 URL 创建 AVPlayerViewController。您使用 URL 创建一个AVPlayer,然后将其设置为控制器上的player 属性。 AVPlayerViewControllerStyleNone 不是一个东西,你想用它做什么? import MediaPlayer 导入 MediaPlayer 框架。
  • 嵌入一个你应该使用 webview 的 Youtube

标签: ios swift video uiwebview swift2


【解决方案1】:

Xcode 8.2 • Swift 3.0.2

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var wv: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        loadYoutube(videoID: "oCm_lnoVf08")
    }
    func loadYoutube(videoID:String) {
        guard
            let youtubeURL = URL(string: "https://www.youtube.com/embed/\(videoID)")
            else { return }
        wv.loadRequest( URLRequest(url: youtubeURL) )
    }
}

Xcode 7.3.1 • Swift 2.x

import UIKit

class ViewController: UIViewController {
    // create an outlet for your webview 
    @IBOutlet weak var wv: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // load your you tube video ID
        loadYoutube(videoID: "oCm_lnoVf08")
    }
    func loadYoutube(videoID videoID:String) {
        // create a custom youtubeURL with the video ID
        guard
            let youtubeURL = NSURL(string: "https://www.youtube.com/embed/\(videoID)")
            else { return }
        // load your web request
        wv.loadRequest( NSURLRequest(URL: youtubeURL) )
    }
}

【讨论】:

  • 我想打开这个链接但是我的屏幕只有白色没有显示任何下载文件
  • @GauravPatel 只需创建一个新项目并在其中添加该代码。我刚刚在这里测试过,它运行良好 Xcode 7.3.1(AppStore 版本)
  • 我确保我理解正确。您必须有一个 webview 并在 NSURL 请求上调用 loadrequest。对吗?
  • @LeoDabus 我已使用您的 webview 代码播放 youtube 视频。我的网址是https://www.youtube.com/watch?v=_8aKKEjIO2g&feature=youtu.be,当我加载videoID _8aKKEjIO2g 时,它说This video is unavailable。为什么会发生这种情况你知道吗?
【解决方案2】:

使用YouTube-Player-iOS-Helper:

第 1 步:将pod "youtube-ios-player-helper", "~> x.y.z" 添加到您的Podfile,将“x.y.z”替换为最新版本。并运行pod install

第 2 步:实现此代码:

import UIKit
import youtube_ios_player_helper
 
class ViewController: UIViewController, YTPlayerViewDelegate {
    @IBOutlet weak var playerView: YTPlayerView!

    override func viewDidLoad() {
        super.viewDidLoad()
        playerView.delegate = self

        let playerVars = ["playsinline": 1] // 0: will play video in fullscreen
        self.playerView.loadWithVideoId("youtubeId", playerVars: playerVars)
    }     
}

注意:如果您不想显示相关视频,请将您的 playerVars 字典中的 rel 键设置为 0

let playerVars = ["playsinline":1, "rel" : 0 ]

【讨论】:

  • 我嵌入了YTPlayerView ,但有些视频无法播放。为什么会发生这种情况,有人知道吗?
  • 此 pod 太旧,尚未更新。它停止工作,不知道为什么它不起作用。不要再使用这个吊舱了。
  • 我已经使用了提到的吊舱。是否有隐藏上下文菜单的选项。玩家控制也存在不一致。有时它会显示 Quicktime 播放器控件,主要是一般的 YouTube 控件
【解决方案3】:

斯威夫特 3/4

您可以借助 XCDYouTubeKit 在 AVPlayer 中播放 youtube 视频。

添加

pod 'XCDYouTubeKit'

进入你的项目并编写如下代码

func playVideo() {

        let playerViewController = AVPlayerViewController()
        self.present(playerViewController, animated: true, completion: nil)

        XCDYouTubeClient.default().getVideoWithIdentifier("KHIJmehK5OA") { (video: XCDYouTubeVideo?, error: Error?) in
            if let streamURL = video?.streamURLs[XCDYouTubeVideoQuality.HD720.rawValue] {
                playerViewController.player = AVPlayer(url: streamURL)
            } else {
                self.dismiss(animated: true, completion: nil)
            }
        }
    }

您可以通过将 XCDYouTubeVideoQuality.HD720.rawValue 替换为 medium360Small240

来更改视频质量

【讨论】:

    【解决方案4】:

    我在 Swift 4+ 版本上使用了以下代码

    guard let url = URL(string: "<Your YuTube url>")
            else{
                return
            }
    
    let safariViewControllerObject = SFSafariViewController(url: url)
    self.present(safariViewControllerObject, animated: true, completion: nil)
    

    注意:- 我已经导入了 SafariServices 库

    【讨论】:

      【解决方案5】:

      在 Swift 4.1 中播放 youtube 视频

      添加 Pod pod 'XCDYouTubeKit'

      在 ViewController 中导入 XCDYouTubeKit

      func playYoutubeVideo(){
      
          let strUrl = "https://www.youtube.com/watch?v=9m_K2Yg7wGQ"
          if let range = strUrl.range(of: "=") {
                  let strIdentifier = strUrl.substring(from: range.upperBound)
                  print("Identifier:\(strIdentifier)")
                  let videoPlayerViewController = 
                  XCDYouTubeVideoPlayerViewController(videoIdentifier: strIdentifier)
                  videoPlayerViewController.present(in: viewYTVideo)
                  videoPlayerViewController.moviePlayer.play()
              }
      }
      

      【讨论】:

      • 请注意,XCDYouTubeKit 自述文件 (github.com/0xced/XCDYouTubeKit) 表示“XCDYouTubeKit 违反了 YouTube 服务条款。在应用程序中播放 YouTube 视频的唯一官方方式是使用网络视图和 iframe 播放器API。”
      【解决方案6】:

      Swift 4 for iOS12 你应该导入“WebKit”模块

      为 WKWebView 创建一个出口。 使用下面的函数,你应该在 viewDidLoad() 中调用它:

      func getVideo(videoCode: String) {
          let url = URL(string: "https://www.youtube.com/embed/\(videoCode)")
          myWKWebView.load(URLRequest(url: url!))
      }
      

      getVideo 函数中的参数 videoCode,你应该使用 videoID,我将在下面的示例链接中批量设置:https://www.youtube.com/watch?v=gI3pz7eFgfo&t=838s

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 2017-11-26
        • 2013-06-08
        • 2023-03-11
        • 2013-09-23
        相关资源
        最近更新 更多