首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我尝试使用苹果示例代码( Fairplay流媒体服务器软件开发工具包v4.2.0)与Fairplay在线播放,但它不起作用

我尝试使用苹果示例代码( Fairplay流媒体服务器软件开发工具包v4.2.0)与Fairplay在线播放,但它不起作用
EN

Stack Overflow用户
提问于 2020-02-04 16:21:56
回答 1查看 247关注 0票数 0

我试着用HLSCatalogWithFPS - AVContentKeySession苹果示例代码来播放公平播放的视频。我只是修改了两个函数"func requestApplicationCertificate()抛出->数据“和"func requestContentKeyFromKeySecurityModule(spcData: Data,assetID: String)抛出->数据”,并在stream.plist上添加了视频url

-> requestApplicationCertificate()抛出函数数据{

代码语言:javascript
复制
    let certificateURL = Bundle.main.url(forResource: "fairplay", withExtension: "cer")

    let applicationCertificate: Data? = try? Data(contentsOf: certificateURL!)

    return applicationCertificate!

}



func requestContentKeyFromKeySecurityModule(spcData: Data, assetID: String) throws -> Data {
    // MARK: ADAPT - You must implement this method to request a CKC from your KSM.

    var ckcData: Data? = nil

    let url = URL(string: "http://drmlab.ott.hinet.net:8064/fpsa/v1.0/?deviceId=NDJhNjQ1MmQtZGFkZC0zNjE3LTllOTUtMmNlNWVlMzYwZmRi")!

    var request = URLRequest(url: url)

    let postString = "spc=\(spcData.base64EncodedString())&assetId=\(assetID)"

    let postData = postString.data(using: .utf8, allowLossyConversion: true)       

    request.httpMethod = "POST"

    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

    request.setValue(String(postData!.count), forHTTPHeaderField: "Content-Length")

    request.httpBody = postData

    let session = URLSession.shared

    let semaphore = DispatchSemaphore(value: 0)    

    let task = session.dataTask(with: request) { (data, response, error) in

        guard let data = data, error == nil else {

            print("error=\(error)")

            return

        }      

        print("response = \(response)")       

        let responseData = String(data: data, encoding: .utf8)

        print("responseData = \(responseData)")

        print("ckc = \(ckcData = Data(base64Encoded: responseData!))")

        semaphore.signal()

    }
       task.resume()

    _ = semaphore.wait(timeout: DispatchTime.distantFuture)

    return ckcData!

}

我收到了错误消息,我该如何解决它??

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 17:07:03

我认为您应该尝试创建base64编码的url安全源数据。

let base64spc = spcData.base64EncodedString().trimmingCharacters(in: .whitespacesAndNewlines) let base64UrlSafe = base64spc.replacingOccurrences(of: "+", with: "-").replacingOccurrences(of: "/", with: "_").replacingOccurrences(of: "=", with: "") let postString = "spc=\(base64UrlSafe.base64EncodedString())&assetId=\(assetID)"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60053222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档