我们使用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
最好。