Идеальное решение для воспроизведения первого кадра — решение без первого кадра

оптимизация производительности

Автор: Кун Джун

Введение

Время первого кадра относится к времени с момента, когда пользователь щелкает, чтобы начать воспроизведение, до отображения первого кадра видео. «Нулевой первый кадр» на самом деле не 0 миллисекунд для начала трансляции, но пользователь вряд ли может заметить существование времени первого кадра, которое соответствует времени первого кадра менее 100 мс в нашей скрытой точке качества воспроизведения. В нашем плеере в каждой ссылке предусмотрен окончательный метод оптимизации первого кадра, когда позволяют условия, время первого кадра может быть сжато до менее чем 100 мс, пользователь воспринимает абсолютно плавное воспроизведение, без ощущения первого экрана. . Конечно, в реальном бизнесе некоторые сценарии не могут использовать все условия оптимизации, например, предзагрузка не может выполняться в сценариях случайного воспроизведения, а некоторые сценарии не подходят для использования технологии мультиплексирования плеера. В сочетании с реальными бизнес-сценариями мы можем максимально использовать возможности оптимизации, которые мы предоставляем, чтобы большинство пользователей могли получать нулевые первые кадры.

Композиция первого кадра

Концепция первого кадра, влияние первого кадра на впечатления от воспроизведения видео

Время первого кадра является важным основным показателем видеоприложений и одним из основных факторов, влияющих на впечатления пользователя от просмотра. Например, если для загрузки первого кадра видео требуется несколько секунд, большинство пользователей прекращают воспроизведение до загрузки первого кадра. Поэтому крайне важно оптимизировать время воспроизведения первого кадра видео.На приведенном выше рисунке показан весь процесс нажатия и воспроизведения видео. Видно, что время первого кадра в основном включает следующие части: получение ссылки на воспроизведение видео, установление сетевого подключения, загрузка данных заголовка видео, декодирование аудио и видео. и рендеринг. Эта статья начнется со всего процесса воспроизведения видео и представит некоторые общие решения для оптимизации первого кадра. В то же время, в конце этой статьи мы представим оптимизацию первого кадра, ориентированную на сцену, взяв в качестве примера воспроизведение длинной видеосцены и запуск с историческим прогрессом.

Общий метод оптимизации первого кадра

Получить адрес воспроизведения

Адрес воспроизведения будет отправлен с фидом

Первым шагом в воспроизведении видео является получение ссылки для воспроизведения видеоресурса.Вообще говоря, видеоресурс будет иметь уникальный идентификационный идентификатор видео.На сервере по требованию будет служба, которая получает ссылку для воспроизведения на основе информация об идентификаторе видео.Если сервер приложений может Вызов службы vod для создания адреса воспроизведения, а затем отправка адреса воспроизведения вместе с потоком канала, экономит время на сетевой запрос от клиента.

подключение к сети

Предварительное разрешение DNS, предварительное соединение, мультиплексирование соединения, фальстарт https TLS 1.3, мультиплексирование сеанса 0RTT

После получения адреса воспроизведения плеер установит соединение с CDN и сначала выполнит разрешение DNS. Чтобы предотвратить перехват DNS, большинство клиентов будут использовать HTTPDNS для разрешения DNS, что потребует отнимающего много времени сетевого запроса. Мы можем принять стратегию предварительного разрешения DNS.Например, когда приложение запускается, сервер может заранее предоставить доменные имена, которые приложение может использовать, а клиент может заранее выполнить разрешение DNS и кэшировать эти доменные имена. Мультиплексирование соединений поддерживается в HTTP 1.1, поэтому мы можем заранее создать несколько сокетных соединений с CDN, а затем повторно использовать соединение непосредственно во время воспроизведения. Кроме того, для борьбы с перехватом контента в некоторых областях включено воспроизведение https, а https имеет больше процессов рукопожатия TLS, чем http, и этот процесс рукопожатия вводит еще 2 RTT для первого кадра видео. С помощью TLS False Start и мультиплексирования сеансов можно достичь рукопожатия 0RTT.

Аудио и видео первый пакет

Уменьшите положение зонда и движения

После того, как проигрыватель установит соединение с CDN, проигрыватель начнет загрузку видеофайла.Сначала проигрыватель пытается определить формат, кодировку и другую информацию о видеофайле. Если источник видео равномерно транскодируется сервером, этот процесс обнаружения можно пропустить. В то же время стоит упомянуть, что обычный видеофайл mp4 имеет поле moov, в котором хранится информация о дорожках аудио- и видеопотоков, такая как информация о декодировании, и соответствующие отношения между аудио- и видеокадрами и файлами (для поиска), поэтому обычно игрок сначала загружает данные moov. Положение moov будет иметь определенное влияние на начало трансляции. Например, если moov находится в конце файла, когда вы загружаете данные в начале видео и обнаруживаете, что moov не найден, перейдите в конец для поиска moov, что приведет к еще двум сетевым запросам. . Для этой проблемы мы можем переместить moov в начало видеофайла путем перекодирования, тем самым сократив время, необходимое для первого кадра.

Аудио и видео декодирование

Декодер асинхронной инициализации, мультиплексный декодер

При нормальных обстоятельствах после того, как проигрыватель прочитает видеоданные и получит информацию о декодировании видео, он может начать создавать декодер для декодирования. Однако процесс создания декодера, особенно создание MediaCodec на платформе Android, является трудоемкой операцией. Здесь я в основном представляю две оптимизации: асинхронную инициализацию декодера и мультиплексирование. Если сервер приложений заранее передает информацию о декодировании видео в проигрыватель, проигрыватель может асинхронно инициализировать декодер при установлении соединения, что может уменьшить трудоемкость создания жесткого декодирования. Мультиплексирование декодера может полностью устранить эти затраты времени.Следуя этой идее, мы можем повторно использовать поток проигрывателя или даже весь проигрыватель.Эти методы могут значительно оптимизировать временные затраты первого кадра.

