【问题标题】:NSUrlDomainError code -1002 "unsupported URL"NSUrlDomainError 代码 -1002 “不支持的 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 方法进行这些更改。

标签: ios objective-c avplayer


【解决方案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 添加标签,以便更熟悉该技术的人看到并提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多