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

时间:2017-04-19 11:01:36

标签: swift streaming tvos hls fairplay

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

  1. 我将应用程序证书作为数据

  2. 从这个证书中我得到了SPC数据,使用:

    resourceLoadingRequest.streamingContentKeyRequestData(forApp: applicationCertificate, contentIdentifier: assetIDData, options: resourceLoadingRequestOptions)
    
  3. 从编码为base64Data的SPC数据中,我在服务器上请求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() 
    
  5. 但是在这些步骤之后我得到了错误:

      

    错误域= AVFoundationErrorDomain代码= -11835“无法打开”   UserInfo = {NSUnderlyingError = 0x170440de0 {错误   Domain = NSOSStatusErrorDomain Code = -42681“(null)”},   NSLocalizedFailureReason =此内容未经授权。,   NSLocalizedDescription =无法打开}

    有没有人有想法或提示?

    其他信息:

    • 播放过程适用于未受保护的内容。

    • playerItem.errorLog()返回nil。

    • playerItem.status == .failed返回true。

    • 所有服务器端进程似乎都没问题,因为它已经用于网站和智能电视。

1 个答案:

答案 0 :(得分:1)

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

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

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