Ios NSUrlDomainError代码-1002“;不支持的URL“;
我正在尝试使用库来缓存我的视频。我收到这个错误: 错误域=NSURLErrorDomain Code=-1002“不支持的URL”UserInfo={NSLocalizedDescription=不支持的URL,NSErrorFailingURLStringKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nserrorFailingUrKey=4185c72c-252e-4019-8c1c-e30b4ccbe597/,nsurlererrorRelatedDurlSessionTaskErrorKey=( “LocalDataTask 导致此问题的代码是: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
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/
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标签,以便更熟悉该技术的人可以看到它并能够提供帮助
initWithUrl
方法进行这些更改。