gpt4 book ai didi

ios - 如何使用 AVAssetDownloadTask 下载尚未流式传输的 FairPlay 加密 AVURLAsset 实例?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:21 32 4
gpt4 key购买 nike

我正在尝试使用 AVAssetDownloadTask离线下载和播放 FairPlay 加密的音频内容。我在 urlSession:task:didCompleteWithError: 中一直收到这样的错误:

Error Domain=AVFoundationErrorDomain Code=-11863 "Operation Stopped" UserInfo={NSLocalizedFailureReason=This content is no longer available., NSLocalizedDescription=Operation Stopped}

我的流程是:

所有这一切都有效,并且以与 Apple 的 HLSCatalog sample code 相同的方式完成。 .但是下载仍然会出现上述错误,即使将相同的播放列表和关键 URL 插入示例代码也可以正常下载。

我最终发现 AVAssetDownloadTask 只会下载一个 AVURLAsset instance 已经流式传输并给出了它的解密 key (通过AVAssetResourceLoaderDelegate) 并且与播放器无关。我不能只使用与正在播放的内容相同的 URL 来制作新的 AVURLAsset 并下载它。所以似乎为了下载任意 FairPlay 内容,我必须:

  • 制作一个AVURLAsset
  • 制作一个AVPlayer并将其音量设置为0
  • 给它 Assets 并播放它
  • 等到它从资源加载器请求它的 key 并开始播放
  • 将其交给下载任务并将其与播放器解除关联

但这看起来很可怕。这不可能是真的。

那么,我的问题是:如何下载 FairPlay 加密的 AVURLAsset,而无需之前流式传输它的特定实例?

最佳答案

原来你设置了preloadsEligibleContentKeys在 Assets 的资源加载器上为真。然后就可以下载了:

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];

关于ios - 如何使用 AVAssetDownloadTask 下载尚未流式传输的 FairPlay 加密 AVURLAsset 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282555/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com