Ios NSUrlDomainError代码-1002“;不支持的URL“;

Ios NSUrlDomainError代码-1002“;不支持的URL“;,ios,objective-c,avplayer,Ios,Objective C,Avplayer,我正在尝试使用库来缓存我的视频。我收到这个错误: 错误域=NSURLErrorDomain Code=-1002“不支持的URL”UserInfo={NSLocalizedDescription=不支持的URL,NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nserrorFailingUrKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nsurlererrorRelatedDu

我正在尝试使用库来缓存我的视频。我收到这个错误:

错误域=NSURLErrorDomain Code=-1002“不支持的URL”UserInfo={NSLocalizedDescription=不支持的URL,NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nserrorFailingUrKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nsurlererrorRelatedDurlSessionTaskErrorKey=( “LocalDataTask

导致此问题的代码是:

  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];
- (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是
https://firebasestorage.googleapis.com/v0/b/app_domain/o/ed8f47cc-e9ee-43d0-848e-06edaaeaab70.mp4?alt=media&token=4185c72c-252e-4019-8c1c-e30b4ccbe597


为了安全起见,我对url做了一点更改。但它在浏览器中播放,正如我所说,它在没有缓存代码的情况下运行良好。

根据错误描述,您的url末尾有额外的斜杠
/


NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/
请求您的Url,返回404未找到!

我将该库导入到您提到的flatter插件中,并能够从有效的Firebase Url成功加载视频。我通过mediaDownloader添加了一些日志记录:didReceiveData:在VIResourceLoadingRequestWorker类中,缓存似乎正在正常进行

已将initWithURL:frameUpdater:method更新为如下所示:

AVPlayerItem* item = [AVPlayerItem playerItemWithURL:url];
return [self initWithPlayerItem:item frameUpdater: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,而您说您的URL肯定可以在浏览器中使用)
  • 在你的问题中添加一个flatter标签,以便更熟悉该技术的人可以看到它并能够提供帮助

事实上,我后来添加了斜杠,只是为了检查这是否是问题所在。即使末尾没有斜杠,也会出现错误。请您显示更多使用该库的代码,好吗?我无法使用有效的Firebase视频URL和您目前发布的代码重现您的问题。@BenW是名为v的颤振插件的代码ideo_播放器。我正在尝试向其添加缓存支持。我正在对
initWithUrl
方法进行这些更改。