首页 > 解决方案 > 未调用 AVAssetResourceLoaderDelegate 方法

问题描述

我正在尝试安全地播放在线直播 (.m3u8)。我正在创建一个AVAsset并将其委托分配给一个符合AVAssetResourceLoader. 问题是,delegate方法没有被调用。

代码:

播放器视图控制器:

let asset: AVURLAsset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headerFields])
    let item = AVPlayerItem(asset: asset)
    player = AVPlayer(playerItem: item)
    
    asset.resourceLoader.setDelegate(SSLAuthenticator.default, queue: DispatchQueue.main)

SSL 身份验证器

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

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel authenticationChallenge: URLAuthenticationChallenge) {
    print("1")
}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel loadingRequest: AVAssetResourceLoadingRequest) {
    print("2")
}

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

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

有谁知道为什么不调用委托方法?谢谢

标签: iosswiftsecuritysslavkit

解决方案


AVAssetResourceLoaderDelegate当 AVPlayer 不知道如何下载数据时,方法被调用。所以对于像 AVPlayer 这样的 URLhttps://link_to_data.com会自己下载数据。要强制 AVPlayer 使用您的委托,URL 应包含未知方案,例如custom://link_to_data.com. 这是实现它的一个很好的例子。


推荐阅读