Ich schreibe ein Werkzeug zum Untersuchen von MP4-Dateien (bekannt als ISO-Basismediendateiformat, ISO 14496, Teil 12).
Ich kann die meisten der in ISO 14496-12 aufgelisteten Felder interpretieren, die von OSS generiert werden. Ich muss noch herausfinden, wie man einzelne Videozugangseinheiten und Audiozugangseinheiten herauszieht.
Ich bin ziemlich zuversichtlich, dass das H.264-Video in der 'mdat' Box nicht die ISO 14496-10 Annex B "0x000001" Präfix auf den NAL-Einheiten hat.
Ich habe mit der Interpretation von SampleToChunkBox ('stsc'), SampleSizeBox ('stsz') und ChunkOffsetBox ('stco') experimentiert, um Media-Samples im 'mdat' zu finden, aber ich kann nichts finden Ich kann als nal_unit () (ISO 14496-10 Abschnitt 7.3.1) oder als slice_header () (Abschnitt 7.3.3) interpretieren.
Ich bin auch neugierig, wo die SPS (7.3.2.1) und PPS (7.3.2.2) leben. Ich habe den Verdacht, dass diese irgendwo in der 'Trak'-Box leben, aber ich habe nicht herausgefunden, wo.
Zeiger auf Anwendungen oder Bibliotheken sind von begrenztem Nutzen. Ich schreibe gerade eine Anwendung, und externer Quelltext ist im Vergleich zu einer mathematischen Erklärung schwerer zu verstehen (belastet durch sein eigenes Framework).
Nachdem ich ein paar Stunden damit verbracht hatte, andere Fragen zu stapeln, stolperte ich schließlich über kurze Antworten, die mich zu einer umfassenderen Antwort führten.
Die Kapselung von H.264 in ISO-Mediendateien wird von ISO abgedeckt 14496 Teil 15. Die SPS und PPS sind in der AvcC-Box versteckt dokumentiert in Abschnitt 5.3.4.1.2 und 5.2.4.1.1. Diese Box sagt auch wie lange die Längenfelder bei der Interpretation der Beispiele sind.
Die Proben sind in Abschnitt 5.2.3 dokumentiert und bestehen aus einer Reihe von NAL-Einheiten, denen eine Länge vorangestellt ist. Ein Beispiel MP4 von ffmpeg hat eins Scheibe pro Probe, aber die allererste Probe enthält eine SEI enthält Text, der die Version des H.264 - Codecs und der Codierungsparameter.