Сегодня - про магию некоторых мастодонтов в медиа - Netflix и TikTok.
Итак, в период пандемии (да и раньше) подавляющее большинство пользователей с огромным энтузиазмом юзают и продолжают юзать всевозможные видео-платформы и онлайн-кинотеатры. Причины ясны: сидим дома, книги перечитаны, углы комнат изучены, скучно, а инет - вот он, зовет и манит.
Так почему же Netflix и TikTok настолько полюбились пользователям?
Естественно, это достаточно мощные продукты, которые позволяют развлекаться и самовыражаться, но если "кормить" пользователя абы-как - он расстроится и уйдет. И тут вступают в ход хитрости и "магия")
Начну пожалуй с TikTok.
Есть мнение, что человек, который говорит "Я в тик-токе пару минут посижу" пробудет там как минимум часик-полтора) И это достаточно реальная картина, сами попробуйте!
Но магия не в том "отборном контенте" платформы, а в способе и скорости ее подачи.
Контент в TikTok буквально "вываливается" на тебя.
Это создается из-за совокупности тонкостей устройства самого приложения и контента. Вот основные из них:
- видео подается в кодеках с макс сжатием
- видео раздается через мощную систему CDN
- на каждое видео есть легкая "превью"
Про сжатие в TikTok
ТикТок пользует контейнер MP4 с одним видео и аудио, в котором метаданные (описание потоков с их хар-ми) перенесены в самое начало файла (хедер) для инстантного плейбека по http. Так, при получении первых нескольких кбайт плеер может начать играть контент
Так как нет адаптивности (как например у Netflix или YouTube), плееру не кадо думать какой поток воспроизводить в текущем состоянии сети и стартовать много быстрее.
Также TikTok пользует свои плееры под каждую платформу. Их можно подкрутить как удобно, выигрывая время старта.
Сам флоу пост-обработки видео в TikTok такой:
-пользователь на телефоне жмет видео в самом распространенном кодеке H264, в котором видео сразу может быть проиграно где угодно
-на бэке оно в фоне сильно жмется в кодеки HEVC/VP8 и уже легким отдается на основную массу
Из нее видно, что видео прилично теряет в весе. Конечно же оно при сжатии теряет и в качестве, но в 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:
В Netflix каждая единица контента анализируется на обилие сменяемых сцен. По анализу выбирается "жирность" пресета на транскодинг. Например, "Мстители" со взрывами и погонями будут откодированы с бОльшим битрейтом, чем нежели "Прибытие" с большим кол-вом статичных сцен.
У Netflix есть VMAF - это алгоритм оценки качества видео. Ссылочка на него: github.com/Netflix/vmaf
Смысл в том, что оценка "глазами" - очень субъективна, нужны цифры, метрики. Такие есть - SSIM, PSNR, VIF и прочее. Но для полноты картины - их нужно комбинировать.
Даже если ты знаешь, что такое эти ваши SSIM, PSNR и прочие абры-кадабры - метрики, которые они показывают, тяжеловато интерпретировать и показать людям не особо осведомленным в них. VMAF же выдает просто процент схожести референсного потока к оригиналу, используя спец модели.
Тем самым, с использованием VMAF от Netflix можно более глобально и очевиднее дать результат анализа видео.
Вот кейсы, где это очень полезно:
- на сколько хуже стало пожатое видео
- на сколько отличаются видео в H264 и VP8
- на сколько хуже транскодинг на GPU чем на CPU и т.д.
В треде я попытался рассказать о некоторых, на мой взгляд, простых, но крутых медиа-решениях и нюансах, которые и делают Нетфликс с ТикТок такими крутыми.
PS: надеюсь, было как минимум не скучно)
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Во-первых: нужно понимать зачем тебе это всё. Очевидно, что делать что-то только ради денег - очень глупая затея.
Во-вторых: важно понимать от чего тебя прёт. Нравится делать модные кнопки - делай, кайфуй от себя, это очень важно.
В-третьих: мир IT разнообразен, пробуй, не ссы)
Я поработал в разных сферах (от тренера по спортивным бальным танцам до звукорежиссёра) и пробовал разные вещи именно в IT(от инженера связи до геймдева) и понял: не попробуешь - не поймешь. Естественно везде есть плюсы и минусы, и тут уже вопрос личных компромиссов и желаний.
Ну-с приступим)
Как оно вообще в мире медиа и как лично меня затянуло на это поприще. Начну с небольшой школьной предыстории.
Началось все с телефона Siemens S65)
Это был мой первый телефон с возможностью смотреть видео и слушать музыку. И так как показать братюням мощные клипы с Linkin Park на телефоне оч хотелось - я нашел на диске Игромании какую-то программулину по конвертации видео и пошло-поехало.
Там я дотошно изучал все возможные ручки и настройки для видео и аудио, чтобы уместить на MMC карте телефона в 64МБ максимум своей муз-коллекции, но чтобы при этом картинка не разваливалась, fps не падал, а звук был приемлемый. Так начало моей страсти к медиа и было положено.
Ещё один частый аргумент в пользу карьеры в IT: деньги. Ведь там деньги-деньги-деньги, а нигде больше денег нет.
Я не преуменьшаю их важность: деньги создают комфорт, лечат людей, дают безопасность и независимость. Конечно, их нужно заработать и зарабатывать.
А когда я предлагаю посмотреть в сторону, мол, там могут быть и деньги, и самореализация-удовольствие-азарт - нет, вы что, я буду тащить этот чемодан без ручки и дальше.
Хотя уже не нравится, и уже заработал, и уже скучно давным-давно. И вообще, страшно! Риск!
Это передёргивание, конечно, но в какой момент и кто сказал, что риска в жизни нет? По-моему, риск и неопределённость - это единственное, что любая жизнь гарантирует.
Да, можно купить страховку от болезни (и наверное стоит), но чураться неизвестности как дикого зверя?
Не важно, пришли вы в IT за деньгами, либо по призванию - рано или поздно вас накроет ощущение, что деньги больше не мотивируют, а делать хочется что-то интересное, получая за это признание и удовлетворение.
Интересно каждому своё, но вот механизмов самореализации, кажется, не так уж много. Мне приходит в голову реализация амбиций через построение карьеры, публичную деятельность и предпринимательство.
Под самореализацией я понимаю достижение состояния, когда вы вовлечены в жизнь, к вам прислушиваются, вы делаете не просто одну и ту же работу, а что-то важное - по крайней мере, двигаетесь к этому.
А знаете, почему я так категоричен про короны (и цинизм)?
Потому что завышенная самооценка (мне все должны - зарплату, офис, интересную работу) и цинизм ("мы обречены" - отличный пример, где все вот это нытьё про сложную и глупую работу) не совместимы логически.
То есть пользоваться благами индустрии мы (они) хотим, а что-то для этого делать - нет.
Работать в лучших компаниях - да, а проходить "тупые" собеседования - нет.
Рубить бабло почти за просто так, но считать, что это ты такой крутой.
Фактически, не создавать ничего нового, не идти на риск, не изучать что-то за пределами уютного Хабра - но считать, что разработчикам все обязаны.
Так вот, это полная дурь. Вы либо крестик снимите (и перестаньте считать себя богами), либо трусы наденьте (и примите свою роль).
Когда я только начал работать разработчиком, в 2007 году, денег в айтишке не было. Программист или любой другой айтишник были примерно на уровне слесаря - и по заработку, и по влиянию на бизнес. Из плюшек были туалет на этаже и курилка под лестницей.
Я торговал железками на радиорынке, был эникейщиком, и денег, как и перспектив, не видел. В некотором смысле мне повезло войти в IT, когда это ещё не было популярно.
В первой аутстаффинговой конторе, продававшей нашу команду за рубеж, платили немного, 5 тысяч рублей за полдня.
Я ушёл через год, потому что мне надоел веб. Но этот опыт приоткрыл для меня двери индустрии.
Мне хотелось делать что-то более интересное, и я почти устроился плюсовиком в местную компанию, автоматизирующую погрузочные горки на железной дороге. Но с ними не сложилось.