我一直在尝试使用AVAssetResourceLoaderDelegate协议获取一些消息,但似乎从未被调用。我已经验证了所有操作都在主线程中进行,从创建AVURLAsset、创建AVPlayerItem、创建委托以及将委托队列设置为主线程。我正在尝试流式传输网络托管的MP4内容和未加密的HLS内容。
我的声明:
我的声明:
@property (readwrite, strong) AVPlayer* player;
@property (strong) AVPlayerItem* playerItem;
@property (strong) id<AVAssetResourceLoaderDelegate> resourceLoaderDelegate;
播放视频的代码:
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进行测试(结果看起来相同)。
我已经验证了所有代码都在主线程上执行,因为我在这个问题中读到,所有内容必须在同一个线程上。
有人有什么建议,或者可以提供一些可用源代码的参考,以便实际调用此委托?
更新:我已确定当URL指向本地文件时,此代码可以正常工作,但是当URL指向远程文件时,它仍无法正常工作。这是预期行为还是我可以以某种方式处理远程文件?