🔥

Тред #3


Сегодня - про магию некоторых мастодонтов в медиа - Netflix и TikTok.

Итак, в период пандемии (да и раньше) подавляющее большинство пользователей с огромным энтузиазмом юзают и продолжают юзать всевозможные видео-платформы и онлайн-кинотеатры. Причины ясны: сидим дома, книги перечитаны, углы комнат изучены, скучно, а инет - вот он, зовет и манит.

Так почему же Netflix и TikTok настолько полюбились пользователям? Естественно, это достаточно мощные продукты, которые позволяют развлекаться и самовыражаться, но если "кормить" пользователя абы-как - он расстроится и уйдет. И тут вступают в ход хитрости и "магия")

Начну пожалуй с TikTok. Есть мнение, что человек, который говорит "Я в тик-токе пару минут посижу" пробудет там как минимум часик-полтора) И это достаточно реальная картина, сами попробуйте! Но магия не в том "отборном контенте" платформы, а в способе и скорости ее подачи.

Контент в TikTok буквально "вываливается" на тебя. Это создается из-за совокупности тонкостей устройства самого приложения и контента. Вот основные из них: - видео подается в кодеках с макс сжатием - видео раздается через мощную систему CDN - на каждое видео есть легкая "превью"

Про сжатие в TikTok ТикТок пользует контейнер MP4 с одним видео и аудио, в котором метаданные (описание потоков с их хар-ми) перенесены в самое начало файла (хедер) для инстантного плейбека по http. Так, при получении первых нескольких кбайт плеер может начать играть контент

Так как нет адаптивности (как например у Netflix или YouTube), плееру не кадо думать какой поток воспроизводить в текущем состоянии сети и стартовать много быстрее. Также TikTok пользует свои плееры под каждую платформу. Их можно подкрутить как удобно, выигрывая время старта.

Сам флоу пост-обработки видео в TikTok такой: -пользователь на телефоне жмет видео в самом распространенном кодеке H264, в котором видео сразу может быть проиграно где угодно -на бэке оно в фоне сильно жмется в кодеки HEVC/VP8 и уже легким отдается на основную массу

Для сравнения порядков сжатия H264 и HEVC/VP8 небольшая статейка: thebroadcastbridge.com/content/entry/… Из нее видно, что видео прилично теряет в весе. Конечно же оно при сжатии теряет и в качестве, но в TikTok вывели середину, где вес файла минимальный, но и глаза не сильно кровоточат)

TikTok использует CDN (content delivery network) для быстрого доступа к контенту. Работает просто: при запросе к контенту видео проксируется на ноду, географически недалеко от пользователя. Второй пользователь будет смотреть это видео уже с этого сервера, миную поход в сторадж.

Для ощущения супер-быстро влетающего Вам в ленту видео, на стороне бэкенда в TikTok генерится первый кадр в виде JPEG. При запросе клиента ленты ему приходит JSON с сылками на превью, которые весят мало. При свайпе вы вначале видите именно JPEG, а уже после - подгруженное видео.

Очень важная "фича" - префетчинг видео. Если вы думаете, что первое показанное видео ТикТока грузится в момент открытия приложения - подумайте еще раз) Первые несколько (!) видео частично (!!!) уже в вашем телефоне, готовые к проигрыванию первых нескольких секунд.

Конечно же очень влияет на качество как ты рендеришь (проигрываешь) видео. На телефонах например это делать можно software и hardware методами. В первом случае - телефон начинает декодить на CPU, что сильно бьет по батарейке и работе телефона в целом. HW декодинг намного лучше)

Также не могу пройти мимо и не осветить медиа-редактор TikTok. Оч быстрый (хотя местами очень кривоватый) редактор. Интересный кейс с ускорением видео и аудио. В редакторе оно происходит почти мгновенно. Просто транскодить - оч долго и дорого, поэтому решение - оч элегантное)

Чтобы молниеносно ускорить медиа, нужно взять поток, пройтись в нем по семплам потока (кадрам/сегментам) и переписать внутри них timestamp-ы - временной параметр, который показывает когда на таймлайне должна быть воспроизведена та или иная часть медиа. Без перекодирования. ШИК!)

Учитывая, что на мобильном поприще особо в мощностях и возможностях не разгуляешься (относительно слабые процы, ПО от вендоров, технологические нюансы), TikTok - оч крутое приложение в технологическом плане. PS. Контент судить не буду - это, каггрицца, на вкус и цвет)

Следующие - Netflix. Эти ребята всегда и во всем лично для меня были референсом №1. Это можно просмотреть как на уровне обработки и доставке контента, так на просто интерфейсе их приложений. Ссылку на их технобложек оставлю тут для любознательных: netflixtechblog.com

Приведу пару кейсов почему ребята крутые: - свой протокол стриминга с DRMом, адаптивом и полным фаршем и свой нативный клиент на всём, до чего можно добраться и посмотреть медиа - контенто-ориентированный транскодинг - свои "очеловеченные" метрики оценки качества транскодинга

Свой протокол и плеер. Из-за войн корпораций (об этом скоро) есть оооочень много проблем и нюансов с воспроизведением контента, особенно если он должен быть зашифрован. Ну и доставка по TCP контента в мобильные сети с большими потерями - очень неприятная история.

Свой протокол инженеры из Netflix сделали из всего приятного, что предлагали уже имеющиеся HTTP протоколы для стриминга (HLS/DASH/MSS), и, естественно, сделали свои плееры под это. Вот небольшой подкаст от русского разработчика в Netflix: youtu.be/U8iq3JMQugA

В Netflix каждая единица контента анализируется на обилие сменяемых сцен. По анализу выбирается "жирность" пресета на транскодинг. Например, "Мстители" со взрывами и погонями будут откодированы с бОльшим битрейтом, чем нежели "Прибытие" с большим кол-вом статичных сцен.

У Netflix есть VMAF - это алгоритм оценки качества видео. Ссылочка на него: github.com/Netflix/vmaf Смысл в том, что оценка "глазами" - очень субъективна, нужны цифры, метрики. Такие есть - SSIM, PSNR, VIF и прочее. Но для полноты картины - их нужно комбинировать.

Даже если ты знаешь, что такое эти ваши SSIM, PSNR и прочие абры-кадабры - метрики, которые они показывают, тяжеловато интерпретировать и показать людям не особо осведомленным в них. VMAF же выдает просто процент схожести референсного потока к оригиналу, используя спец модели.

Тем самым, с использованием VMAF от Netflix можно более глобально и очевиднее дать результат анализа видео. Вот кейсы, где это очень полезно: - на сколько хуже стало пожатое видео - на сколько отличаются видео в H264 и VP8 - на сколько хуже транскодинг на GPU чем на CPU и т.д.

В треде я попытался рассказать о некоторых, на мой взгляд, простых, но крутых медиа-решениях и нюансах, которые и делают Нетфликс с ТикТок такими крутыми. PS: надеюсь, было как минимум не скучно)