Работа с видео

индекс
131,61

Чем плох Apple HTTP LiveStreaming

При разработке айфона Apple решила спроектировать и реализовать свой протокол для передачи видео. Несмотря на то, что существует масса протоколов: RTSP, MPEG-TS, HTTP (раздача файлов), RTMP, все они имеют какие-то слабые стороны. Все не-HTTP протоколы объединяет одна общая проблема: они режутся корпоративными файрволами и плохо переносят сильные флуктуации качества интернета.

Раздача файлов по HTTP имеет другую проблему: либо невозможность просмотра прямого эфира, либо отсутствие перемотки по потоку/файлу. Т.е. либо раздаем поток как flv-файл (endless http streaming), либо раздаем mp4 и тогда никакого прямого эфира.


Концепция протокола


Душа Microsoft реинкарнировалась в Apple и та решила пойти своим уникальным путём, плюнув на все существующие наработки. Они предложили брать видеопоток, резать его на сегменты где-то по 10 секунд, укладывать на диск и раздавать плейлист в котором урлы к этим файлам указаны по порядку просмотра. Этот подход позволяет перенести на браузер детекцию скорости до сервера, переключение между потоками (если интернета мало, просто скачиваем сегмент поменьше из соседнего плейлиста), а так же сильно сократить издержки на стриминг, ведь промежуточные прокси должны активно кешировать сегменты, тем самым многократно снижать трафик. Дьявол в деталях, ведь Microsoft SmoothStreaming устроен почти точно так же, но не так!

Проблема хранения


Детали кроются в том способе, которым упаковывается поток. Если вы хотите раздать через Apple HLS mp4 файл, то прийдется дополнительно раскошелиться, ведь поток должен быть упакован в MPEG-TS. MPEG-TS — это транспортный контейнер с очень широкими возможностями и спроектированный для передачи в том числе и вне IP сетей. Как следствие в нём есть много дублирующей информации, рассчитанной для детекции и даже коррекции ошибок. При передаче по HTTP эта информация избыточна, как результат в зависимости от ситуации объём хранения увеличивается на 15-30% Вот так с нихрена взяли и увеличили. Сравните это с Microsoft Streaming, в котором раздаются mp4 сегменты.

Apple предлагает брать открытый сегментер, пропускать через него файл и на диск лягут уже нарезанные сегменты с плейлистом. Т.е. вместо 30% роста объёма хранения, предлагается этот объём увеличить на 130%, ведь для других клиентов мы должны хранить mp4 файлы.

Самое то главное, что такой способ хранения в сотне маленьких файлов наносит ощутимый удар по файловой системе.

Логичное желание для устранения этой проблемы взять для этого медиастриминговый сервер типа erlyvideo, который умеет сегментировать на лету: он берет mp4 файл и перепаковывает нужный отрезок времени в MPEG-TS сегмент. Тут мы подходим к самой большой проблеме,

Проблема дизайна



Самая большая проблема это опять же выбор MPEG-TS. Дело в том, что для контроля за ошибками в этом контейнере используются continuity conters, это 4-х битные счетчики идущие в каждом аудио и видеоканале. Они должны идти связанно: 8,9,10,11,12,13,14,15,1,2. Если счетчики в соседних блоках не стыкуются, плеер в айфоне начинает спотыкаться.

Из этого следует очень неприятная ситуация: каждый следующий сегмент зависит от всех предыдущих, а значит что для перемотки в конец файла надо сформировать все сегменты до необходимого, потому что иного способа вычислить счётчик нет. Если этого не сделать, то когда пользователь отмотает немного назад, а потом дойдет до уже скачанного сегмента, у него будет рывок.

Как же надо было сделать?



А сделать надо было так: не придумывать собственного велосипеда с треугольными колесами, а взять протокол Microsoft Smooth Streaming, в котором всё упаковывается в mp4 сегменты. Их очень легко генерировать на лету, они не завязаны друг на друга.
+37
7 октября 2010, 14:05
10

комментарии (36)

0
spycode #
Это то да, только Microsoft Smooth Streaming был анансирован гораздо позже чем Apple HTTP LiveStreaming?

