РЕДАКТИРОВАТЬ - Может быть дубликатом этого SO вопроса , но если вы хотите сохранить файл, вам придется пройти сложный путь, указанный ниже.
Простой способ = встроить UIWebView в ваше приложение и инициализировать его с помощью URL-адреса файла .m3u8.Это откроет quicktime, которое понимает m3u8, и будет воспроизводить его во время загрузки.
Hard way = вручную создать запрос / ответы для каждой части сеанса m3u8, а затем загрузить каждый файл .ts по очереди изфайл плейлиста.Получив каждый «фрагмент» видео, запишите его в файл или память, а затем добавьте следующий «фрагмент» после него.Я сделал это для файла .m4v в кодировке h.264, который служит m3u8, и это сработало (мой код слишком уродлив, чтобы вставить), но псевдокод:
- Получите m3u8, сохранив любойотправленные файлы cookie и любые заголовки, которые могут быть важны *
- Анализ .m3u8 (первый файл с # EXT-X-STREAM-INF: PROGRAM-ID = 1, BANDWIDTH = 373764) и извлекитеurls.
- Извлечение списка воспроизведения из одного из URL-адресов в файле .m3u8 (обязательно сохраняйте заголовки / файлы cookie в запросе, который может потребоваться)
- Анализируйте файл списка воспроизведения, сохраняястолько метаданных, сколько вам нужно из верхней части файла, создайте абсолютный URL для каждого пути .ts, затем поместите его в массив.
- Перебирайте массив (опять же, помня о файлах cookie / заголовках)) и извлеките содержимое каждого URL-адреса .ts в файл.
- Воспроизведите загруженный файл с любым Media Framework, который вы выберете (найдите SO, как это сделать)
Если выпросто нужно воспроизвести файлы, идти легким путем.Если вам необходимо сохранить их, вам нужно выполнить танец m3u8.
* HTTP Scoop неоценим для наблюдения за тем, как работает «протокол» m3u8, и для обеспечения точности ваших заголовков запроса / ответа - http://tuffcode.com/
* Я использовал ванильные синхронные вызовы NSURLConnection, так как мой код был просто доказательством концепции, другие сетевые инфраструктуры, такие как AFNetworking, облегчат это.