我想通过我的代表播放流以在那里应用我的客户端证书。但代表中没有处理任何事件。当我在流媒体服务器端关闭客户端证书时,播放工作正常。否则 - 400 Bad请求(客户端不发送客户端证书)。我尝试在委托中发送身份验证质询证书,但此事件未得到处理。
(tvOS 10 with swift 3。)
这是初始化播放的代码:
let movieAsset:AVURLAsset = AVURLAsset(url: plurl!, options: nil)
let plCont:PlayerViewDelegate = PlayerViewDelegate()
movieAsset.resourceLoader.setDelegate(plCont, queue: DispatchQueue.main)
let playerItem:AVPlayerItem = AVPlayerItem(asset: movieAsset)
playerController.player = AVPlayer(playerItem: playerItem)
playerController.player?.play()
这是描述委托的代码:
class PlayerViewDelegate: NSObject, AVAssetResourceLoaderDelegate {
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool{
return true
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForRenewalOfRequestedResource renewalRequest: AVAssetResourceRenewalRequest) -> Bool{
return true
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel loadingRequest: AVAssetResourceLoadingRequest){
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel authenticationChallenge: URLAuthenticationChallenge){
print("PLAY CHALLENGE 2")
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForResponseTo authenticationChallenge: URLAuthenticationChallenge) -> Bool {
print("PLAY CHALLENGE")
return true
}
}
“播放挑战”(以及所有其他事件)从未发生过。
我做错了什么?
已更新!
我看到了这个主题Delegates methods not invokes without custom_scheme。
当我将我的方案更改为自定义方案时:https - > ss_https,只调用了一个方法:
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool
但我需要将方案更改回原始方案,因为其他事件仍未处理。用objective-c编写的互联网中的所有示例,只需使用request.scheme =“https”更改方案。但是在swift 3中,所有重要的对象都是不可改变的!所以我无法在resourceLoader事件中更改请求,URL,方案等。