Хотя може я ошибаюсь, поправьте.
+13
erlyvideo #
Я не нашел точных дат анонса, но они отличаются несильно. Так что не было эффекта второго игрока: инженеры эппла просто бездарно справились с поставленной задачей при наличии тех же вводных, что и у микрософта.
0
Greendq #
Ну, инженеры «одной фруктовой компании» просто решили найти замену для флэша — и нашли. По-моему, тоже не очень удобно, но вполне съедобно.
0
erlyvideo #
Съедобно, но с серьезными проблемами и самое огорчительное, что это ненужные проблемы, которые можно было обойти потратив пол-дня на размышления.
+3
gigimon #
технология MS может и лучше, но она конкурирующая
+6
erlyvideo #
О да. А ещё они — империя зла, которая в кой-то веки сделала протокол из стандартных компонент, но это всё безусловно лишь отвлекающий маневр.
+2
FlexIDK #
Я про Microsoft Smooth Streaming слышал намного раньше чем про Apple HTTP LiveStreaming
примерно года назад Microsoft его демонстрировали, плюс в промо участвовали проекты Smotri.com
А про Apple HTTP LiveStreaming я услышал недавно, когда рассказывали, про, или iPhone 4, или новый Apple TV
+1
int80h #
Они появились практически одновременно в прошлом году — Microsoft весной, Apple летом.
0
vgrayster #
А вот netflix эту технологию использует уже более двух лет :)

blog.ioshints.info/2009/07/netflix-summary.html
0
Greendq #
Чёрт, вот я не знал, что нельзя делать live-streaming по http протоколу через бесконечный flv-файл, когда мы делали стриминг для местного телевидения (http://www.jurnaltv.md/ — стрим слева, сайт на румынском языке, как и телевидение). Отставание около 15 секунд. Некоторые телевидения (типа российского ОРТ) называют лайвом отставание минут на 15 — и ничего.
+1
erlyvideo #
Я не понимаю, как ваши слова вяжутся с написанным мной и реальностью, но даже 15 секунд заказчика не устраивают, потому что по RTMP этого отставания нет.
+1
Greendq #
Ну у всех заказчики разные — я просто про безаппеляционность утверждения, что на http лайва не сделать. У нашего заказчика куча дневных посетителей именно из офисов, где все сидят за проки и в основном — http-only. Соответственно, никакой другой протокол им не подходит. А RT*P протоколы хоть и позволяют проксировать траффик, но это так через жжжжж и так стрёмно работает, что VLC — самое оптимальное решение для данного дела.
+1
erlyvideo #
Вопрос не в том, что плох или хорош HTTP: это действительно хорошее решение когда 10 секунд не страшны. Вопрос в том, что у Apple самая отвратная реализация.
+1
Greendq #
Как раз-таки я из статьи понял, что ругается именно HTTP-стриминг. Из личной практики как раз могу сказать наоборот — с HTTP меньше всего проблем. Если народу интересно — могу описать, как мы на основе VLC реализовали стриминг для телевидения. Всё равно собираемся делать следующую версию, которая позволит отказаться от флеша вообще — так что секретов нет.
Кому интересно могут почитать и сей полезный документ — andrewsblog.org/a_review_of_http_live_streaming.pdf
+1
erlyvideo #
Так даже и у адоба появился http стриминг. Для потоков с невысоким требованием к задержке он скорее всего станет стандартом де-факто. Просто очень грустно, что на большом количестве устройств сам собой образовался стандарт, который левой пяткой проектировали.
–2
dieinzige #
Максим, как же так; но некоторые люди делают лайв))Может они где-то ошиблись, и надо что бы все неработало?)
А http-live streaming замечательная вещь- дешевый стриминг, который замечательно работает… и легко реализуется(с нулевой задержки о сложности реализации сказать не могу, но ведь сделали — значит можн).
ну а что файлики надо порезать… ну в чем проблема?)
0
erlyvideo #
Ваня, а ты меньше выеживайся, урл давай. Если урла на котором будет секунда-две задержки не найдешь, то не тявкай, пожалуйста.
+1
diamant #
А я думал, про Facetime напишут…
0
erlyvideo #
Я бы с радостью почитал, потому что если в него можно засунуть RTSP урл, то я с радостью это сделаю.
+1
gaploid #
По HTTP Live есть и довольно давно, даже уже есть MS smooth streaming Live отставание там около 4 секунд, но это по причине перекодирования в mpeg4 на софтверном уровне на железке это еще быстрее может быть. Тут вопрос что такое live, в на ТВ к примеру с шильдиком лайв может быть отставание несколько часов и это ок.

Вот ссылка про Smooth streaming live blogs.msdn.com/b/expressionencoder/archive/2010/09/22/10042763.aspx?wa=wsignin1.0
0
erlyvideo #
Это, кстати, скорее миф про скорость железок. Core i7 куда быстрее специального софта, а с libx264 которая сейчас вышла на 30мс задержки очень тяжело бодаться. Правда по факту обычно речь идет про 2 сек., но всё таки не 15 =)

