在不播放视频的情况下存储AVURLAsset的ckc密钥数据

时间:2019-02-11 08:36:36

标签: ios swift avplayer fairplay

我想以编程方式调用

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方法的情况下完成操作,并在存储密钥时丢弃播放器吗?

1 个答案:

答案 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)