Как устроено хранение и передача видеофайлов
Что проверяют
Для аналитика вопрос не про настройку FFmpeg, а про то, понимаете ли вы путь видео от загрузки до плеера и какие требования из него вытекают. Следом обычно просят назвать нефункциональные требования к такой системе или нарисовать схему.
Как отвечать
Опишите конвейер по этапам:
- загрузка: большие файлы грузят частями с возобновлением, например через multipart upload в S3-совместимое хранилище или по протоколу tus. Иначе обрыв сети отправит загрузку в начало;
- хранение: сами файлы лежат в объектном хранилище, в базе только метаданные: владелец, длительность, статус обработки, ссылки на версии. Редко просматриваемые видео переводят в холодный класс хранения правилами жизненного цикла;
- транскодирование: из исходника делают набор версий разного разрешения и битрейта (лестница битрейтов). H.264 играет почти везде, HEVC и AV1 экономят трафик, но поддерживаются не на всех устройствах. Контейнер (MP4) и кодек это разные вещи;
- упаковка и отдача: видео режут на сегменты по несколько секунд и описывают плейлистом: HLS (
.m3u8) или MPEG-DASH (.mpd). Плеер сам переключает качество под скорость сети, это адаптивный битрейт. Сегменты идут по обычному HTTP через CDN; - прямой эфир: приём от стримера обычно по RTMP или SRT, зрителям уходит тот же HLS, а для задержки меньше секунды используют WebRTC;
- защита: подписанные ссылки с ограниченным сроком, шифрование сегментов, для платного контента DRM (Widevine, FairPlay, PlayReady).
Затем вопросы, которые вы зададите заказчику: максимальный размер и форматы загрузки, допустимое время до публикации, задержка эфира, число одновременных зрителей, география, срок хранения. Отдельно стоимость: исходящий трафик и транскодирование часто обходятся дороже самого хранения.
Где спотыкаются
Предлагают хранить видео в реляционной базе в BLOB. База раздувается, бэкапы становятся неподъёмными.
Путают кодек и контейнер и называют AVI или MKV кодеками. Тогда и требования к форматам запишут неточно.
Забывают, что транскодирование это отдельный асинхронный этап. Видео не появляется у зрителей сразу после загрузки, и в требованиях нужен статус «обрабатывается».