我一直在研究一种简单的AVPlayer加密HLS媒体.
我正在使用它AVAssetResourceLoaderDelegate来处理密钥检索过程,因此可以使用有效密钥播放加密媒体.
该程序在模拟器上完美运行,但它在设备上根本不起作用.
以下是代码:
- (void) playUrlByAVPlayer:(NSString *) videoUrl
{
NSURL *streamURL = [NSURL URLWithString:videoUrl];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:streamURL options:nil];
[asset.resourceLoader setDelegate:self queue:dispatch_get_main_queue()];
self.playerItem = [AVPlayerItem playerItemWithAsset:asset];
self.player = [AVPlayer playerWithPlayerItem:self.playerItem];
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
[self.playerLayer setFrame:self.view.frame];
[self.view.layer addSublayer:self.playerLayer];
[self.player play];
}
Run Code Online (Sandbox Code Playgroud)
经过一些调试,我意识到委托方法shouldWaitForLoadingOfRequestedResource从未在设备上调用过.
我读过其他相关问题:
AVAssetResourceLoaderDelegate未被调用
AVAssetResourceLoaderDelegate - 仅请求前两个字节?
我试图包围内的所有代码dispatch_async,dispatch_get_main_queue块,但有解决我的运气不好.
目前,我的上述代码未被任何调度队列块包围.
有关这个问题的任何想法?