问题描述
有没有办法让AVPlayer在iOS中强制执行证书固定?
我们的视频加载代码基本上是:
let url = URL(string: "https://www.example.com/file.mp4")!
let item = AVPlayerItem(url: url)
我们可以使用以下委托方法通过https://developer.apple.com/documentation/foundation/urlsessiondelegate/1409308-urlsession使用URLSession进行证书固定。但是,如果有的话,我还无法为AVPlayer找到一种类似的方法。
感谢您的帮助!
解决方法
要实现的相关方法应该是AVAssetResourceLoaderDelegate
(docs)中的该方法:
optional func resourceLoader(_ resourceLoader: AVAssetResourceLoader,shouldWaitForResponseTo authenticationChallenge: URLAuthenticationChallenge) -> Bool
在您的情况下,直接创建一个AVURLAsset
,然后在其资源加载器上设置您的委托实现。然后使用资产初始化播放器项目。
let url = URL(string: "https://www.example.com/file.mp4")!
let urlAsset = AVURLAsset(url: url)
urlAsset.resourceLoader.setDelegate(resourceLoaderDelegate,queue: .main)
let item = AVPlayerItem(asset: urlAsset)