错误域= AVFoundationErrorDomain代码= -11835“无法打开”

问题描述 投票:3回答:1

我目前正在尝试使用tvOS应用程序上的FairPlay流来实现处理DRM的服务。这是我的工作流程:

  1. 我将应用程序证书作为数据获取
  2. 从这个证书我得到SPC数据,使用: resourceLoadingRequest.streamingContentKeyRequestData(forApp: applicationCertificate, contentIdentifier: assetIDData, options: resourceLoadingRequestOptions)
  3. 从SPC Datas编码到base64Data我在我们的服务器上请求POST(在有效负载中使用SPC)以获得许可证,该许可证为我提供了CKD数据
  4. 然后当我得到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。
  • 所有服务器端进程似乎都没问题,因为它已经用于网站和智能电视。
swift streaming tvos hls fairplay
1个回答
1
投票

我最近遇到了同样的问题。问题是从streamingContentKeyRequestData(forApp...返回的CKC响应数据不仅仅是数据,它是基数为64的编码字符串数据。您需要做的就是在响应数据请求之前对其进行解码:

 dataRequest.respond(with: Data(base64Encoded: datas)!)

对于生产代码,您需要正确处理可选性。希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.