在我的代码中,我必须使用URLWithString
来播放流式传输(HLS
)视频,并使用fileURLWithPath
来播放本地视频。
这两种方法有什么区别? 我应该如何使用单一方法播放两个视频。
此外,我需要在HSL
视频结束时将最后一帧显示为静止图像。它结束时现在显示空白屏幕。我该如何实现这个目标?
答案 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]
也适用于某些情况。