URLWithString和NSURL的fileURLWithPath之间有什么区别?

在我的代码中,我必须使用URLWithString播放stream( HLS )video和fileURLWithPath播放本地video。

这两种方法有什么区别? 我应该如何使用单一方法播放这两个video。

HSLvideo结束时,我还需要将最后一帧显示为静止图像。 它现在显示黑屏时,它结束。 我应该如何做到这一点?

+URLWithString:产生一个表示给定string的NSURL 。 所以string可能是@"http://www.google.com" ,而URL则代表http://www.google.com

+fileURLWithPath:获取一个path,而不是一个URL,并产生一个表示使用file:// URL的path的NSURL 。 所以如果你给它/foo/bar/baz那么URL就代表file:///foo/bar/baz

您当然可以手动构build一个文件URLstring,并将其传递给+URLWithString: +fileURLWithPath:但是当您已经有一个path时, +fileURLWithPath:更简单,因为您不必处理转义string并将其强制转换为url格式。

类似的事情发生在我的应用程序使用AVAudioPlayer。 我试过[NSURL URLWithString:path] ,发现它无法打开某些MP3文件。 我通过像[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] fileTypeHint:AVFileTypeMPEGLayer3 error:&error] ,但错误仅仅是nil

不过,通过用[NSURL fileURLWithPath:path]replaceurl解决了这个问题。

在这两种情况下,pathpath NSString * @"/var/mobile/Containers/Data/Application/4D96D4AE-2ED4-40B0-85D2-230E1AFA90E7/Documents/01-AudioTrack 01.mp3" 0x1457a8f0还是不知道原因但现在我应该小心使用[NSURL URLWithString:]

PS。 在NSURL参考文档中,苹果说如下:

重要要为文件系统path创buildNSURL对象,请使用fileURLWithPath:isDirectory:来代替。

这明确表示[NSURL fileURLWithPath:]应该用于打开文件,尽pipe[NSURL URLWithString]也适用于某些情况。