Почему атом MP4 mdat не запускается с кодом запуска NALU H.264? - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь исследовать проблему с генерируемым MP4, возвращая ошибку:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55f0ae819080] Failed to add index entry
Last message repeated 277 times
[h264 @ 0x55f0ae81c300] Invalid NAL unit size (-800932280 > 6).

Первый кадр отлично декодируется, а все будущие кадры не декодируются.В результате получается видео продолжительностью 0,042 секунды.

Чтобы помочь в расследовании, я ffmpeg кодировал одно и то же видео таким же образом, чтобы я мог сравнить два файла.Однако я заметил, что в файле с кодировкой ffmpeg образец видео начинается не с 0x000001 или 0x00000001.

. Я попытался просмотреть спецификацию MP4 и спецификацию H.264, чтобыпонять, почему этот стартовый код иногда требуется, но не требуется в этом случае, но там буквально сотни страниц, и я не смог ничего найти за день чтения.

Генерируемый ffmpeg файл доступен здесь: http://files.stevendesu.com/test.mp4

Если вы откроете это с помощью синтаксического анализатора атомов MP4, вы заметите, как запускается первый mdat атом:

0000 6DF4 6D64 6174 0000 04BF 6588 8101
1788 8C12 0001 1498 3800 188E 003F FFFC
...

Первые 8 байтов имеют смысл: 00006DF4(28148) = размер атома mdat, 6D646174 = "mdat" в ASCII

После этого атом mdat начинается с 0x000004.В соответствии с атомом traf в предыдущем moof, первый отсчет видео (с длительностью 800/16000 секунд и размером 19899 байт) должен начинаться именно здесь.Поэтому 0x000004 - это первые 3 байта первого примера видео.

Либо этот пример видео не начинается с кода запуска NALU, либо вокруг NALU есть какой-то заголовок / оболочка, которую я не делаюпонять.

Может кто-нибудь объяснить мне, почему этот пример видео не начинается с кода запуска NALU?

1 Ответ

0 голосов
/ 01 марта 2019

Только файлы Приложения-B будут содержать стартовый код 000001.У меня были данные AVCC.

...