AVAssetResourceLoaderDelegate不被调用

我一直试图得到一些AVAssetResourceLoaderDelegate协议的消息,但它似乎永远不会被调用。 我已经validation了一切正在主线上发生; 从创buildAVURLAsset ,创buildAVPlayerItem ,创build委托,并将委托队列设置为主线程。 我正在尝试使用networking托pipe的MP4内容和未encryption的HLS内容。

我的声明:

 @property (readwrite, strong) AVPlayer* player; @property (strong) AVPlayerItem* playerItem; @property (strong) id<AVAssetResourceLoaderDelegate> resourceLoaderDelegate; 

播放video的代码:

 AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; ... self->_resourceLoaderDelegate = [[MyAssetResourceLoaderDelegate alloc] init]; [asset.resourceLoader setDelegate:self->_resourceLoaderDelegate queue:dispatch_get_main_queue()]; ... self->_playerItem = [AVPlayerItem playerItemWithAsset:asset]; ... [self setPlayer:[AVPlayer playerWithPlayerItem:self->_playerItem]]; 

但是, resourceLoader:shouldWaitForLoadingOfRequestedResource:永远不会被调用(其他任何委托方法都不会)。

为了清楚起见,我使用iOS模拟器以及运行iOS 8的iPhone 5s进行testing(结果看起来完全相同)。

我已经validation了所有的代码正在主线程上执行,正如我在这个问题中读到的,一切都必须在同一个线程上。

有没有人有任何build议,或者也许是一些可用的代码实际被调用的源代码的引用?

更新:我已经确定,这个代码工作正常,当url是一个本地文件,但它仍然无法正常工作时,它是一个远程文件。 是预期的行为还是有办法我可以这样做的远程文件?

AVAssetResourceLoaderDelegate只有在我们使用“非标准/非保留”urlscheme时才起作用。 HTTP,HTTPS等被认为是保留的URLscheme,如果URL有这些scheme之一,iOS不会进行委托调用。 我最终做的是使用my_own_http为http url和my_own_https为httpsurl。 它运作良好。 还有一件事要记住,如果你的url是非标准的,那么在其他支持HLS的设备上可能不起作用。