Почему свой YouTube - ни разу не просто
В данном треде я попробую рассказать о том, что нужно для видеоплатформы и почему это - достаточно непросто.
Русская вики пишет, что Ютуб- это видеохостинг.
Штош, интересное заявление, так как сейчас на Ютубе ты можешь смотреть за денюжки фильмы, смотреть и создавать видеотрансляции, использовать как музыкальный плеер и еще многое другое)
ИМХО: Ютуб - скорее медиаплатформа, чем хостинг.
С помощью чего Google зарабатывает на Ютуб? Вот некоторые виды монетизации:
- реклама (пре/пост-ролы)
- подписочная модель (покупаешь YouTube Premium и смотришь "ламповый" ютубчик без рекламы и с доп. плюшками)
- платные каналы (закрытые показы)
- аренда/продажа контента (OTT)
Что нужно для создания такой видеоплатформы? Как минимум следующее:
- приложения на желаемых платформах со своими плеерами
- свой протокол для стриминга
- хранилище
- сеть по доставке контента с максимальным покрытием (CDN)
- мощную систему транскордирования
- аудитория
Приложения YouTube
У Ютуба достаточно большое покрытие разных платформ и устройств, чем может похвастаться не каждый. Сами приложения работают достаточно хорошо и стабильно, не зависимо от "старости" устройства, что говорит об их разработке на более низком уровне.
Плеер для видеоплатформы- это её сердце. Тут есть большое количество всяких фич и наворотов. Расскажу про одну, пусть не уникальную, но интересно реализованную фичу в плеере, которая позволяет пользоваться перемоткой по таймлайну, не загружая весь контент, а только его миниатюры.
Если открыть Ютуб и подвести курсор на таймлайн (полоса перемотки), то на миниатюре юзер увидит маленькую миниатюру, которая будет картинкой. Очень очевидная и, кажется, простая фича. Но не все так как на первый взгляд)
На самом деле это - не отдельная картинка, а часть одной из матриц стоп-кадров, которые генерируются на бэкенде при кодировании. В зависимости от продолжительности контента, транскодер Ютуба вырезает кадры и мерджит их в матрицы 10х10 (LowQuality) и 5х5(HighQuality).
Шаг забора кадров - 2 сек (если длительность видео не превышает, кажется, мин 20) или 5 секунд (если видео больше 20 минут). Такие миниатюры намного проще доставить на клиента и дешевле показать, отобразив часть картинки-матрицы, чем качать весь видео-контент.
Кстати, на месте плеера, если зажать и двигать ползунок таймлайна, юзер видит как раз эти миниатюры, а не видео. После того, как пользователь отпускает ползунок - плеер начинает грузить сам контент для воспроизведения, т.е. по требованию.
Такая фича реализована в каждом приложении YouTube, которое попадало ко мне в руки - телефоны, телевизоры, игровые приставки и т.д.
Естественно, для всех этих платформ используются одни и те же матрицы с кадрами, для оптимизации доставки и корректном кешировании на CNDах.
Протокол для стриминга
Как я уже рассказывал, для поддержания огромного зоопарка разных плееров от сторонних вендоров нужно иметь большое количество по разному подготовленного контента. НО! Если у тебя есть свои плееры, которые ты можешь контролировать - делай свой протокол)
Ютуб (как и Нетфликс) подумали и решили, что это как минимум выгодно, когда на все платформы улетает +/- один и тот же тип контента и играется без сторонней black-box магии, накрученной каким-нить Samsung или Apple. Отсюда - больше контроля за плейбеком и QoS метриками.
Хранилище
Я не знаю такого слова, которое может быть использовано для примерной оценки количества данных, хранимых на серверах Google для YouTube) Это оооочень много! Одних записей видеоуроков от разработчиков с Индии там наверное в 100500 ПетаБайт)
Прикинуть, сколько занимает один видеоролик от, например, Жени "Бэда" Баженова можно следующим образом:
- посмотреть кол-во качеств
- посмотреть средние битрейты видео/аудио дорожек
- умножить битрейты на продолжительность
- сложить все вместе
Сейчас так и попробуем сделать)
Возьмем видеоролик про "Зою".
Тут мы видим 6 качеств видео (144p/240p/360p/480p/720p/1080p) и 3 качества аудио (50/65/120 kbit/sec). Каждое из видео качеств закодировано в 3 кодеках: H264/VP9/AV1. Аудио закодировано в OPUS кодеке. Все они работают через их DASH-образный стриминг.
Также Ютуб хранит 2 варианта (360p и 720p) мультиплексированных вариантов (в одном контейнере есть поток видео и аудио). Это для поддержки оооочень старых устройств.
Итак, подсчитав все вместе, получаем ~ 5,7Gb.
Вроде и не так много, но это только один видеоролик, а их больше)
Свой CDN
Распространить видео на аудиторию по всему миру - достаточно дорогое удовольствие, если пользовать CDN провайдера, тем более с хорошим покрытием. Какой нибудь CDN от Akamai будет хорошо перформить, но будет стоить как 2 чугунных моста, что, естественно, не выгодно.
Поэтому Google пользует свои сервера для более качественного обслуживания пользователей, которые можно контролировать, прогревать, тюнить и дополнять железом, если таковая потребность будет. И это будет на перспективу намного дешевле, чем аренда сторонних мощностей.
Система транскодирования
Как быстро перелопатить кучу видео, которое льют пользователи? Как говорилось ранее - транскодинг дорогая операция. Для понимания порядков скоростей: часовой ролик в FullHD с вменяемым выходным качеством откодируется за мин 20 на i7 с 12 ядрами в полку.
Для промышленных масштабов обычно применяют транскодеры с HW ускорением. Тот же часовой видеоролик на NVidia RTX2060 будет откодирован примерно за 6 мин, при том, что GPU будет работать в пол силы. Проанализировав контент Ютуба видно, что юзаются именно GPU.
Кстати, по непроверенным данным, для популярных каналов все же используют CPU транскодинг, так как он дает более качественную картинку. Для не особо популярных каналов Ютуб пользует скоростное GPU транскодирование на быстрых пресетах.
Аудитория
Естественно, для того чтобы это все как-то приносило денег - нужна внушительная масса пользователей. Не будет их - будет мало подписок, некому будет смотреть рекламу и т.д..
Кстати, понимание кол-ва пользователей и их требовательность может здорово вам сэкономить.
Например, аренда GPU типа Tesla T4 в облаке у Амазона/Гугла будет стоить приличных денег. В то время как CPU тачки бывают отдают с бешеной скидкой, которая может быть в конечном счете много выгоднее под конкретно ваши потребности.
В целом, видеоплатформа - это огромные вложения в мощности и человеко-ресурсы. Не скажу, что это рокет-сайенс, но особенностей и подводных камней тут прилично. Тем более если делать всё не на 3 с полом человека, а на приличные масштабы)
На сегодня у меня все. Всех с праздником!)