ios - 未调用 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
}
有谁知道为什么不调用委托方法?谢谢
解决方案
AVAssetResourceLoaderDelegate
当 AVPlayer 不知道如何下载数据时,方法被调用。所以对于像 AVPlayer 这样的 URLhttps://link_to_data.com
会自己下载数据。要强制 AVPlayer 使用您的委托,URL 应包含未知方案,例如custom://link_to_data.com
.
这是实现它的一个很好的例子。
推荐阅读
- java - 如何查看我的 Java 代码如何转换为二进制文件?
- sql - MariaDB - 无法创建具有两个外键的表
- javascript - 如何将带有数学符号的字符串转换为数字?
- python - 在 Tkinter 中刷新 BeautifulSoup
- javascript - 如何构建数组列表并将 [abcd] 等数据转换为 ["a", "b", "c"]
- windows-7 - Inno Setup - 尝试将文件夹移动到 \system32 中的组策略
- javascript - 在ajax调用后渲染html组件用javascript更改其变量
- javascript - js 行导致它上面的代码不执行
- java - 仅在签名后才允许 jar 运行
- ms-access - 删除office2007中.mdb文件的密码,在access97中创建