首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAssetResourceLoaderDelegate未被调用

AVAssetResourceLoaderDelegate未被调用
EN

Stack Overflow用户
提问于 2014-10-14 23:35:21
回答 1查看 4.8K关注 0票数 7

我一直试图在AVAssetResourceLoaderDelegate协议上得到一些消息,但似乎从来没有被调用过。我已经验证了所有事情都发生在主线程上;从创建AVURLAsset、创建AVPlayerItem、创建委托以及将委托队列设置到主线程。我正在尝试流网络托管的MP4内容和未加密的HLS内容。

我的声明:

代码语言:javascript
复制
@property (readwrite, strong) AVPlayer* player;
@property (strong) AVPlayerItem* playerItem;
@property (strong) id<AVAssetResourceLoaderDelegate> resourceLoaderDelegate;

播放视频的代码:

代码语言:javascript
复制
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进行测试(结果似乎是相同的)。

我已经验证了所有的代码都是在主线程上执行的,就像我在this question中看到的那样,所有的东西都必须在同一个线程上。

有没有人有任何建议,或者对某些可用的源代码的引用,而这个委托实际上是在其中被调用的?

更新:我已经确定,当url转到本地文件时,这段代码运行良好,但对于远程文件,它仍然不能工作。这是预期的行为,还是我可以对远程文件这样做?

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 18:05:36

只有当我们使用“非标准/非保留”url方案时,AVAssetResourceLoaderDelegate才能工作。HTTP、HTTPS等被认为是保留的URL方案,如果url有这些方案之一,iOS将不会进行委托调用。我最后所做的是使用my_own_http作为http,my_own_https用于https urls。效果很好。还有一件事要记住,如果您有带有非标准方案的URL,它可能无法在其他支持HLS的设备上工作。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26372141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档