HTTP Live Streaming: лучшие рецепты

This post is also available in: Английский

ios-video-hls

Создание идеальных с технической точки зрения приложений, как правило, является чрезвычайно сложной и трудоемкой задачей. При этом полезная информация зачастую рассеяна по множеству источников. Это относится, в том числе, к разработке видеоприложений для iOS. В данной статье собрана наиболее важная и полезная информация, позволяющая качественно использовать весь спектр возможностей HTTP Live Streaming, а также список первоисточников. Данные материалы будут полезны всем читателям, заинтересованным в создании качественных и удобных для пользователей видеосервисов.

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

  • Старт с низкого качества видео. Для старта видео требуется не менее одного чанка. Соответственно, чем меньше размер одного чанка, тем быстрее запустится видео. Уменьшение битрейта стартового потока и уменьшение длительности чанка приводит к ускорению запуска видео. Мы рекомендуем длительность чанка 4-8 секунд и стартовый битрейт 200-300 Кбит/с. Таким образом, для начала воспроизведения видео пользователю потребуется загрузить максимум 300 кбайт.
  • Оптимизация списков воспроизведения. Списки воспроизведения могут занимать существенную часть в общем потоке данных, особенно при небольших размерах чанков и длительном контенте (несколько часов). В большинстве случаев при передаче списков воспроизведения видеоплееру рекомендуется их архивировать.
  • Ключевые кадры. Желательно наличие по крайней мере одного IDR-кадра на сегмент — предпочтительно, в самом начале сегмента. Кроме того, при передаче видео в сотовых сетях рекомендуется создавать ключевые кадры не реже одного раза в 3 секунды.
  • TS Оверхед. HTTP LS использует MPEG TS в качестве контейнера, поэтому очень важно минимизировать оверхед TS (должен быть меньше 10% даже при низком качестве видео). В данном случае стоит проводить замеры реальных битрейтов по дампам трафика и оптимизировать используемые упаковщики (сегментеры).
  • Параметр Target duration в списке воспроизведения. Данный параметр влияет на время запуска, но Apple рекомендует устанавливать его в 10 секунд, потому что при более низких значениях повышается вероятность буферизации, особенно в сотовых сетях с большими задержками. Также не рекомендуется создавать сегменты, длительность которых превышает 20 секунд.
  • Динамический битрейт. Встроенный в iOS механизм адаптивного стриминга работает оптимально при точно указанных битрейтах в вариантном плейлисте (с учетом трафика самого плейлиста). При этом для потоков с изменяющимся битрейтом нужно указывать значение ближе к максимальному. В противном случае возможны неверные решения о смене текущего видео потока. Соседние битрейты должны отличаться по скорости в 1,5 — 2 раза.
  • Потоки «audio only». Аудиокодек HE-AAC существенно более эффективен и поддерживается большинством устройств. Доставку каналов audio only рекомендуется реализовывать при помощи MPEG Elementary Stream, а не MPEG Transport Stream (существенно меньший оверхед).

В ходе разработки видеоплеера вы можете получить полезную информацию из журнала HTTP Live Streaming (accessLog). Он содержит данные о том, как происходило автоматическое переключение, какие битрейты использовались и т.п. Подробности о доступной в логе информации здесь. Основываясь на этих данных, вы сможете собрать данные видеоаналитики по своим пользователям.

Дополнительные рекомендации
В случае онлайн-трансляций видео буферизации возможны также при задержках в CDN, а также в тех случаях, когда время обновления плейлиста слишком маленькое и сервер не успевает вовремя генерить сегменты. Для оптимизации механизма перемотки рекомендуется использовать нецелые (фактические) значения длительности сегментов: в противном случае может накапливаться ошибка.

Если ваше приложение предполагает использование на разных устройствах, в списке можно указать различное качество видео при разном разрешении экрана. Таким образом вы сможете выдавать разное видео на iPad с дисплеем Retina и на сравнительно старый iPhone.

Протокол HTTP Live Streaming также предусматривает механизмы обеспечения отказоустойчивости (указание резервных источников видео). Эта возможность может быть полезна для повышения надежности ваших сервисов.

Источники знаний
Краткий список материалов по использованию HTTP Live Streaming в видеоприложениях:
HTTP Live Streaming draft
HTTP Live Streaming Frequently Asked Questions
Best Practices for HLS

Напоследок стоит отметить, что для зарегистрированных разработчиков Mac/iOS/Safari доступны бесплатные технические видео сессии с WWDC 2012, где также много полезной информации, в частности — по работе с видео и использованию HTTP Live Streaming.