gpt4 book ai didi

ios - 未调用 AVAssetResourceLoaderDelegate

转载 作者:可可西里 更新时间:2023-11-01 05:08:36 27 4
gpt4 key购买 nike

我一直在尝试通过 AVAssetResourceLoaderDelegate 协议(protocol)返回一些消息,但它似乎从未被调用过。我已经确认一切都在主线程上发生;从创建 AVURLAsset,创建 AVPlayerItem,创建委托(delegate),委托(delegate)队列设置到主线程。我正在尝试流式传输网络托管的 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: 永远不会被调用(任何其他委托(delegate)方法也不会)。

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

我已经验证所有代码都在主线程上执行,正如我在 this question 中所读到的那样一切都必须在同一个线程上。

有没有人有任何建议,或者可能是对实际调用此委托(delegate)的一些可用源代码的引用?

更新:我已经确定当 url 指向本地文件时这段代码工作正常,但当它指向远程文件时它仍然不起作用。这是预期的行为还是我可以对远程文件执行此操作?

最佳答案

AVAssetResourceLoaderDelegate 仅在我们使用“非标准/非保留”url 方案时有效。 HTTP、HTTPS 等被视为保留的 URL 方案,如果 url 具有这些方案之一,iOS 将不会进行委托(delegate)调用。我最终做的是将 my_own_http 用于 http url,将 my_own_https 用于 https url。它运作良好。还有一件事要记住,如果您有非标准方案的 URL,它可能无法在其他支持 HLS 的设备上运行。

关于ios - 未调用 AVAssetResourceLoaderDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com