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中普通代码块,构造代码块,静态代码块区别及代码示例

Java中普通代码块,构造代码块,静态代码块区别及代码示例2 构造代码块

Java中普通代码块,构造代码块,静态代码块区别及代码示例2 构造代码块

上古卷轴5代码

低代码究竟是啥?

如何写代码?