迅速-AVPlayer加载失败,错误错误域= NSURLErrorDomain代码= -999“已取消”

时间:2018-11-20 08:42:56

标签: ios swift avplayer audiotoolbox

我尝试从网址字符串播放视频。但是我的问题标题出现了一些错误。

我在下面尝试此代码。 videoPath是网址字符串。

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   “已取消” UserInfo = {NSErrorFailingURLStringKey = http://b...a.mp4,   NSErrorFailingURLKey = http://b...a.mp4,   _NSURLErrorRelatedURLSessionTaskErrorKey =(       “ LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>”),_ NSURLErrorFailingURLSessionTaskErrorKey = LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>,   NSLocalizedDescription = cancelled} [-999]

我设置了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分钟以上的视频上。这是正常现象吗?

4 个答案:

答案 0 :(得分:0)

您是否要在AVPlayerViewController中显示viewDidLoad?如果是这样,您可以在将视图控制器的视图添加到窗口层次结构后尝试呈现它-例如viewDidAppear。请记住,当您导航回控制器时,将调用viewDidAppear,并且模态表示将再次被触发。

答案 1 :(得分:0)

URL是否需要设置cookie?我也遇到缺少Cookie的问题。 您可以尝试通过在隐身窗口中打开网址来进行检查。如果仍然可以正常播放,则可以通过-

进行调试

使用URL创建AVURLAsset对象,例如-
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>"]])

答案 2 :(得分:0)

原因可能是视频中的元数据错误。看一下我回答的这个线程:AVPlayer HLS live stream IOS

已转码的视频必须具有profile baseline才能在AVPlayer中播放。查看ffmpeg转码命令以了解详细信息:

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

答案 3 :(得分:0)

NSErrorFailingURLKey = enter image description here 无论您使用哪种ATS,带有“ http”前缀的url总是失败。 请访问我的答案http://b...a.mp4