Tom*_*ing 5 ios avassetdownloadtask avassetresourceloaderdelegate
我正在尝试用于AVAssetDownloadTask离线下载和播放 FairPlay 加密的音频内容。我不断收到这样的错误urlSession:task:didCompleteWithError::
错误域=AVFoundationErrorDomain代码=-11863“操作已停止”UserInfo={NSLocalizedFailureReason=此内容不再可用。,NSLocalizedDescription=操作已停止}
我的流程是:
AVURLAsset使用如下 URL创建一个https://my.cdn.com/playlist.m3u8AVPlayerItemAVAssetResourceLoaderDelegate,查找以方案开头的 URL skd,下载 CKC,获取可持久形式,然后将其返回给资源加载器请求所有这些都有效,并且以与 Apple 的HLSCatalog 示例代码中相同的方式完成。但下载时仍然会出现上述错误,即使将相同的播放列表和关键 URL 插入示例代码中也可以正常下载。
我最终发现,AVAssetDownloadTask只会下载一个已经流式传输并给出解密密钥(通过)并且不与播放器关联的AVURLAsset 实例。AVAssetResourceLoaderDelegate我不能只是AVURLAsset使用与已经播放的内容相同的 URL 创建一个新内容并下载它。所以看来,为了下载任意 FairPlay 内容,我必须:
AVURLAssetAVPlayer并将其音量设置为0但这看起来很可怕。这不可能是真的。
所以,我的问题是:如何下载 FairPlay 加密的 AVURLAsset,而不需要之前流式传输该特定实例?
结果你preloadsEligibleContentKeys在资产的资源加载器上设置为 true 。然后你可以下载:
AVURLAsset *asset = [AVURLAsset assetWithURL:self.currDownload.url];
[asset.resourceLoader setDelegate:self queue:dispatch_get_main_queue()];
asset.resourceLoader.preloadsEligibleContentKeys = YES;
AVAssetDownloadTask *task = [self.downloadSession assetDownloadTaskWithURLAsset:asset assetTitle:self.currDownload.title assetArtworkData:nil options:@{AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: @(265000)}];
task.taskDescription = self.currDownload.title;
[task resume];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |