swift - 无法在 tvOS 中播放 YouTube 视频。得到一个 "Operation requires a client data source to have been registered"

标签 swift youtube avplayer avplayerviewcontroller

当我尝试在 tvOS 中播放 YouTube 视频时出现以下错误:

[MediaRemote] [MRPlaybackQueueServiceClient] playbackQueueRequest AFCF4995-D293-4B5B-82F0-E701186F639F PineBoard-21384 /A600.000000x600.000000/R[0:1] responded to asset request with error Error Domain=kMRMediaRemoteFrameworkErrorDomain Code=15 "Operation requires a client data source to have been registered." UserInfo={NSLocalizedDescription=Operation requires a client data source to have been registered.}

我正在使用 XCDYouTubeKit 库。

产生错误的代码是:

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

weak var weakPlayerViewController: AVPlayerViewController? = playerViewController

XCDYouTubeClient.default().getVideoWithIdentifier("9bZkp7q19f0") { video, error in
      if (video != nil) {
          let streamURLs = video?.streamURLs
          var streamURL: URL?

          if (streamURLs?[XCDYouTubeVideoQualityHTTPLiveStreaming] != nil) { streamURL = streamURLs?[XCDYouTubeVideoQualityHTTPLiveStreaming] }
          else if (streamURLs?[XCDYouTubeVideoQuality.HD720.rawValue] != nil) { streamURL = streamURLs?[XCDYouTubeVideoQuality.HD720.rawValue] }
          else if (streamURLs?[XCDYouTubeVideoQuality.medium360.rawValue] != nil) { streamURL = streamURLs?[XCDYouTubeVideoQuality.medium360.rawValue] }
          else if (streamURLs?[XCDYouTubeVideoQuality.small240.rawValue] != nil) { streamURL = streamURLs?[XCDYouTubeVideoQuality.small240.rawValue] }

          if let streamURL = streamURL {
              weakPlayerViewController?.player = AVPlayer(url: streamURL)
              weakPlayerViewController?.player?.play() // HERE IS WHERE I GET THE ERROR
          }
      }
  }

我不明白为什么会出现此错误。 甚至,如果我在 XCDYouTubeKit 存储库中运行 tvOS 演示代码,我也会遇到同样的错误。

最佳答案

将以下内容添加到 appDelegate.swift 应该可以修复错误:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(.playback, mode: .moviePlayback)
    }
    catch {
        print("Setting category to AVAudioSessionCategoryPlayback failed.")
    }
    return true
}

关于swift - 无法在 tvOS 中播放 YouTube 视频。得到一个 "Operation requires a client data source to have been registered",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209600/

相关文章:

ios - 对象未添加到数组中 - swift iOS

ios - 将 FaSTLane 与 CircleCI 集成 : Cocoapods framework not found

ios - 来自 AVPlayer 的错误=-25300

javascript - Youtube API 和 Web 音频 api

api - 将youtube音频序列与本地视频一起使用

ios - 将 AirPlay 配置为在应用程序进入后台时在苹果电视上为 AVPlayer 播放视频

ios - 在 Swift 4/Xcode 9 : AVF context unavailable for sharedAudioPresentationContext 中从 url 播放视频文件

ios - 当对象数组为空时显示 UISplitview 辅助 View 的后退屏幕

ios - performSegueWithIdentifier 被跳过 *SWIFT

ruby-on-rails - 我如何用 Rails 交换这个链接?