Термин

Chunked Transfer Encoding (CTE)

Короткое определение

Фича HTTP/1.1 (RFC 9112, июнь 2022), позволяющая серверу передавать тело ответа по частям без предварительного указания его итогового размера. Именно на этом механизме основаны LL-HLS, LL-HLS и LL-DASH – технологии низколатентной доставки.

Chunked Transfer Encoding позволяет серверу передавать тело ответа по частям – последовательностью кусков, каждый из которых предваряется указанием длины, и завершается нулевым куском. Изначально CTE был разработан, чтобы динамические страницы могли начать отправлять байты до того, как станет известен окончательный размер ответа; в итоге CTE стал технологической основой для низколатентного HTTP-стриминга. Packager сразу после создания каждого CMAF-чанка записывает его в тело ответа; плеер обрабатывает эти чанки по мере их поступления, не дожидаясь завершения всего сегмента.

В LL-HLS и LL-DASH используется следующий подход: плеер запрашивает сегмент, который ещё не завершён. Origin-сервер удерживает HTTP-ответ открытым, а packager по мере поступления кадров от энкодера добавляет в него CMAF-чанки. CDN передаёт эти данные через HTTP/2 с использованием chunked transfer encoding, а плеер в реальном времени парсит каждый чанк в MSE по мере его получения. Благодаря этому конечная задержка плеера зависит от длительности чанка (200–400 мс), а не от полной длительности сегмента (2–6 с).

У CTE есть тонкие взаимодействия с CDN. Кеш должен начать сохранять частичный ответ ещё до того, как станет известен его размер, и обслуживать последующие запросы по тому же URL из этой частичной кеш-записи. Не все CDN умеют это делать (Apple описывает это как «blocking playlist reload» для LL-HLS). Ошибки конфигурации – самая частая причина того, что LL-HLS-деплой работает с задержками, характерными для обычного HLS.

Считаете параметры для своего продукта?

Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.