FairPlay离线播放在iOS 10上不起作用



我们使用EZDRM进行DRM保护。

在线播放在iOS 10-13上运行良好,而离线播放在iOS 11-13上运行,但在iOS 10上不运行;持久内容密钥是在iOS10中引入的,所以它应该可以工作。

我使用了EZDRM的示例项目进行测试,该项目使用AVAssetResourceLoaderDelegate。下载视频和内容密钥后,当我们尝试播放下载的视频时,出现了以下错误。

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x17005d1c0 {Error Domain=NSOSStatusErrorDomain Code=-42651 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-42651), NSLocalizedDescription=The operation could not be completed}
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x17005be40 {Error Domain=NSOSStatusErrorDomain Code=-12882 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-12882), NSLocalizedDescription=The operation could not be completed}

记录加载请求对象(来自iOS 10(:

<AVAssetResourceLoadingRequest: 0x174201f10, URL request = <NSMutableURLRequest: 0x1702009a0> { URL: skd://fps.ezdrm.com/;xxxxxx }, request ID = 2, content information request = <AVAssetResourceLoadingContentInformationRequest: 0x174202060, content type = "(null)", content length = 0, byte range access supported = NO, disk caching permitted = NO, renewal date = (null)>, data request = <AVAssetResourceLoadingDataRequest: 0x174201de0, requested offset = 0, requested length = 9223372036854775807, requests all data to end of resource = YES, current offset = 0>>

我发现:

  • iOS 10上的disk caching permitted = NO
  • iOS 11-13上的disk caching permitted = YES

不确定这是否是失败的原因,也不知道哪个部分控制这个属性的值。

我还使用了苹果的HLSCatalogWithFPS进行测试,它使用了AVContentKeySession。最初,它的部署目标是iOS 11.3,我做了一些修改,使它也可以在iOS 10.3上运行,例如:

  • keyRequest.respondByRequestingPersistableContentKeyRequestAndReturnError()->keyRequest.respondByRequestingPersistableContentKeyRequest()
  • AVAggregateAssetDownloadTask->AVAssetDownloadTask

然而,在调用respondByRequestingPersistableContentKeyRequest()之后,contentKeySession:didProvidePersistableContentKeyRequest:没有被调用,而是被调用了contentKeySession:didProvideContentKeyRequest:,它在这里创建了一个无限循环。

根据文件https://developer.apple.com/documentation/avfoundation/avcontentkeyrequest/2799207-respondbyrequestingpersistableco:

如果您的代理没有响应contentKeySession:didProvidePersistableContentKeyRequest:,则会返回NSInternalConferenceException。

所以我试图注释掉委托方法,但没有任何异常;如果它在iOS 11上运行,则会出现异常。

看来整个FairPlay离线播放功能在iOS 10上不起作用。有人能帮忙吗?

在EZDRM的iOS离线示例中,他们使用iOS11作为基础版本。这并非巧合,它只支持iOS11及以上

持久内容密钥是在iOS 10中引入的,因此它应该可以使用

这并不是持久内容密钥的全部,他们在那之后添加了更多,例如,他们在iOS版本10.3中添加了AVContentKeySession等。我不确定EZDRM是否支持这一点,但这是SDK的重要进展。

公司只能支持稳定版本。我不确定他们的具体原因,但我能理解。我从未使用过EZDRM的SDK。

此外,请查看文档:https://www.ezdrm.com/Documentation/EZDRM_Testing_Playback_v2.pdf

最好。

相关内容

  • 没有找到相关文章

最新更新