如何解决iOS 离线 HLS DRM 受保护的内容每个应用程序会话只能播放一次
正如标题所说,我只能复制下载的受 DRM 保护的内容一次。当我关闭播放器并返回时,它不再起作用,并且不再调用函数 resourceLoader(_ resourceLoader: AVAssetResourceLoader,shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest)
。如果我杀死应用程序,它只会重新开始工作。
到目前为止我尝试过的:
- 具有相同的 avplayer 实例来再现内容。
- 使用不同的 avplayer 实例来再现内容。
- 每个玩家会话具有相同的
AVAssetResourceLoaderDelegate
实例。 - 每个玩家会话都有不同的
AVAssetResourceLoaderDelegate
实例。
这是我的代码的样子:
public func load() {
guard let source = source else { return }
playerState.source = source
let videoURL: URL
if !source.Metadata.externalSubtitles.isEmpty {
let localSchemaURL = source.url.absoluteString.replacingOccurrences(of: URLSchemas.https.rawValue,with: ExternalSubtitlesResourceLoader.mainScheme)
videoURL = URL(string: localSchemaURL) ?? source.url
} else {
videoURL = source.url
}
self.resourceDelegate = Reachability.isConnectedToNetwork() ? Constants.resourceResolver.build(from: source) : PRdplayerDownloadResourceLoader(source: source)
prepareAsset(from: videoURL.absoluteString)
requestIDFA()
}
public func prepareAsset(from urlString: String) {
playerState.source = source
guard let mediaURL = URL(string: urlString) else {
assertionFailure("Failed to obtain media url")
return
}
let asset = AVURLAsset(url: mediaURL)
if let delegate = resourceDelegate {
asset.resourceLoader.setDelegate(delegate,queue: queue)
asset.resourceLoader.preloadsEligibleContentKeys = true
}
asset.loadValuesAsynchronously(forKeys: [AssetKeys.playable.rawValue]) { [weak self] in
guard let self = self else { return }
var error: NSError? = nil
let status = asset.statusOfValue(forKey: AssetKeys.playable.rawValue,error: &error)
switch status {
case .loading:
EventManager.shared.dispatchEvent(eventName: EventKeys.loadStartEvent.rawValue,payload: nil)
case .loaded:
let playerItem = AVPlayerItem(asset: asset)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。