HLS і DASH: як насправді працюють потокові протоколи
До появи потокового передавання для перегляду відео онлайн потрібно було спочатку завантажити весь файл. Відео розміром 500 МБ мало повністю надійти на пристрій, навіть якщо вам були потрібні лише перші 30 секунд. Потокові протоколи розв’язують цю проблему: ділять відео на невеликі фрагменти й відтворюють їх, поки решта ще завантажується.
Сегментація: цеглинка потокового передавання
Візьмімо найпоширеніший протокол HLS (HTTP Live Streaming, створений Apple). Сервер ділить відео на багато невеликих файлів — сегментів, зазвичай тривалістю 2–10 секунд у контейнері MPEG-TS або fMP4. Також він створює список відтворення (.m3u8) із порядком і адресами сегментів. Програвач спочатку отримує список, а потім завантажує сегменти за потреби: завершив один — отримує наступний, майже без очікування.
Адаптивний бітрейт: чому відтворення не зупиняється в слабкій мережі
HLS і DASH (Dynamic Adaptive Streaming over HTTP, який підтримують Microsoft та інші) готують кілька наборів сегментів того самого відео з різною роздільною здатністю й бітрейтом, наприклад для 1080p, 720p і 480p. Усі вони перелічені в головному списку. Програвач у реальному часі відстежує швидкість завантаження й наповнення буфера: підвищує бітрейт за доброго з’єднання та знижує його, коли зв’язок погіршується. Відтворення не переривається. Це адаптивне потокове передавання зі змінним бітрейтом (ABR) — саме тому в метро відео може автоматично ставати розмитим.
Чому завантаження посилання m3u8 так часто не вдається
Завантажуючи URL-адресу .m3u8, ви отримуєте кілька КБ тексту – список відтворення, а не саме відео. Щоб фактично зберегти відео, інструмент має проаналізувати список відтворення, завантажити кожен сегмент і з’єднати їх у порядку. Ось чому багато завантажувачів або взагалі не підтримують HLS відео, або вимагають спеціального кроку «об’єднання сегментів». TakeVid має вбудований аналіз сегментів і автоматичне об’єднання, тому ви завантажуєте повний файл, готовий до відтворення.
- HLS: створений Apple, використовує списки .m3u8, має вбудовану підтримку в iOS/Safari, працює з прямими трансляціями й відео на вимогу
- DASH: відкритий стандарт із маніфестами .mpd, який масово використовується YouTube, Netflix та іншими
- Обидва працюють через звичайний HTTP, добре сумісні з CDN і сьогодні переважають у потоковому передаванні