URLWithString和NSURL的fileURLWithPath有什么区别?

时间:2013-04-19 04:50:33

标签: ios objective-c path nsstring nsurl

在我的代码中,我必须使用URLWithString来播放流式传输(HLS)视频,并使用fileURLWithPath来播放本地视频。

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

此外,我需要在HSL视频结束时将最后一帧显示为静止图像。它结束时现在显示空白屏幕。我该如何实现这个目标?

2 个答案:

答案 0 :(得分:17)

+URLWithString:生成NSURL,表示给定的字符串。因此,字符串可能为@"http://www.google.com",网址代表http://www.google.com

+fileURLWithPath:采用路径而不是网址,并使用NSURL网址生成表示路径的file://。因此,如果您提供/foo/bar/baz,则网址将代表file:///foo/bar/baz

您当然可以手动构建文件URL字符串并将其传递给+URLWithString:,但是当您已有路径时,+fileURLWithPath:更易于使用,因为您不必处理转义字符串并将其强制转换为URL格式。

答案 1 :(得分:2)

类似的事情发生在我的应用程序中使用AVAudioPlayer。我试过[NSURL URLWithString:path]并发现无法打开某些mp3文件。我通过[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] fileTypeHint:AVFileTypeMPEGLayer3 error:&error]之类的行查看了错误,但错误只是nil

然而,通过用[NSURL fileURLWithPath:path]替换网址解决了问题。

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

PS。在NSURL参考文档中,Apple如下所述:

  

重要   要为文件系统路径创建NSURL对象,请使用fileURLWithPath:isDirectory:而不是。

清楚地表明[NSURL fileURLWithPath:]应该用于打开文件,但[NSURL URLWithString]也适用于某些情况。