2013-04-19 2 views
14

В моем коде я должен использовать URLWithString для воспроизведения потокового видео (HLS) и fileURLWithPath для воспроизведения локального видео.В чем разница между URLWithString и файломURLWithPath из NSURL?

В чем разница между этими двумя методами? Как использовать один метод для воспроизведения обоих видео.

Также мне нужно показать последний кадр как неподвижное изображение, когда заканчивается видео HSL. Теперь он показывает пустой экран, когда он заканчивается. Как мне это достичь?

+0

«Также мне нужно показать последний кадр как неподвижное изображение, когда видео HSL заканчивается» Не связано с первой частью вашего вопроса. Задайте это другим вопросом! Два по цене одного. – matt

ответ

15

+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.

+4

Просто для расширения на последней части: URL-адрес файла - это не просто путь со словом «файл», застрявшим спереди. Они работают совсем по-другому, и маловероятно, чтобы человек правильно справлялся с различиями. Компьютер делает. – matt

1

Аналогичные вещи произошли в моем приложении, которое использует 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] также работает в некоторых случаях.

Смежные вопросы