【问题标题】:What is difference between URLWithString and fileURLWithPath of NSURL?NSURL 的 URLWithString 和 fileURLWithPath 有什么区别?
【发布时间】:2013-04-12 10:06:08
【问题描述】:

在我的代码中,我必须使用URLWithString 来播放流媒体(HLS) 视频和fileURLWithPath 来播放本地视频。

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

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

【问题讨论】:

  • “当 HSL 视频结束时,我还需要将最后一帧显示为静止图像” 与您问题的第一部分无关。问它作为一个不同的问题!两个的价格。

标签: ios objective-c path nsstring nsurl


【解决方案1】:

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

+fileURLWithPath: 采用路径,而不是 URL,并生成一个 NSURL,它使用 file:// URL 表示路径。所以如果你给它/foo/bar/baz,URL 将代表file:///foo/bar/baz

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

【讨论】:

  • 只是对最后一部分的扩展:文件 URL 不仅仅是前面贴有“文件”一词的路径。它们的工作方式完全不同,人类不太可能正确处理这些差异。电脑可以。
【解决方案2】:

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

但是通过将 url 替换为 [NSURL fileURLWithPath:path] 解决了这个问题。

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

附言。在 NSURL Reference 文档中,Apple 表示如下:

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

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

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多