0

在我的 iOS 应用程序中的 ViewController.swift 中实现了AVContentKeySessionDelegate的委托方法,该方法 是使用 Brightcove SDK 播放 drm 内容。

代码片段:

 class ViewController: UIViewController, AVContentKeySessionDelegate, BCOVPlaybackControllerDelegate {  
    var contentKeySession: AVContentKeySession!
      .
      . 
   func getVideo() { 
     // fetching video using an API call
        .
        .
     let asset = AVURLAsset(url: videoUrl)
     self.contentKeySession = AVContentKeySession(keySystem: .fairPlayStreaming)
     self.contentKeySession?.setDelegate(self, queue: DispatchQueue.main)
     self.contentKeySession?.addContentKeyRecipient(asset)
   }

  //MARK: - AVContentKeySessionDelegate Methods
  func contentKeySession(_ session: AVContentKeySession, didProvide keyRequest: AVContentKeyRequest) {
    handleKeyRequest(keyRequest: keyRequest)
  }

  func contentKeySession(_ session: AVContentKeySession, contentKeyRequest keyRequest: AVContentKeyRequest, didFailWithError err: Error) {
    print(err)
  }

  func contentKeySession(_ session: AVContentKeySession, contentKeyRequestDidSucceed keyRequest: AVContentKeyRequest) {
    print(keyRequest)
  }
 }


问题

  1. 这些委托方法都没有被调用。
  2. 此外,注意到 Xcode 控制台中的错误提示: NSURLConnection 以错误代码 -1002 完成(在 Info.plist 的 App Transport Settings 中允许任意加载设置为 true
4

2 回答 2

1

我相信的目的self.contentKeySession.processContentKeyRequest是缓存内容密钥。理论上,只要内容受到保护,就应该调用内容会话密钥委托。

于 2021-10-12T11:48:16.393 回答
0

添加

self.contentKeySession.processContentKeyRequest(withIdentifier: "<identifier>", initializationData: nil, options: nil)

解决了这个问题。当请求处理内容密钥时,将调用委托方法。

于 2020-06-26T05:25:27.523 回答