Шёл 2025-й год. Пережив обидное сравнение с человеческом мозгом, проблему XOR, полное забвение, 120 пород собак в ImageNet, мемы про Оптимуса Прайма и десяток иных революций, в этот мир вступили нейросети — часть той самой силы, что вечно хочет зла, судя по промтам, но почему-то всё ещё совершает благо. Неудивительно, что добавить это благо к себе захотел почти каждый сервис.
Не исключение и Yandex Cloud Video — платформа для управления видеоконтентом, которую год назад наша команда Yandex Infrastructure запустила внутри Yandex Cloud. Но к выходу новой версии платформы нам показалось скучным просто добавить нейросети в качестве дополнительной фичи. Поэтому в релизе мы скорее стремились к тому, чтобы сервис во всех смыслах лучше понимал задачи человека. В результате мы:
добавили умные фичи, чтобы это помогло сделать контент более удобным для пользователей, не создавая дополнительную работу для редактора или администратора;
учли особенности защиты информации для тех, кто хостит видео в сервисе;
предложили возможности монетизации контента для пользователей, которые зарабатывают на своих роликах;
добавили кастомизацию плеера и другие приятные и важные мелочи.
По итогам всех доработок мы покорились нейросетям, научили сервис зарабатывать на РСЯ и AdFox, уделили особое внимание latency на стороне конечного пользователя и выкатили платформу для управления видео в доступ всем пользователям облака. Меня зовут Алексей Гусев, я руковожу командой разработки медиаплатформы Яндекса, куда входит видеоплатформа, телефония, WebRTC и CDN. Сегодня расскажу про самые интересные разработки внутри обновлённого Cloud Video.
Нейросетевой блиц
Cloud Video используют множество очень разных команд, от сервисов Яндекса (например, Кинопоиск, Яндекс ТВ) и до внешних пользователей в Yandex Cloud (и пользователи Хабра тоже могут встроить плеер в свою статью). За время с самого старта тестирования у нас накопилась куча сценариев, которые помогли докрутить моменты, не всегда очевидные с одного угла.
Новые нейрофичи во многом пришли к нам в наследство от команды Яндекс Браузера, которые уже рассказывали, как учились создавать субтитры для любого видео и сохранять тембр и интонацию спикера при нейропереводе. Но поскольку пользователи Cloud Video — не только зрители, но и редакторы контента, то в первую очередь нам было важно добавить суммаризацию и авторазметку глав с таймкодами.
Вот наглядный пример, как это работает.
Задать такие кликабельные таймкоды можно и руками, но времени редактора жалко. По умолчанию язык оригинала распознаётся автоматически, но при интеграции через API его также можно указать вручную для повышения качества распознавания.
Теперь усложним и заставим персонажей видео говорить на нескольких языках сразу. Для этого мы поставили сервису задачу: в режиме реального времени генерировать субтитры, а также переводить видео на 11 языков и накладывать озвучку:
Для того чтобы услышать перевод видео на русский язык, выберите соответствующую аудиодорожку в настройках плеера
Лейблы аудиодорожек, а также названий субтитров можно настроить через API.
Чуть подробнее о том, что именно изменилось. В предыдущей версии наш пайплайн обработки видео выглядел так:
Видеофайл при загрузке на сервис обрабатывается транскодером, задача которого — подготовить видео- и аудиодорожки для последующего стриминга в видеоплеер. Для того чтобы сгенерировать автоматические субтитры и переводы, нам потребовалось добавить в него вызовы нейросетевых моделей Яндекса, и передать в них промежуточные данные.
Результаты работы нейросетевых моделей снова прогоняются через транскодер, чтобы подготовить их к раздаче пользователям, — и на выходе мы получаем контент, у которого появляются дополнительные аудиодорожки и субтитры, синхронизированные по времени между собой. Поскольку дорожки равнозначны оригинальному контенту, мы можем встраивать их в выдаваемые сервисом плейлисты HLS и DASH и показывать в плеере так, будто эта дорожка загружена самим владельцем контента.
Минимум latency
Пользователям сервиса важны живые трансляции. Да, возможно, это не всегда трансляции уровня мировых чемпионатов, но тем не менее важно подумать о показателях задержки потока. Например, если клиент Cloud Video проводит живой урок, то даже задержка в 15 секунд превращает образовательный процесс в мучение: преподаватель задаёт вопросы, через 15 секунд они долетают до ученика, тот отвечает, и ещё 15 секунд ждёт реакции преподавателя. По факту для пользователя получается задержка 30 секунд, x2.
Чтобы стабилизировать эти показатели на уровне не более четырёх секунд, мы воспользовались уже доступными технологиями Яндекса для оптимизации доставки контента.
Подробнее о low latency streaming для сервисов Яндекса, мы с Дмитрием Кравцовым уже рассказывали на VideoTech.
Чем реализация отличается от той, что в Кинопоиске — в Cloud Video предусмотрена большая гибкость. Если в сервисах Яндекса довольно сложный инструментарий, который всегда требует доработок на стороне плеера, то в нашем облачном сервисе мы оставляем пользователю возможность подключать свой плеер. Поэтому по сути у нас есть два основных механизма борьбы с задержками:
Вне зависимости от используемого плеера, мы уменьшаем длину передаваемого сегмента видео, и это ограничивает latency, даже если плеер не наш.
Если же клиент использует плеер Cloud Video, то у него появляются дополнительные возможности, например, механизм удержания зрителя на правой границе трансляции с минимальной задержкой. Как это устроено: если у пользователя во время прямого эфира сбоит интернет, то после восстановления связи плеер незаметно для зрителя ускоряет воспроизведение (например, с 1 до 1,05). В результате такой пользователь постепенно догонит правую границу трансляции и синхронизируется с остальными зрителями.
Благодаря этим механизмам мы получаем нашу целевую метрику задержки в самых разных сценариях использования сервиса.
Минутка безопасной интеллектуальной собственности
Для защиты контента мы также предусмотрели два механизма:
Генерация короткоживущих ссылок. Скажем, вы хотите реализовать модель доступа к вашим видео по срочной подписке. Пользователям контент будет открыт только по временной подписанной ссылке с определённым сроком действия.
Ограничения на встраивание видео по белому списку конкретных доменов. Например, если важно, чтобы обучающие видео с вашего курса нельзя было вынести за пределы вашего сайта. Как это работает: в настройках канала определяем список разрешённых для него сайтов. И затем бэкенд сервиса Cloud Video проверяет, находится ли в этом списке домен сайта, куда вставлен плеер. Если нет, вместо плеера зритель увидит сообщение об ошибке доступа.
Защиту от несанкционированного доступа изнутри платформы обеспечивают возможности Identity and Access Management: настроить гранулярные права можно как к самому каналу, так и аналитике по нему.
И ещё несколько приятных моментов
На этапе тестирования одним из самых частых запросов к нам как создателям сервиса была возможность кастомизировать плеер под дизайн своего сайта. Мы внедрили такую настройку: теперь адаптировать дизайн можно через параметры вставки.
Ну и пару слов про монетизацию: один из частых сценариев использования Cloud Video — это размещение развлекательных видеороликов на медиаплатформах, на которых можно зарабатывать с помощью рекламы. Теперь сайты с посещаемостью от 10 000 человек в сутки могут подключиться к Рекламной сети Яндекса (РСЯ) через личный кабинет и встраивать рекламу в видеоконтент, размещённый через Cloud Video. Для активации показов нужно зарегистрироваться в кабинете РСЯ, указать свой идентификатор в сервисе и пройти модерацию. Подробности уже обновили в документации.
Надеюсь, это был полезный обзор для всех, кто работает с видео, — буду рад услышать, о чём хотелось бы узнать больше в будущих статьях и выступлениях.
Источник: habr.com