2012-02-25 5 views
0

У меня есть файл плейлиста, который дает мне еще один файл плейлиста, который также дает мне еще один файл плейлиста, непрерывно.
Как я могу воспроизвести этот файл списка воспроизведения? и где я могу найти источник видео?Файл плейлиста (m3u8) дает другой файл плейлиста бесконечно не давая никакого медиафайла

Например, у меня есть файл плейлиста. Это

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=355670 
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950 

Если я получить доступ к http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950, он дает мне другие файлы списков воспроизведения.

#EXTM3U 
#EXT-X-ALLOW-CACHE:NO 
#EXT-X-TARGETDURATION:10 
#EXT-X-MEDIA-SEQUENCE:894 
#EXTINF:11, 
media_894.ts?wowzasessionid=195968950 
#EXTINF:10, 
media_895.ts?wowzasessionid=195968950 
#EXTINF:11, 
media_896.ts?wowzasessionid=195968950 

Если у меня есть доступ к результатам, он также дает мне файлы плейлиста.

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=373764 
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1093961187 

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=382539 
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1566364859 

etc... 

Хотя я могу играть URL http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950 в сафари в моем Iphone, я хочу играть этот адрес в моем iphone приложения.
Как я могу воспроизвести расширение m3u8 самостоятельно?

ответ

1

EDIT - может быть дубликат this SO question, но если вы хотите сохранить этот файл, вам нужно перейти к следующему жесткому пути.

Easy way = Вставить UIWebView в ваше приложение и инициализировать его URL-адресом файла .m3u8. Это откроет quicktime, который понимает m3u8, и он будет воспроизводить его по мере его загрузки.

Hard way = вручную создать запрос/ответы для каждой части сеанса m3u8, а затем загрузить каждый файл .ts в свою очередь из файла списка воспроизведения. Когда вы получаете каждый «фрагмент» видео, записывайте его в файл или в память, а затем добавьте следующий «кусок» после него. Я сделал это для h.264 кодируются .m4v файл служил m3u8 и он работал (мой код слишком уродливым, чтобы вставить), но псевдокод:

  1. Позовите m3u8, экономя любое печенье, послав любые заголовки, которые могут быть важны *
  2. Разберите .m3u8 (первый файл с # EXT-X-STREAM-INF: PROGRAM-ID = 1, BANDWIDTH = 373764) и потяните наши URL.
  3. Извлеките список воспроизведения из одного из URL-адресов в файле .m3u8 (обязательно сохраните любые заголовки/файлы cookie в запросе, который может понадобиться)
  4. Проведите анализ файла плейлиста, сохранив столько метаданных, сколько вам нужно верхней части файла, создайте абсолютный URL-адрес для каждого пути .ts, а затем введите его в массив.
  5. Итерации по массиву (опять же, учитывая куки-файлы/заголовки) и выбор содержимого каждого URL-адреса в файл.
  6. Играть загруженный файл с каким Media Framework вы выбираете (поиск SO для того, как сделать это)

Если вам просто нужно играть файлы, идти легкий маршрут. Если вам нужно их сохранить, вам нужно сделать танец m3u8.

* HTTP Scoop бесценен для просмотра как m3u8 «протокол» работает и убедившись, что вы заголовки запроса/ответа являются точными - http://tuffcode.com/

* Я использовал ваниль NSURLConnection синхронные вызовы, как мой код был просто доказательство концепции, другие сетевые структуры, такие как AFNetworking, сделают это намного проще.