Smooth streaming я ещё буду делать, но проблема в том, что он работает там, где уже есть флеш, а http live streaming есть на устройствах, на которых судя по всему, нет больше ничего.
+1
gaploid #
Есть такая штука как IIS media services он умеет вещать как для MS smooth streaming так и для apple streaming. Через IIS Transformation manager можно автоматом переводить во все эти форматы и все это бесплатно. С одной стороны удобно один тип сервера для вещания, но минус что одни и те же данные нужно хранить много раз. Туда еще и система защиты контента встраивается хорошо.
0
erlyvideo #
Наверное, если он удобен, то и виндовс можно развернуть. erlyvideo сейчас умеет только http live streaming раздавать (кроме RTMP, конечно)
+1
ktototam #
А про минусы и недостатки Microsoft Smooth Streaming вы можете рассказать?
0
erlyvideo #
Увы, про него я читал лишь спецификацию и она мне понравилась гораздо больше из-за использования фрагментного формата упаковки mp4 (похоже на f4v).

0
Devd #
Эта спецификация: «IIS Smooth Streaming Technical Overview»?
Или другая? Когда я переписывался с его разработчиком,
он писал что ее пока нет в нормальном виде.
+6
inye #
Очнитесь!

1) MPEG2 TS имеет одно гигантское преимущество перед IsoMedia: он хорошо подходит для проигрывания аппаратными декодерами. Поэтому, как бы смешно ни звучало, MPEG2 TS обеспечивает более низкое энергопотребление, тепловыделение и время жизни батарейки.

2) Ровный continuty counter на границе файлов без проблем обеспечивается не более чем 15-ю пакетами стаффинга, то есть не более чем 2820 лишних байта на файл.

В итоге: Apple Streaming более дружелюбен к мобильным устройствам и STB, для чего он в общем-то и проектировался, но жрёт больше трафика. Называть применение транспортного потока «отвратной реализацией», не зная всех деталей ISO 13818-1 по меньшей мере некорректно.
0
erlyvideo #
1) Я об этом не подумал. А ты уверен, что в айпаде он аппаратно проигрывается?

2) Мы с тобой это обсуждали и пришли к выводу, что не получается. Нельзя воткнуть нулевой пакет, что бы выровнять границу, потому что это уже не принимает айфон. Я с радостью погляжу на пример потока, в котором это решено.

+1
inye #
Я не могу быть уверен совершенно точно, но принято считать, что в Apple A4 встроен аппаратный декодер видео и аудио.

Обсуждения проблем с CC на границах как-то не припоминаю. Не нулевые пакеты (ты же про 0x1fff?), а PES-пакет того же PID, того же потока, того же типа, забитый stuffing_bytes с нулём байт данных. В крайнем случае — подрегулировать количество стаффинга в одном из PES-пакетов, это должно сработать даже в гипотетическом (хотя и маловероятном) случае декодера, который думает, что умнее спецификации. Я слегка заврался в том, что таких пакетов их понадобится не более 15ти на файл, их понадобится не более 15ти на каждый PID.

Лучше бы эти горькие и пёстрые подробности как-нибудь обсудить в личке.
0
erlyvideo #
Короче, я много времени потратил на попытки выровнять конец, но хрен чего вышло. Опять же, это ни коем образом не означает, что я всё сделал правильно.

В личке бы обсудить, да тебя теперь в аське не видать =)
+1
cepera_ang #
А передача большего количества трафика по беспроводной сети (особенно если это сотовая связь) не уравняет ли выгодну от более низкого энергопотребления процессора при декодировании?
0
inye #
Не уравняет. Мобильные терминалы, способные, скажем, 12 часов работать от аккумулятора в режиме передачи данных — не редкость. Найти ноутбук, способный проигрывать видео (декодируя его при этом на своём CPU; устройства с аппаратным декодером, подобным iPad не в счёт) хотя бы 3 часа — проблема.
0
Pilot34 #
Apple воспользуется наработками Microsoft? Не смешите! Так же и Микрософт не воспользуется Эппловскими. Это издержки современного устройства мира) Остается обсуждать — кто сделал лучше и почему. В свое время смотрел иногурацию Обамы, она вроде бы была Микрософтом сделана — работало хорошо. Презентацию Джобса последнюю пропустил, не смогу сравнить :(

Apple обычно делает так, чтобы пользователю смотрелось приятнее, а программисты как-нибудь помучаются и разберутся. Может и тут впечатления пользователя лучше от просмотра? А место на сервере можно и увеличить в два раза.

> Раздача файлов по HTTP имеет другую проблему: либо невозможность просмотра прямого эфира, либо отсутствие перемотки по потоку/файлу

А как без http можно перематывать прямой эфир? В прошлое?
0
erlyvideo #
Ну что вы, технологии Apple позволяют перематывать в будущее, неужели не видели их Time Machine =)

Я говорил про таймшифт — стандартную фичу у телеприставок или видеорегистраторов.
0
cepera_ang #
Да ладно вам! Что значит не смешите? Современные крупные компании направо и налево покупают друг у друга технологии, лицензии и разработки.
0
dmitskevich #
Спасибо за статью!

(одна ошибочка бросилась в глаза — continuity coUnters)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.