NSUrlDomainError 代码 -1002 “不支持的 URL”
Posted
技术标签:
【中文标题】NSUrlDomainError 代码 -1002 “不支持的 URL”【英文标题】:NSUrlDomainError code -1002 "unsupported URL" 【发布时间】:2020-03-03 10:08:22 【问题描述】:我正在尝试使用 this 库来启用缓存我的视频。我收到此错误:
错误域=NSURLErrorDomain 代码=-1002 "不支持的 URL" UserInfo=NSLocalizedDescription=不支持的 URL, NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/, NSErrorFailingURLKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/ =( “本地数据任务 .
导致这个问题的代码是:
VIResourceLoaderManager *resourceLoaderManager = [VIResourceLoaderManager new];
self.resourceLoaderManager = resourceLoaderManager;
AVPlayerItem *playerItem = [resourceLoaderManager playerItemWithURL:url];
return [self initWithPlayerItem:playerItem frameUpdater:frameUpdater];
但是,如果我删除了为该库添加的行,那么它可以完美地工作(没有缓存),如下所示:
AVPlayerItem* item = [AVPlayerItem playerItemWithURL:url];
return [self initWithPlayerItem:item frameUpdater:frameUpdater];
有问题的网址是https://firebasestorage.googleapis.com/v0/b/app_domain/o/ed8f47cc-e9ee-43d0-848e-06edaaeaab70.mp4?alt=media&token=4185c72c-252e-4019-8c1c-e30b4ccbe597
为了安全起见,我稍微更改了网址。但它在浏览器中播放,正如我所说,它在没有缓存代码的情况下运行良好。
【问题讨论】:
能否请您展示更多使用该库的代码?我无法使用有效的 Firebase 视频 URL 和您迄今为止发布的代码重现您的问题。 @BenW this 是一个名为 video_player 的颤振插件的代码。我正在尝试为其添加缓存支持。我正在对initWithUrl
方法进行这些更改。
【参考方案1】:
根据错误描述,您的网址末尾有额外的斜杠/
:
NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/
【讨论】:
实际上我后来添加了斜线只是为了检查这是否可能是问题。即使末尾没有斜线也会发生错误。【参考方案2】:请求您的网址,返回 404 未找到!
【讨论】:
【参考方案3】:我将该库导入到您提到的 Flutter 插件中,并且能够从有效的 Firebase URL 成功加载视频。我通过 mediaDownloader:didReceiveData: 在 VIResourceLoadingRequestWorker 类中添加了一些日志记录,看起来缓存正在正常进行。
将 initWithURL:frameUpdater: 方法更新为如下所示:
- (instancetype)initWithURL:(NSURL*)url frameUpdater:(FLTFrameUpdater*)frameUpdater
VIResourceLoaderManager* resourceLoaderManager = [[VIResourceLoaderManager alloc] init];
// Uncomment this to test with an empty cache, so the manager will re-cache
// [resourceLoaderManager cleanCache];
AVPlayerItem* item = [resourceLoaderManager playerItemWithURL:url];
self = [self initWithPlayerItem:item frameUpdater:frameUpdater];
if (self)
self.resourceLoaderManager = resourceLoaderManager;
self.resourceLoaderManager.delegate = self;
return self;
看看是否有任何机会,上述更改对您有用,但似乎它可能是别的东西。
从某个地方使用更简单的测试 URL 尝试您的代码,看看它是否确实与实际 URL 相关(值得怀疑,因为我在其他 Firebase 视频 URL 上取得了成功,而您说您的绝对可以在浏览器中使用)
在您的问题中为 Flutter 添加标签,以便更熟悉该技术的人看到并提供帮助。
【讨论】:
以上是关于NSUrlDomainError 代码 -1002 “不支持的 URL”的主要内容,如果未能解决你的问题,请参考以下文章
Java中普通代码块,构造代码块,静态代码块区别及代码示例2 构造代码块