Назад | Перейти на главную страницу

HTTP-адаптивная потоковая передача битрейта

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

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

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

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

-Адам

Обновить

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

HTTP Live Streaming - черновик-pantos-http-live-streaming-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 в виде последовательности небольших сегментов контента в формате TS MPEG-2 (.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 width=”640” height=”480” >
   <source src=”content1/content1.m3u8” />
</video>

По-прежнему много вопросов без ответов, но, вероятно, этого достаточно для начала.

-Адам

Нет сегментатора Windows - сегментатор iPhone не работает должным образом по неизвестным причинам. Вы должны быть зарегистрированным разработчиком iPhone, чтобы иметь возможность скачать сегментатор.

Акамай описывает это как таковое:

Начиная с iPhone OS версии 3.0 и QuickTime X, вы можете отправлять потоковое аудио и видео через HTTP с обычного веб-сервера для воспроизведения на iPhone, iPod touch или других устройствах, например настольных компьютерах, без ограничений прогрессивной загрузки.

Новый протокол потоковой передачи поддерживает несколько битрейтов и автоматически переключается на оптимальный битрейт в зависимости от условий сети для обеспечения плавного и качественного воспроизведения. Эта реализация также обеспечивает шифрование мультимедиа и аутентификацию пользователей по HTTPS, что позволяет издателям защитить свою работу. Контент как в реальном времени, так и по запросу может быть доставлен с использованием спецификации 3.0.

HTTP Streaming на iPhone состоит из трех частей: серверного компонента, сети Akamai и клиентского программного обеспечения.

В типичной конфигурации аппаратный кодер принимает аудио-видео вход и превращает его в транспортный поток MPEG-2, содержащий видео H.264 и аудио AAC или HE-AAC. Затем кодированный поток разделяется на серию коротких медиафайлов с помощью модуля сегментации потока. Сегментер также создает и поддерживает индексный файл, содержащий список коротких мультимедийных файлов, которые были созданы. Эти файлы размещаются на веб-сервере.

Медиаплеер, встроенный в ОС iPhone, получает ссылку на индексный файл, затем он запрашивает медиафайлы по порядку и воспроизводит их без пауз или разрывов между сегментами.

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

Свиточ, а у вас есть снежный барс? он поставляется с сегментером потока Apple. просто введите man mediastreamsegmenter, чтобы просмотреть руководство.