Файл списка воспроизведения (m3u8) дает другой файл списка воспроизведения бесконечно, не давая никакого медиа-файла - PullRequest
0 голосов
/ 25 февраля 2012

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

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

#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, я хочу воспроизвести этот URL в своем собственном приложении для iPhone.
Как я могу воспроизвести расширение файла m3u8 самостоятельно?

1 Ответ

1 голос
/ 02 апреля 2012

РЕДАКТИРОВАТЬ - Может быть дубликатом этого SO вопроса , но если вы хотите сохранить файл, вам придется пройти сложный путь, указанный ниже.

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

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

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

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

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

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

...