Swift - загрузка AVPlayer не удалась с ошибкой Ошибка Domain = NSURLErrorDomain Code = -999 "отменено" - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь воспроизвести видео из строки 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()
        }

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

загрузка не удалась с ошибкой Ошибка Домен = NSURLErrorDomain Code = -999 "отменено"UserInfo = {NSErrorFailingURLStringKey = http://b. .. a.mp4 , NSErrorFailingURLKey = http://b. .. a.mp4 , _NSURLErrorRelatedURURessionessionTaskErrorKey = ("LocalDataT2BA-9A-9B-9B-8A-9B-8-9-B3-8-9-й-8-й-8-й-9-й-й-й-й-й-й железной германских железных почетных позициях)-D9207EAA0D32>. <2> "), _NSURLErrorFailingURLSessionTaskErrorKey = LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>. <2>, NSLocalizedDescription = 1019 * 101

отменено} 1019.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 минут.Это нормально?

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

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

, создав объект AVURLAsset с URL-адресом, например -
AVURLAsset(url: <URL>, options:[]) и установив для делегата resourceLoader значение self.Подобно 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>"]])

0 голосов
/ 23 января 2019

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

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

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

0 голосов
/ 20 ноября 2018

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

...