首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用AVAssetResourceLoaderDelegate方法

未调用AVAssetResourceLoaderDelegate方法
EN

Stack Overflow用户
提问于 2019-08-08 16:32:24
回答 2查看 823关注 0票数 0

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

代码:

PlayerViewController:

代码语言:javascript
复制
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授权码

代码语言:javascript
复制
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
}

有人知道为什么委托方法没有被调用吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-08-30 18:00:50

当AVPlayer不知道如何下载数据时,就会调用AVAssetResourceLoaderDelegate的方法。因此,对于像https://link_to_data.com这样的网址,AVPlayer会自动下载数据。若要强制AVPlayer使用您的委托,该URL应包含未知方案,例如custom://link_to_data.comHere is an excellent example of implementing that.

票数 0
EN

Stack Overflow用户

发布于 2021-06-15 13:26:48

在这种情况下,委托实例需要保存在内存中,在您的情况下,您可以尝试将SSLAuthenticator.default存储在某个全局变量中,然后将其设置为委托。

代码语言:javascript
复制
gloabalObject = SSLAuthenticator.default
asset.resourceLoader.setDelegate(gloabalObject, queue: DispatchQueue.main)

通常,如果委托实例在其方法被调用之前被销毁,则不会调用委托方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57408355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档