о кодировке fmp4, как заполнить поле mdat с кадром H264? - PullRequest
0 голосов
/ 01 января 2019

Я использовал язык C для кодирования кадров H264 (просто есть кадр I / P) в файлы fmp4.Когда я заполняю поле mdat, я не знаю, как заполнить данные кадра.
Заполняются ли данные кадра (I / P) напрямую?
Нужно ли заполнять первые 4 байта длиной кадра?

Я попытался использовать FFMPG для кодирования файла fmp4 и обнаружил, что данные в окне mdat полностью отличаются от исходных данных кадра I / P.
Кодируется снова?
Могу ли я напрямуюзаполнить данные кадра I / P в поле mdat?

1 Ответ

0 голосов
/ 03 января 2019

H.264 может быть в разных форматах потока.Один называется «Приложение B», другой - MP4.В «Приложении B» ваши блоки NAL имеют префикс с начальными кодами 00 00 00 01 или 00 00 01. В MP4 ваши блоки NAL имеют префикс с размером в байтах.

Я предполагаю, что ваш кодер выдает «Приложение B».

  1. Удалите стартовый код (00) 00 00 01

  2. Префикс ваших блоков NAL с размером (обычно 4 байта)

  3. Отфильтруйте единицы NAL AUD / SPS / PPS из вашего потока

  4. Запишите преобразованные единицы NAL в поле MDAT

  5. Создание окна конфигурации AVC ('avcC') на основе вашего SPS, PPS и размера длины

  6. Сохраните коробку AVCC в moov-> trak-> mdia->minf-> stbl-> avc1-> avcC

  7. Пока вы записываете свои сэмплы в mdat - отслеживайте размеры, смещения и типы фреймов, чтобы создать правильные stts, stss, stsc,stsz и stco box.

...