0

我想以编程方式调用

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

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

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

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

但我需要调用该resourseLoader函数而不播放视频。

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

有没有办法在我存储密钥时不调用 play 方法并丢弃播放器来实现这一点?

4

1 回答 1

2

也许对你来说迟到了,我有同样的问题。下载时尝试将资源加载器的add 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)
于 2019-04-04T08:53:32.527 回答