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

Store ckc key data of AVURLAsset without play video

我想以编程方式调用

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool

来自 AVPlayerAVAssetResourceLoaderDelegate 的代表的 AVURLAsset,这样我就可以兑现 ckc 数据,以便我可以离线播放解密的内容。

我按照 https://developer.apple.com/videos/play/wwdc2016/504/

的步骤

如果我播放 AVURLAsset 兑现 ckc 密钥数据,然后关闭互联网并再次播放 AVURLAsset 它有效,我可以离线观看视频。

但是我需要在不播放视频的情况下调用resourseLoader函数。

我无法执行这些步骤的原因是因为要获取 ckc 数据,我需要来自委托函数 resourceLoaderloadingRequest 对象。

有什么方法可以在存储密钥时不调用 play 方法并丢弃播放器来实现吗?

也许对你来说来晚了,我遇到了同样的问题。尝试在下载时将 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)