在我的代码中,我必须使用URLWithString
来播放流(HLS
)视频和fileURLWithPath
播放本地视频。
这两种方法有什么区别?我应该如何使用单一方法播放两个视频。
我还需要在HSL
视频结束时将最后一帧显示为静止图像。它现在结束时显示空白屏幕。我应该如何实现这一目标?
在我的代码中,我必须使用URLWithString
来播放流(HLS
)视频和fileURLWithPath
播放本地视频。
这两种方法有什么区别?我应该如何使用单一方法播放两个视频。
我还需要在HSL
视频结束时将最后一帧显示为静止图像。它现在结束时显示空白屏幕。我应该如何实现这一目标?
+URLWithString:
产生一个NSURL
表示给定字符串的一个。所以字符串可能是@"http://www.google.com"
并且 URL 代表http://www.google.com
.
+fileURLWithPath:
接受路径,而不是 URL,并NSURL
使用 URL 生成表示路径的file://
。因此,如果你给它/foo/bar/baz
URL 将代表file:///foo/bar/baz
.
您当然可以手动构造一个文件 URL 字符串并将其传递给+URLWithString:
,但是+fileURLWithPath:
当您已经有路径时使用起来更简单,因为您不必处理转义字符串并将其强制转换为 URL 格式。
类似的事情发生在我使用 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:]
.
PS。在 NSURL Reference 文档中,Apple 表示如下:
重要要为文件系统路径创建 NSURL 对象,请改用 fileURLWithPath:isDirectory:。
这清楚地表明[NSURL fileURLWithPath:]
应该用于打开文件,但[NSURL URLWithString]
也适用于某些情况。