在 iOS9 中观察 AVPlayerItem 的值

Observing values on AVPlayerItem in iOS9

我有一个应用程序使用 AVPlayer 从远程 URL 播放 AVPlayerItem(视频)。在 iOS 6-8 中,我一直在观察 loadedTimeRangesAVPlayerItem's 值,以便在玩家准备好播放 playerItem 时通知我。我相信,这在观察项目 duration 的价值时也有效。

更新到 iOS 9 beta 后,我观察到 AVPlayerItem 上的 none 值曾经进入 observeValueForKeyPath 方法。就好像我根本没有在观察他们一样。 AVPlayer 上的值仍会通知我,但 AVPlayerItem 上的值不会通知我。这可能是一个错误,还是这里的环境发生了变化?我找不到关于此的任何信息..

为澄清起见,在 iOS 6-8 中,只要有任何加载的时间范围,视频就会开始播放。在 iOS9 中,当加载任何时间范围时,我永远不会收到通知。

更新

观察 AVPlayerItem 的值 status 后,我现在确认该项目的状态已更改为 Failed。通过在失败后注销项目的 NSError,我得到这个:

Error Domain=AVFoundationErrorDomain Code=-11800 
    "The operation could not be completed" 
    UserInfo=0x146023c90 {NSUnderlyingError=0x144f547d0 
    "The operation couldn’t be completed. (OSStatus error -1022.)",
    NSLocalizedFailureReason=An unknown error occurred (-1022), 
    NSLocalizedDescription=The operation could not be completed}

我 运行 今天遇到了同样的问题。就我而言,由于 iOS 9 中新的 App T运行sport Security 功能,加载视频失败。

您可以像这样向 info.plist 添加每个域的例外:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

如果您需要从任意域加载视频,您可以完全禁用 App T运行sport Security,但不推荐这样做。

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>