Транскодинг лайв-видео. Отладка проблем при разработке
На первой встрече VK Tech Talks | Backend старший разработчик Команды backend Илья Щербак рассказал о транскодинге (преобразовании цифровых данных из одного формата в другой) лайв-видео и отладке проблем при разработке. Приводим его выступление от первого лица.
О чём будем говорить?
Сегодня мы поговорим о том, что такое лайв-трансляция, для чего нужен и как устроен транскодинг и многое другое, но главная тема доклада — простота. Простота в разработке, простота в отладке.
Live-трансляции
Это схема в принципе любой трансляции, будь то ТВ или Интернет. У нас есть источник сигнала, точка подключения, и, собственно, сами зрители.
Эта схема гораздо сложнее. На самом деле, из неё мы можем выкинуть всё, кроме стримера, медиасервера и зрителя. Без медиасервера трансляция работать не будет, потому что именно медиасервер из входящего потока делает много исходящих потоков, которые раздаёт всем зрителям. Кэши, edge'и и приёмники служат лишь для оптимизации нагрузки.
Что же такое лайвы?
Какие же ассоциации возникают у нас, когда мы слышим слово «видео»? Мы слышим такие слова, как «кодек», «контейнер», «транспорт видео», о чём это вообще? Что такое кодек, зачем он нужен? Казалось бы, есть видео, его можно просто взять и передать. Теоретически можно, но тогда…
…одна секунда видео будет занимать большой объём данных. Если мы захотим передать это по сети, мы не пролезем совсем. Поэтому нужно сжимать данные, чтобы они стали приемлемыми по размеру.
Какие бывают кодеки?
Кодеки бывают разные: устаревшие/не устаревшие, перспективные и не очень, бывают для аудио, бывают для видео. Сегодня мы поговорим про кодек H264.
Контейнеры
Контейнеры тоже бывают разные — они служат для разных целей, для разных задач. Зачем же нужен контейнер, когда у нас есть кодек? Если кодек у нас про то, как данные представлены, то контейнер сообщает, где эти самые данные лежат. Они также выполняют роль оркестрации дорожек, то есть они проигрывают аудиодорожку и видеокадры, связывают это в единое целое.
Контейнеры тоже бывают разные и служат для решения разных задач.
Транспортные медиа-протоколы
Транспортные протоколы нам нужны, когда мы хотим кому-то передать наше видео, это уже непосредственно касается live-стриминга. Сегодня мы подробно остановимся на двух протоколах — RTMP и HLS.
RTMP — протокол, разработанный компанией Adobe, сейчас уже не поддерживается, применяется только для передачи от стримера к медиасерверам ВКонтакте (и это хорошо! Он плох во всём, для чего он сделан).
HLS — хороший протокол. Главное его преимущество — рабочая модель адаптивного стриминга.
Казалось бы, в чём проблема? Берём и попросту рассылаем трансляцию. Но это не работает.
Иногда у пользователей слишком низкая скорость, а студия вещает в высоком качестве. Также иногда стримеры шлют неподдерживаемый поток, то есть они покупают не то оборудование, с которым трансляция на стороне клиента падает.



Мы добавляем транскодер, который преобразует поток для нормального воспроизведения.
Дебаг
При дебаге мы сначала оставляем только reciever и sender. Если видео испорченное — дебажим транспортную часть от главного процессора к транскодеру. Затем производим проверку checksum.
Если видим ошибки — исправляем. Всё просто.
И, напоследок, немного советов и полезных инструментов.


Конец.
Видеотрансляцию выступления можно посмотреть ниже.
независимое интернет-издание о социальных сетях
Автор: Ярослава Троицкая
Корректор: Арсений Метелёв
