我想以编程方式调用
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool
来自AVURLAsset
的委托人AVPlayer
的{{1}}的,以便我可以兑现ckc数据,以便可以离线播放解密的内容。
我遵循了https://developer.apple.com/videos/play/wwdc2016/504/
的步骤如果我播放AVAssetResourceLoaderDelegate
兑现了ckc密钥数据,然后关闭了互联网并再次播放AVURLAsset
,则它可以正常工作,并且我可以离线观看视频。
但是我需要调用AVURLAsset
函数而不播放视频。
之所以无法执行这些步骤,是因为要获取ckc数据,我需要来自委托函数 resourseLoader
的loadingRequest
对象。
有什么方法可以在不调用play方法的情况下完成操作,并在存储密钥时丢弃播放器吗?
答案 0 :(得分:1)
也许您迟到了,我遇到了同样的问题。尝试在下载时将 preloadEligibleContentKeys 设置为 true 到资源加载器中。
let asset = AVURLAsset(url: url)
// ADD THIS LINE TO PRELOAD BEFORE PLAYING
asset.resourceLoader.preloadsEligibleContentKeys = true
asset.resourceLoader.setDelegate(self, queue: DispatchQueue.main)
let downloadTask = downloadSession?.makeAssetDownloadTask(asset: asset, assetTitle: "Asset title", assetArtworkData: nil, options: nil)