Swift - загрузка AVPlayer завершилась ошибкой. Ошибка домена = NSURLErrorDomain Code = -999 отменено.

Я пытаюсь воспроизвести видео из строки url. Но у меня есть ошибка в заголовке вопроса.

Я пробую этот код ниже. videoPath - это строка URL.

let videoURL = URL(string: videoPath)
        let player = AVPlayer(url: videoURL!)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }

Ниже приведен журнал ошибок:

загрузка не удалась с ошибкой Error Domain = NSURLErrorDomain Code = -999 "cancelled" UserInfo = {NSErrorFailingURLStringKey = http://b...a.mp4, NSErrorFailingURLKey = http://b...a.mp4, _NSURLErrorRelatedURLSessionTaskErrorKey = ("LocalDataTask ‹841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>. ‹2>"), _NSURLErrorFailingURLSessionTaskErrorKey = LocalB2FFA-479B4E5A-9BD3-D9207EAA0D32>.

Я установил info.plist -

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>www.example.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>

ПРИМЕЧАНИЕ. Проблема возникает с видео продолжительностью 10 минут. Это нормально?


person Ali Ihsan URAL    schedule 20.11.2018    source источник
comment
Не могли бы вы поделиться, если videURL возвращает действительный URL?   -  person Emre Önder    schedule 20.11.2018
comment
Это действительно так. Когда вы пытаетесь открыть в браузере этот URL. Видео отображается и воспроизводится   -  person Ali Ihsan URAL    schedule 20.11.2018
comment
можешь сказать, что это исправило?   -  person ironRoei    schedule 21.01.2019
comment
Я начал получать это, когда начал использовать urlAsset.resourceLoader.preloadsElhibitedContentKeys = true с потоковым плейлистом CMAF. Однако я понял, что это произошло только на СИМУЛЯТОРЕ, а не на устройстве. Для меня это не имело ничего общего с AVPlayer, поскольку это происходило на экране, на котором еще даже не был создан проигрыватель фильмов.   -  person Ryan Romanchuk    schedule 06.02.2019


Ответы (4)


Вы пытаетесь представить AVPlayerViewController внутри viewDidLoad? Если это так, вы можете попробовать представить его после добавления представления контроллера представления в иерархию окон - например, viewDidAppear. Имейте в виду, что viewDidAppear будет вызываться, когда вы вернетесь к контроллеру, и модальное представление будет запущено снова.

person gulyashki    schedule 20.11.2018
comment
Это в поле зрения - person Ali Ihsan URAL; 20.11.2018

Требуется ли для URL-адреса установка файлов cookie? Я столкнулся с той же проблемой с отсутствующими файлами cookie. Вы можете проверить это, попробовав открыть URL-адрес в инкогнито-окне. Если он по-прежнему работает нормально, возможно, вы можете отладить это:

Создание объекта AVURLAsset с URL-адресом, например -
AVURLAsset(url: <URL>, options:[]) и установка делегата resourceLoader на себя. Нравится urlAsset?.resourceLoader.setDelegate(self, queue: .main) и реализует функции

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
    return true
}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForRenewalOfRequestedResource renewalRequest: AVAssetResourceRenewalRequest) -> Bool {
    return true
}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel loadingRequest: AVAssetResourceLoadingRequest) {

}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForResponseTo authenticationChallenge: URLAuthenticationChallenge) -> Bool {
    return true
}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel authenticationChallenge: URLAuthenticationChallenge) {

}

Но если для этого требуются файлы cookie - установите их в объекте AVURLAsset, например, let asset = AVURLAsset(url: videoURL, options: ["AVURLAssetHTTPHeaderFieldsKey": ["Cookie": "<YOUR TOKEN>"]])

person NavinDev    schedule 22.11.2018

Причиной могут быть неправильные метаданные в видео. Взгляните на эту ветку, на которую я ответил: AVPlayer HLS live stream IOS

Перекодированное видео должно иметь profile baseline для воспроизведения в AVPlayer. Взгляните на команду транскодирования ffmpeg для подробностей:

https://gist.github.com/chung-nguyen/d88e73e3cc8788878f5ffb8c232b4729

person Nguyễn Trường Chung    schedule 23.01.2019

NSErrorFailingURLKey = http://b...a.mp4 URL с префиксом http всегда не работает. независимо от того, какой у вас ОВД. пожалуйста, посетите мой ответ здесь

person SaadurRehman    schedule 03.02.2020