【发布时间】:2017-09-15 13:45:55
【问题描述】:
我目前正在尝试实施一项服务,以在 tvOS 应用上通过 FairPlay 流处理 DRM。 这是我的工作流程:
我将应用证书作为数据获取
-
从这个证书我得到 SPC 数据,使用:
resourceLoadingRequest.streamingContentKeyRequestData(forApp: applicationCertificate, contentIdentifier: assetIDData, options: resourceLoadingRequestOptions) 从编码为 base64Data 的 SPC 数据,我在我们的服务器上请求 POST(在有效负载中包含 SPC)以获得许可证,该许可证为我提供 CKD 数据
-
然后,当我得到 CKC 数据时,我会按如下方式使用它们:
guard let dataRequest = resourceLoadingRequest.dataRequest else { print("no data is being requested in loadingRequest") let error = NSError(domain: AssetLoaderDelegate.errorDomain, code: -6, userInfo: nil) resourceLoadingRequest.finishLoading(with: error) return } dataRequest.respond(with: datas) resourceLoadingRequest.finishLoading()
但是在这些步骤之后我得到了错误:
错误域=AVFoundationErrorDomain 代码=-11835 “无法打开” UserInfo={NSUnderlyingError=0x170440de0 {错误 域=NSOSStatusErrorDomain 代码=-42681 "(null)"}, NSLocalizedFailureReason=此内容未经授权。, NSLocalizedDescription=无法打开}
有人有想法或提示吗?
其他信息:
播放过程适用于不受保护的内容。
playerItem.errorLog() 返回 nil。
playerItem.status == .failed 返回 true。
所有服务器端进程似乎都没有问题,因为它已经用于网站和智能电视。
【问题讨论】:
-
我知道这是题外话。但是你能分享一下如何获得
applicationCertificate吗? -
嗨,我也遇到了类似的问题。你找到解决办法了吗?
-
@Hlung 您从托管服务器获取您的应用程序证书(推荐)或加载到您的 App Bundle(测试目的),并可以获取其数据字节并发送到
loadingRequest.streamingContentKeyRequestData(forApp: certificateData, contentIdentifier: assetIdentifierData, options: nil)。您的证书很可能应该是 .cer 格式。您可以通过以下方式获取其数据字节:let certificateURL = Bundle.main.url(forResource: "certificate", withExtension: "der"), let certificateData = try? Data(contentsOf: certificateURL)
标签: swift streaming tvos http-live-streaming fairplay