Я хотел бы сделать кое-что с данными h.264, записанными с телефона Android.Zero-padded h264 in mdat
Мой коллега сказал мне, что должно быть 4 байта сразу после mdat
, где задается размер NALU, затем один байт с метаданными NALU, а затем необработанные данные, а затем (после размера NALU) еще 4 байта с другим размером NALU и так далее на.
Но у меня есть много нулей сразу после mdat
:
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0e00000000000000000000000000000000000000000000000000000000000000
8100000000000000000000000000000000000000000000000000000000000000
65b84f0f87fa890001022e7fcc9feef3e7fabb8e0007a34000f2bbefffd07c3c
bfffff08fbfefff04355f8c47bdfd05fd57b1c67c4003e89fe1fe839705a699d
c6532fb7ecacbfffe82d3fefc718d15ffffbc141499731e666f1e4c5cce8732f
bf7eb0a8bd49cd02637007d07d938fd767cae34249773bf4418e893969b8eb2c
Перед mdat
атом только ftyp
mp42
, isom
mp42
и free
атомов. Все остальные атомы (moov
, ...) находятся в конце файла (это то, что делает Android, когда он записывает в сокет, а не в файл). Но в случае необходимости у меня есть PPS и SPS из другого файла с теми же настройками камеры и кодировщика, которые были записаны только в этом случае до этого, чтобы получить данные PPS и SPS.
Так как же я могу получить NALU от этого?
Ну, мой код работает (много NALU типа 1, иногда типа 5) 80% времени. Но когда-то, в начале есть эти нули, и он идет полным бананом. К сожалению, я не могу легко использовать другие контейнеры, а затем mpeg4 и 3gpp в Android. И я знаю, что есть только видео в 'mdat'. – Pitel
Тогда я думаю, вам нужно полностью пропустить контейнер и использовать исходные буферы вывода из MediaCodec. – szatmary
Я бы, если бы мог. Но мы хотим поддерживать Android 2.3, поэтому я должен использовать 'MediaRecorder', создать' ParcelFileDescriptor.createPipe() 'и передать один файловый дескриптор в' MediaRecorder', а другой - обрабатывать поток и читать из канала. И этот нулевой заполненный двоичный код - это то, что я иногда получаю. – Pitel