Как работает потоковая передача по протоколу HTTP с адаптивным битрейтом на iPhone?

StackOverflow https://stackoverflow.com/questions/1070800

Вопрос

Apple включила потоковую передачу по протоколу HTTP Adaptive Bitrate в iPhone OS 3.0, в частности, Safari обрабатывает это автоматически.

Я бы хотел поиграть с этим недорогим способом, но я ожидаю, что для этого потребуется пользовательский HTTP-сервер в худшем случае и интересные сценарии PHP / etc в лучшем случае.

Но сначала мне нужно знать, в чем заключаются различия в протоколах или стандартах.HTTP достаточно прост как протокол, но адаптивный битрейт означает, что размер файла отличается, расположение фрагментов отличается при разных битрейтах и т.д.Например, сообщает ли клиент серверу что-либо особенное о потоке во время его загрузки, или все это обрабатывается на стороне сервера?

Устранение пауз буферизации для конечного пользователя очень привлекательно как для прямых, так и для предварительно записанных видеопотоков, а выполнение обоих операций по протоколу HTTP еще лучше, учитывая, что многие сети и правительства ограничивают трафик, не связанный с портом 80.

  • Каковы технические детали потоковой передачи по протоколу HTTP adaptive bitrate, особенно реализация Apple?
  • Где это лучше всего реализовано - частично на самом HTTP-сервере, частично в моде, в скрипте ...?

  • Какие изменения требуются на стороне клиента, если бы кто-то хотел реализовать это в приложении?

Это было полезно?

Решение

Обновить

Похоже, Apple подготовила проект предложения IETF, и некоторые люди уже работают над сегментаторами:

HTTP Прямая трансляция - черновик-пантос-http-прямая трансляция-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt

Потоковая передача HTTP для iPhone с помощью FFMpeg и Segmenter с открытым исходным кодом
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/


Похоже, HTTP-сервер действует просто как тупой HTTP-сервер.Просмотр примера веб-сайта, предоставленного Akamai, дает мне достаточно информации, чтобы начать работу со статической потоковой передачей контента.

http://iphone.akamai.com/

Официальный документ ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) предоставляет информацию о кодировке транспортного потока, поэтому потоки .ts просты.

Кодировщик (или отдельный сегментатор процесс) будет создавать H.264 / AAC контент в виде последовательности небольших фрагментов контента в формате MPEG-2 TS (.ts).Существует также индексный файл M3U8, который ссылается на сегменты;в случае живого контента M3U8 постоянно обновляется, чтобы отражать последний контент.

Кодировка H.264 должна быть однопроходной Базовый профиль, изменение порядка кадров отключено.Предлагаются ключевые кадры каждые 5 секунд, в идеале четный делитель длины выбранного сегмента.

Веб-сайт предоставляет файл M3U8, который является просто списком воспроизведения M3U, но в формате кодировки символов UTF-8.

Затем этот файл ссылается на файл M3U8 для каждого битрейта.Я предполагаю, что все они должны иметь вырезы в одних и тех же положениях (например, каждые 2 или 10 секунд), чтобы переключение могло быть плавным.Похоже, что он полностью управляется клиентом - клиент решает, как измерить пропускную способность и какую версию он получит.

Содержимым основного файла является:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8

Тогда каждый из остальных файлов будет:

привет/prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

med/prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

lo/prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

Это работает с тегом HTML 5 video:

<video width="640" height="480">
   <source src="content1/content1.m3u8" />
</video>

Остается еще много вопросов без ответов, но этого, вероятно, достаточно, чтобы начать.

Другие советы

И небольшой проигрыватель на Python + GStreamer http://code.google.com/p/hls-player/

Смотрите это для кодировщика с открытым исходным кодом, сегментатора и некоторых других интересных вещей :)

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top