В чем разница между URLWithString и файломURLWithPath из NSURL?
В моем коде я должен использовать URLWithString
для воспроизведения потокового видео (HLS
) и fileURLWithPath
для воспроизведения локального видео.
В чем разница между этими двумя методами?
Как использовать один метод для воспроизведения обоих видеороликов.
Также мне нужно показать последний кадр как неподвижное изображение, когда заканчивается видео HSL
. Теперь он показывает пустой экран, когда он заканчивается. Как я должен это достичь?
Ответы
Ответ 1
+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.
Ответ 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:]
.
PS. В справочном документе NSURL Apple заявила следующее:
ВАЖНО Чтобы создать объекты NSURL для путей к файловой системе, используйте fileURLWithPath: isDirectory: вместо этого.
который явно указывает [NSURL fileURLWithPath:]
, должен использоваться для открытого файла, хотя [NSURL URLWithString]
также работает в некоторых случаях.