начальный уровень воды

Теоретически, чтобы получить окончательный первый кадр, его можно воспроизвести сразу после декодирования первого кадра видео. Однако на практике было обнаружено, что это приведет к увеличению задержек при воспроизведении видео, особенно к увеличению задержек на 1–3 секунды после начала воспроизведения видео. После множества экспериментов мы обнаружили, что если поставить определенные ограничения на воспроизведение видео, например кэширование определенного количества данных перед началом воспроизведения, это может значительно уменьшить зависание, и в то же время мало на что влияет. на первом кадре и может значительно улучшить впечатления пользователя от просмотра.Продолжительность и просмотр vv.

Предварительная загрузка

Предварительная загрузка является обычной мерой оптимизации первого кадра.Мы можем заранее загрузить часть видеоданных для достижения цели быстрого воспроизведения. Но когда выполнять предварительную загрузку, сколько загружать и количество параллельных предварительных загрузок — все это вопросы, которые необходимо учитывать. Во-первых, это время предварительной загрузки.Для короткого видео продолжительностью 15 секунд вы можете дождаться загрузки текущего видео, прежде чем начинать предварительную загрузку, чтобы предварительная загрузка не занимала полосу пропускания при воспроизведении текущего видео. Но если видео длиннее 1 минуты, нам нужно пересмотреть время предварительной загрузки, в частности, нам нужно учитывать доступный кэш воспроизводимого в данный момент видео, скорость загрузки в текущей сети, битрейт текущего видео и Предстоящая предварительная загрузка видео. Битрейт и количество параллельных предварительных загрузок. С помощью этих данных мы можем построить модель для прогнозирования ситуации с заиканием при следующем воспроизведении видео. Если существует высокая вероятность того, что заикание не произойдет, предварительная загрузка может быть включен, иначе он не будет включен или приостановлен.

Другой вопрос, сколько предзагружать, интуитивное понимание, хотя бы для того, чтобы первый кадр можно было загрузить. Метод грубой оценки — это размер moov плюс средний битрейт видео * продолжительность предварительной загрузки, чтобы размер заголовка moov и средний битрейт видео можно было отправить через сервер, а затем продолжительность предварительной загрузки можно было отрегулировать на на стороне приложения через параметры эксперимента, чтобы настроить размер предварительной загрузки.

предварительный рендеринг

Принцип введения

Предварительная загрузка может только устранить затраты времени на сетевые запросы, но игроку по-прежнему необходимо пройти этапы демультиплексирования, декодирования и рендеринга, а на средних и младших машинах это занимает более 200 мс. Если первый кадр видео можно отрендерить заранее и не воспроизводить, это уменьшит время, затрачиваемое на эту часть. Предварительный рендеринг — это технология, которая заранее рендерит первый кадр видео. В частности, предварительный рендеринг будет заранее декодировать первый кадр видео и рендерить первый кадр, но звук не будет воспроизводиться во время этого процесса. Например, в небольшой видеосцене при скольжении видеокарты предварительный рендеринг уже начался. перемещается к центру, воспроизведение начинается сразу, и пользователь в это время практически не ощущает загрузки видео.

В сочетании с оптимизацией сценариев использования

Различные методы оптимизации первого кадра, упомянутые выше, являются относительно распространенными стратегиями, и оптимизация, ориентированная на сцену, также чрезвычайно важна.В следующей части этой статьи мы представим оптимизацию запуска в двух сценариях: 1. Для длинных видеосцен Воспроизведение оптимизация 2. Оптимизация воспроизведения с историческим прогрессом.

Оптимизация длинных видеосцен

Введение в формат mp4, взаимосвязь между размером moov и продолжительностью

Короткие видеоролики обычно используют формат видео mp4.Как упоминалось ранее, загрузка moov является важным условием для воспроизведения видео mp4, а размер moov положительно связан с продолжительностью видео.Согласно приблизительным статистическим данным, размер moov составляет около 40 КБ/мин. Таким образом, заголовок видео Moov продолжительностью 1 час имеет размер 2,4 МБ. Формат видео fmp4 может очень хорошо решить эту проблему.Fmp4 разбивает полное видео на несколько небольших сегментов, и индекс каждого сегмента существует в поле sidx, поэтому объем данных, необходимых для трансляции, значительно сократился, что сократило время, затрачиваемое для первого кадра.

Кроме того, в длинных видео часто присутствует пре-пост-реклама, а также мы можем заранее загрузить первый кадр основного фильма в сочетании с пре-рендерингом во время проигрывателя пре-пост-рекламы.

Стартап с историческим прогрессом

начало ключевого кадра

В среднем и длинном видео есть функция запоминания воспроизведения исторического прогресса.Обычный метод реализации заключается в поиске ближайшего ключевого кадра перед историческим прогрессом, а затем подключении видеокадра к декодеру и выполнении обработки потери кадров в декодер, пока pts не достигнет заданного исторического прогресса. Если предположить, что битрейт этого видео составляет 4 Мбит/с, а размер GOP видео составляет 5 с, то в худшем случае запуска этого сценария требуется дополнительная загрузка 4 * 5 = 20 МБ данных. Если мы ограничим воспроизведение только позицией ключевого кадра, мы сможем избежать загрузки этих дополнительных данных, что значительно сократит время, затрачиваемое на первый кадр.

Суммировать

В этой статье в основном представлена ​​соответствующая схема оптимизации для каждого этапа первого кадра, а также кратко представлены два мощных инструмента предварительной загрузки и предварительного рендеринга для оптимизации первого кадра, а также представлены соответствующие методы оптимизации.