Потоковая передача видео в формате avc / h264 с малой задержкой в ​​браузер с помощью MSE

В настоящее время я кодирую видео в реальном времени и транслирую его в браузер. Я кодирую rgb-> vuy-> h264-> Wrap in (спецификация формата байтового потока MP4 ISO BMFF, раздел 3) -> websocket to client. Первый пакет - это данные инициализации от ftyp до тега moov.

И с этого момента я отправляю клиенту теги moof и mdat. И я транслирую видео.

Независимо от того, сколько кадров находится в блоке mdat. MSE всегда буферизует данные для беспрепятственного воспроизведения. Как это можно перезаписать с помощью MSE.

Я где-то читал, что есть способ, которым mdat понимает, что это живой дымящийся кусок webm. Но я не знаю, существуют ли такие мысли для mp4 или вообще существуют.


person Evren Bingøl    schedule 20.06.2019    source источник
comment
Я нашел это, stackoverflow.com/questions/29636740/, но настоящего ответа нет   -  person Evren Bingøl    schedule 20.06.2019
comment
Как вы создаете mp4 и как вы контролируете размер блока?   -  person szatmary    schedule 21.06.2019
comment
Я использую грузило Microsoft (фрагментированная версия), затем зацикливаю и меняю некоторые значения в тегах mp4, таких как tfdt trun и т. д., чтобы сделать его совместимым со спецификацией 3, чтобы MSE не жаловалась. Я полностью контролирую кодировщик. Итак, чем больше рамок я кладу на грузило, тем больше кусков у меня получается. Но проблема в стороне клиента. даже если я напишу 2 кадра на фрагмент (mdat), все равно будет задержка, поскольку MSE необходимо буферизовать перед началом рендеринга.   -  person Evren Bingøl    schedule 21.06.2019
comment
Я никогда не слышал о грузилах Microsoft. И Google не возвращает результатов. Получаете ли вы один moof каждые два кадра? Или только один mdat каждые два кадра? Можете выложить образец файла?   -  person szatmary    schedule 21.06.2019


Ответы (1)


Я отправляю moof один раз за один кадр, и он работает.

person Max Lapshin    schedule 21.06.2019
comment
Да, по моему опыту, moof для каждого кадра - лучший способ уменьшить задержку. Я действительно проверил исходники Chrome, и они также протекают муфты как фрагменты, которые должны быть полностью получены для начала декодирования. - person Rudolfs Bundulis; 21.06.2019
comment
Сначала я отправляю ftyp и moov. Потом отправляю (муф и мдат). mdat может иметь один или несколько фреймов. Это правильно? Я получаю задержку на 1-2 секунды в локальной сети. Я пытаюсь получить 0,2 / 0,3 с. Отправляю около 20 кадров в секунду. Если я получаю до 30 кадров в секунду, буферы tcp в конечном итоге заполняются. Я кодирую быстро, я кодирую аппаратными кодировщиками Intel или Nvidia. Так что я могу легко получить до 60 кадров в секунду на стороне кодирования. Я транслирую свой рабочий стол, поэтому я вижу, что курсор опаздывает. разрешение экрана 1080x1920 Так что размер кадра тоже имеет значение. Какое разрешение вы, ребята, отправляете? - person Evren Bingøl; 21.06.2019
comment
Связанный вопрос: stackoverflow.com/questions/54186634/ - person El Sampsa; 11.12.2019