Наблюдение за значениями AVPlayerItem в iOS9

У меня есть приложение, которое использует AVPlayer для воспроизведения AVPlayerItem (видео) с удаленного URL-адреса. В iOS 6-8 я наблюдал за значением AVPlayerItem's для loadedTimeRanges, чтобы уведомить меня, когда playerItem готово для воспроизведения игроком. Я полагаю, это также работает при наблюдении за значением duration элемента.

После обновления до бета-версии iOS 9 ни одно из значений в AVPlayerItem, которое я наблюдаю, никогда не попадает в метод observeValueForKeyPath. Как будто я их вообще не наблюдаю. Меня по-прежнему уведомляют о значениях AVPlayer, но не AVPlayerItem. Может ли это быть ошибкой, или здесь что-то изменилось в среде? ничего не могу найти по этому поводу..

Для пояснения, в iOS 6-8 видео начинают воспроизводиться, как только появляются какие-либо загруженные временные диапазоны. В iOS9 меня никогда не уведомляют о загрузке каких-либо временных диапазонов.

Обновить

После просмотра значения status для AVPlayerItem я подтвердил, что статус элемента изменен на 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}

person Sti    schedule 22.06.2015    source источник


Ответы (1)


Сегодня я столкнулся с той же проблемой. В моем случае загрузка видео не удалась из-за новой функции App Transport Security в iOS 9.

Вы можете добавить исключение для каждого домена в свой 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 Transport Security, хотя это не рекомендуется.

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