Mp4-failivormingu sõelumine

Mp4 File Format Parsing



Praegu on MP4 kontseptsioon vallandatud väga ägedalt ja väga kaootiliselt. Esimene MP4 viitab helile (MP3 täiendatud versioon), MPEG-2 AAC standardile. Seejärel kanti MP4 kontseptsioon videole, mis vastab MPEG-4 standardile. Tänapäeval on meie populaarne nimi enamasti mängija, mis suudab esitada videot MPEG-4 standardses kodeerimisvormingus. Selle artikli sisul pole aga ülaltooduga midagi pistmist. Arutleme MP4-failide kapseldamise vormingu üle. Vastav standard on ISO / IEC 14496-12, mis on infotehnoloogia audiovisuaalsete objektide kodeerimise 12. osa: ISO meediumifailivorming. (Infotehnoloogia audiovisuaalsete objektide kodeerimine, osa 12: ISO baasi meediumifailide formaat). ISO / IEC organisatsiooni määratud standardid on üldjuhul väljendatud numbriliselt, ISO / IEC 14496, standard MPEG-4.

MP4 videofailide kapseldamisvorming on määratletud QuickTime konteinervormingu põhjal, seega on viide QuickTime vormingu määratlusele MP4 failivormingu mõistmiseks abiks. MP4-failivorming on väga avatud konteiner, mida saab kasutada peaaegu kõigi meediumistruktuuride kirjeldamiseks. MP4-failides olevad meediakirjeldused on meediumiandmetest eraldi ja meediumiandmete korraldamine on samuti tasuta, mitte tingimata kronoloogilises järjekorras. Isegi meediumiandmed võivad teistele failidele otse viidata. Samal ajal toetab MP4 ka meediumide voogesitust. MP4 kasutatakse praegu laialdaselt h.264 video ja AAC heli pakkimiseks ning see on HD-video esindaja.



Vaatame nüüd, milline näeb välja MP4-failivorming.



1 Ülevaade



Kõik MP4-failis olevad andmed on kasti installitud (QuickTime'i aatom), see tähendab, et MP4-fail koosneb mitmest kastist, igal kastil on tüüp ja pikkus ning kasti saab mõista kui andmeid objekti blokeerimine. Kast võib sisaldada veel ühte kasti, mida nimetatakse konteinerkastiks. MP4-failil on kõigepealt ainult üks 'ftyp' tüüpi kast, mis on märk MP4-vormingust ja sisaldab faili kohta teavet, seal on ainult üks 'moov' tüüpi kast (Movie Box), mis on omamoodi Konteineri kasti alamkast sisaldab meediumi metaandmete teavet, MP4-faili meediumiandmed asuvad tüübi kastis „mdat” (Midia andmekast) ja seda tüüpi kast on ka konteinerikast, mis võib ei pruugi olla olemas (kui meediaandmed viitavad teistele failidele, kirjeldatakse meediumiandmete struktuuri metaandmetega.

Siin on mõned mõisted:

rada Esindab proovide kogu. Meediumiandmete puhul tähistab rada video- või helijärjestust.



vihje rada See konkreetne rada ei sisalda meediumiandmeid, kuid sisaldab selle asemel mõningaid juhiseid teiste andmeradade voogedastusmeediumisse pakkimiseks.

proov Vihjeteta loo puhul on videoproov videoraam või järjestikuste videokaadrite komplekt ning heliproov on pidev kokkusurutud heli, mida ühiselt nimetatakse näidiseks. Vihjete raja jaoks määratleb näidis ühe või mitme voogesituse meediumipaketi vormingu.

näidislaud Tabel, mis näitab salpe ajastust ja füüsilist paigutust.

tükk Rööbastee mitmest proovist koosnev üksus.

Selles artiklis me ei käsitle vihjet sisaldavat sisu, vaid keskenduge kohalikele MP4-failidele, mis sisaldavad meediumiandmeid. Allpool olev joonis näitab tüüpilise MP4-faili struktuuri.

2, kast

Kõigepealt tuleb märkida, et baidi järjestus kastis on võrgu baitide järjestus, mis on suur endian (Big-Endian). Lühidalt öeldes on 32-bitine 4-baidine täisarvude salvestusmeetod kõrgetasemeline bait. Mälu madalamas otsas. Kast koosneb päisest ja kehast, kus päis määrab ühtlaselt kasti suuruse ja tüübi ning kehal on tüübist erinev tähendus ja vorming.

4 baiti (32 bitti) standardkasti alguses on kasti suurus, mis sisaldab kasti suurust ja kasti, nii et saaksime iga kasti failis üles leida. Kui suurus on 1, tähendab see, et kasti suurus on suur ja tegeliku suuruse väärtus saadakse väljal suurim. (Tegelikult kasutab tõenäoliselt ainult kasti „mdat” tüüpi suur suurus.) Kui suurus on 0, tähendab see, et kast on faili viimane lahter ja faili lõpp on kasti lõpp . (Samuti eksisteerib ainult kastis 'mdat'.)

Suurusele järgnevad 32 bitti on kasti tüüp, mis on tavaliselt 4 tähemärki, näiteks 'ftyp', 'moov' jne. Need kastitüübid on juba eelnevalt määratletud, mis tähendab fikseeritud tähendust. Kui see on 'uuid', tähendab see, et kast on kasutaja laienditüüp. Kui kasti tüüp on määratlemata, tuleks seda ignoreerida.

3 、 Failitüübi kast (ftyp)

Kastil on üks ja ainult üks ning seda saab lisada ainult failikihti, kuid mitte teistesse lahtritesse. Kast tuleks asetada faili algusesse, näidates teavet MP4-faili rakenduse kohta.

Keha 'ftyp' sisaldab omakorda 32-bitist peamist kaubamärki (4 tähemärki), 32-bitist alaealist versiooni (täisarv) ja ühilduvate kaubamärkide massiivi, millel on 32-bitised (4 tähemärki) ühikuelemendid. See on kogu teave, mida kasutatakse failirakenduse taseme näitamiseks. Kasti baitide näide on järgmine:

4 、 Filmiboks ov moov)

Kast sisaldab failikandja metaandmete teavet, 'moov' on konteineriboks ja konkreetset sisuteavet tõlgendab alamkast. Sarnaselt kastile Failitüüp on kastil üks ja ainus ning see sisaldub ainult failikihis. Üldiselt järgneb 'moov' 'ftyp'ile.

Tavaolukorras (piiratud ruumiga selgitab see artikkel ainult levinud MP4-faili struktuuri) sisaldab „moov” 1 „mvhd” ja mitu „trak”. 'Mvhd' on päisekast, mis kuvatakse tavaliselt moov'i esimese alamkastina (muude konteinerikastide puhul peaks päisekast ilmuma esimese alamkastina). 'trak' sisaldab teavet raja kohta ja on konteinerkast. Järgmisel joonisel on kujutatud osa „moov” baidinäide, kus punane osa on kasti päis, roheline on „mvhd” ja kollane on „trak”.

4.1 Filmi päisekast (mvhd)

'Mvhd' struktuur on järgmine.

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

loomise aeg

4

Loomise aeg (sekundid võrreldes UTC ajaga 1904-01-01 null)

modifitseerimise aeg

4

Muutke kellaaega

ajaskaala

4

Failikandja skaala väärtust 1 sekundi jooksul võib mõista kui 1 sekundi pikkuste ajaühikute arvu.

kestus

4

Raja pikkusega saab kestuse ja ajaskaala väärtuste abil arvutada loo kestuse, näiteks heliraja ajaskaala = 8000, kestus = 560128, kestus on 70.016, videoraja ajaskaala = 600, kestus = 42000, kestus on 70

määr

4

Soovitatav taasesituse kiirus, ülemine 16 ja alumine 16 bitti on vastavalt kümnendkoha täisarv ja kümnendkoht, st vorming [16.16], väärtus on 1.0 (0x00010000), mis näitab tavalist taasesitust

helitugevus

kaks

Sarnaselt kiirusega näitab vorming [8.8] 1,0 (0x0100) maksimaalset helitugevust

reserveeritud

10

Reserveeritud natuke

maatriks

36

Video teisendamise maatriks

eelnevalt määratletud

24

järgmise loo ID

4

Järgmise loo ID-number

Allpool on näidatud 'mvhd' baidinäide. Iga väli on eristatud värvi järgi:

4.2 Rööbastee (trak)

'trak' on ka konteinerkast, mille lapsekast sisaldab meediumiandmete viidet ja raja kirjeldust (välja arvatud vihjerada). MP4-faili meedium võib sisaldada mitut rada ja vähemalt ühte rada. Need rajad on üksteisest sõltumatud ja neil on oma aja- ja ruumiteave. „trak” peab lisaks mitmele valikulisele lahtrile (välja jäetud) sisaldama „tkhd” ja „mdia”. 'Tkhd' on raja päisekast ja 'mdia' on meediumiboks. Kast on konteinerkast, mis sisaldab mõningaid rajakandja andmete teabekaste.

Allpool on toodud „trak” osaline baidinäide, kus kollane on „trak” kasti pea, roheline on „tkhd”, sinine on „edts” (valikuline kast) ja punane on osa „mdia”.

4.2.1 Rööbastee kast Box tkhd)

'Tkhd' struktuur on järgmine.

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

Biti- või töötulemuse väärtus on eelnevalt määratletud järgmiselt:

0x000001 track_enabled, muidu rada ei esitata

0x000002 track_in_movie, mis näitab, et lugule on taasesituse ajal viidatud

0x000004 track_in_preview, mis näitab, et eelvaates on viidatud rajale.

Üldiselt on väärtus 7. Kui meedia kõikidele lugudele_raadiosaade ja eelvaade ei ole seatud, mõistetakse, et vihjeraja jaoks on kõigi nende palade jaoks määratud kaks, väärtus on 0.

loomise aeg

4

Loomise aeg (sekundid võrreldes UTC ajaga 1904-01-01 null)

modifitseerimise aeg

4

Muutke kellaaega

raja ID

4

Id-numbrit, seda ei saa korrata ja see ei tohi olla 0

reserveeritud

4

Reserveeritud natuke

kestus

4

Raja pikkus

reserveeritud

8

Reserveeritud natuke

kiht

kaks

Videokiht, vaikimisi on 0, ülemisel kihil on väärtus väike

asendusrühm

kaks

Rajagrupi teave, vaikimisi on 0 see, et rajal pole teiste radadega rühmasuhet

helitugevus

kaks

[8.8] formaat, kui see on helirada, näitab 1,0 (0x0100) maksimaalset helitugevust, vastasel juhul on see 0

reserveeritud

kaks

Reserveeritud natuke

maatriks

36

Video teisendamise maatriks

laius

4

laius

kõrgus

4

Kõrge, nii [16.16] vormingus väärtused kui ka tegelik pildi suuruse suhe näidiskirjelduses, mida kasutatakse taasesituse ajal ekraani laiuse ja kõrguse jaoks

Allpool on toodud näide 'tkhd' baidist. Iga väli on eristatud värvi järgi:


4.2.2 Meediumiboks (mdia)

'mdia' on ka konteinerkast ning selle lapsekasti struktuur ja tüüp on endiselt suhteliselt keeruline. Vaatame 'mdia' puu diagrammide näidet.


Üldiselt määratleb 'mdia' rajakandja tüübi ja näidisandmed, kirjeldades näidisteavet. Üldine 'mdia' sisaldab 'mdhd', 'hdlr' ja 'minf', kus 'mdhd' on meediumipäise kast, 'hdlr' on käitleja viitekast ja 'minf' on meediumiinfo kast. Vaatame omakorda nende kastide ülesehitust.

4.2.2.1 Meediumipäise kast (mdhd)

'Mdhd' struktuur on järgmine.

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

loomise aeg

4

Loomise aeg (sekundid võrreldes UTC ajaga 1904-01-01 null)

modifitseerimise aeg

4

Muutke kellaaega

ajaskaala

4

Sama tabel

kestus

4

Raja pikkus

keel

kaks

Meediakeelekood. Suurim bitt on 0 ja viimased 15 bitti on 3 tähemärki (nagu on määratletud standardis ISO 639-2 / T)

eelnevalt määratletud

kaks

'Mdhd' baidinäide on toodud allpool. Iga väli on eristatud värvi järgi:

4.2.2.2 Käitleja võrdluskast (hdlr)

'hdlr' selgitab meedia taasesitusprotsessi teavet ja kasti saab lisada ka metakasti (meta). 'HDLR' struktuur on järgmine.

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

eelnevalt määratletud

4

käitleja tüüp

4

Meediumikastis on väärtus 4 tähemärki:

“Vide” - videorada

'Soun' - helirada

“Vihje” - vihjerada

reserveeritud

12

nimi

tähtajatu

Raja tüübi nimi, string, mis lõpeb tähega „ 0”

Allpool kuvatakse 'HDLR' baidinäide ja väljad on juba värviga eraldatud:


4.2.2.3 Meediumiinfo kast (minf)

'minf' salvestab käitleja spetsiifilist teavet, mis tõlgendab jälgitavaid meediumiandmeid, mida meediumihaldur kasutab meediaaja kaardistamiseks meediumiandmeteks ja nende töötlemiseks. Minfis oleva teabe vorming ja sisu on tihedalt seotud meediumitüübi ja meediumitöötlejaga, kes meediumiandmeid tõlgendab. Teised meediakäitlejad ei oska seda teavet tõlgendada. „minf” on konteinerkast, mille tegelikku sisu kirjeldab lapsekast.

Üldiselt sisaldab 'minf' päise kasti, 'dinf' ja 'stbl', kus päisekast jagatakse loo tüübi järgi (st meediumikäsitleja) vastavalt 'vmhd', 'smhd', 'hmhd' ja ' tüüp). Nmhd ',' dinf 'on andmete teabekast ja' stbl 'on tabeli näidiskast. Tutvustame allpool eraldi.

Järgmisel joonisel on näidatud baidi näide jaotises 'minf', kus punane on kasti päis, sinine on 'smhd', roheline on 'dinf' ja kollane on osa 'stbl'.

4.2.2.3.1 Meediumiteabe päisekast (vmhd 、 smhd 、 hmhd 、 nmhd)

Videokandja päisekast (vmhd)

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

graafikarežiim

4

Video sünteesirežiim, kopeerige algne pilt, kui 0, muidu sünteesige opcoloriga

opcolor

2 × 3

{Punane , roheline , sinine}

Helimeedia päisekast (smhd)

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

tasakaal

kaks

Stereo tasakaal, [8.8] vormingu väärtus, tavaliselt 0, -1,0 tähendab kõiki vasakpoolseid kanaleid, 1,0 tähendab kõiki parempoolseid kanaleid

reserveeritud

kaks

Vihje meedia päisekast (hmhd)

kergelt

Null meediumipäisekast (nmhd)

Mitteheli helikandja kasutab seda kasti veidi.

4.2.2.3.2 Andmete teabekast (dinf)

'dinf' selgitab, kuidas leida meediumiteavet ja on konteinerkast. 'dinf' sisaldab tavaliselt 'dref', mis on andmete viitekast. 'dref' sisaldab mitut 'url' või 'urn', mis moodustavad tabeli rajaandmete leidmiseks. Lihtsustatult võib raja jagada segmentideks, millest igaühe saab otsida aadressi põhjal, millele osutab „url” või „urn”. Valimi kirjelduses kasutatakse nende segmentide järjekorranumbreid, et moodustada terviklik segment terviklikuks teeks. Üldiselt on positsioneerimisstring 'url' või 'urn' tühi, kui andmed on failis täielikult olemas.

Drefi baitide struktuur on järgmine.

Väli

Baitide arv

tähtsus

kasti suurus

4

Karbi suurus

kasti tüüp

4

Kasti tüüp

versioon

1

Kasti versioon 0 või 1 on tavaliselt 0. (Järgmised baidid loendatakse versiooniga = 0)

lipud

3

sissekannete arv

4

Elementide arv tabelis 'url' või 'urn'

„url” või „urn” loend

tähtajatu

'url' või 'urn' on lahtrid, 'url' sisu on string (asukoht string) ja 'urn' sisu on stringipaar (nimistring ja asukohistring). Kui kastide „URL” või „urn” kastilipp on 1, on string tühi.

Allpool on baidi näide 'dinf'ist. Kollane kast on „dinf” kasti päis. Punasest osast teame, et URL-i või urn-i arv on 1 ja punasele järgneb kasti URL-i sisu. Lilla on „url” kasti päis (me teame, et see on kasti tüübi järgi „url”), roheline on kasti lipp ja väärtus on 1, mis näitab, et stringi URL-is on tühi, mis näitab, et raja andmed on juba failis.

4.2.2.3.3 Proovilauakast (stbl)

'stbl' on tavalise MP4-faili peaaegu kõige keerulisem kast. Esiteks peate meelde tuletama valimi mõiste. Näidis on meediumiandmete salvestamise üksus, mis on salvestatud meediumitükki, tükikese ja valimi pikkus võib üksteisest erineda, nagu on näidatud järgmisel joonisel.

„stbl” sisaldab teavet valimi kogu aja ja asukoha kohta rajal ning valimi koodekit. Selle tabeli abil saate selgitada proovi ajastust, tüüpi, suurust ja asukohta nende vastavates mahutites. „stbl” on konteinerkast, mille alamkast sisaldab: näidiskirjelduse kasti (stsd), proovikasti võtmise aega (stts), valimi suuruse kasti (stsz või stz2), proovi tükis kasti (stsc), tükikompensatsioonikasti (stco või co64) ), proovikasti koostamise aeg (ctts), proovikasti sünkroonimine (stss) jms.

'stsd' on hädavajalik ja sisaldab vähemalt ühte kirjet. Kast sisaldab andmete viitekasti näidisandmete teabe hankimiseks. Meediumiproovi salvestuskohta ei saa arvutada ilma 'stsd'. 'stsd' sisaldab kodeeritud teavet, mis salvestab teavet, mis varieerub meediumitüübilt.

Proovi kirjelduskast (stsd)

Kasti päise ja versiooni väljade järel on kirjete loendiväli. Vastavalt kirjete arvule on igal kirjel tüüpinfo, näiteks 'vide', 'sund' jne. Olenevalt tüübist annab näidiskirjeldus erinevat teavet, näiteks Videorada, seal on 'VisualSampleEntry 'tüüpi teave, heliraja jaoks on' AudioSampleEntry 'tüüpi teave.

Sellesse kasti ilmub video kodeerimise tüüp, laius, kõrgus, helikanal, proovivõtt ja muu teave.

Aeg proovikasti proovimiseks (stts)

'stts' salvestab proovi kestuse, kirjeldab valimi ajastamise kaardistamismeetodit, selle kaudu võime valimi leida igal ajal. 'stts' võib sisaldada tihendatud tabelit aja ja proovinumbrite kaardistamiseks ning muid tabeleid, et anda iga proovi pikkus ja osuti. Iga tabeli kirje annab järjestikuse valimi järjekorranumbri samal ajal nihkega, samuti nihke proovidest. Neid nihkeid suurendades saate tabeli näidiseks saamiseks luua terve aja.

Proovi suuruse kast (stsz)

„stsz” määratleb iga proovi suuruse, sealhulgas kõigi proovis olevate proovide arvu ja tabeli, mis näitab iga proovi suurust. Selle kasti suurus on suhteliselt suur.

Näidis tükikasti (stsc)

Tükkidega proovide korraldamine muudab andmete kogumise optimeerimise lihtsaks. Täkk sisaldab ühte või mitut proovi. Stsc-s kasutatakse tabelit, et kirjeldada valimi ja tükikese kaardistamise suhet. Määratud proovi sisaldava tüki leiate proovi leidmiseks sellest tabelist.

Proovikasti sünkroonimine (stss)

'stss' määrab meediumis võtmekaadrid. Tihendatud meediumiandmete puhul on võtmeraamiks tihendatud jadade seeria algkaader, mis dekompressitakse ilma eelmisele kaadrile tuginedes ja järgnevate kaadrite dekompressioon sõltub sellest võtmeraamist. „stss” suudab juhuslikud pöörduspunktid meedias väga täpselt märkida. See sisaldab näidise järjekorranumbrite tabelit. Iga tabeli üksus on rangelt paigutatud vastavalt proovi seerianumbrile, näidates, milline meediumis olev proov on võtmeraam. Kui seda tabelit pole olemas, on iga näidis võtmekaader ja juhuslik pääsupunkt.

Paks nihkekarp (stco)

'stco' määratleb iga tüki asukoha meediumivoogudes. Asukoha määramiseks on kaks võimalust, 32-bitine ja 64-bitine, mis on kasulikud väga suurte filmide jaoks. Tabelis on ainult üks võimalus, see asukoht on kogu failis, mitte üheski kastis, nii et meediumiandmed leiate otse failist kasti tõlgendamata. Tuleb märkida, et kui eelmine lahter on muutunud, luuakse see tabel uuesti, kuna asukohateave on muutunud.

5, vaba ruumi lahter (tasuta või jätke vahele)

„Tasuta” sisu on ebaoluline ja seda saab ignoreerida. Pärast kasti kustutamist ei mõjuta see taasesitust.

6, Meida andmekast (mdat)

Kast sisaldub failikihis ja võib-olla pole saadaval (kui meediumiandmed on kõik välised failiviited) meediumiandmete salvestamiseks. Andmed järgivad otse kasti tüübi välja. Konkreetse andmestruktuuri tähendus peab viitama metaandmetele (peamiselt kirjeldatud näidistabelis).

Tavalise MP4-faili struktuur on valmis ja see võib olla räpane. Järgmine pilt on kasti üldine puu struktuuriskeem, mille abil saab ligikaudselt mõista MP4-faili struktuuri.

See artikkel on mõeldud peamiselt algajatele, kes ei tea eriti MP4-failide ülesehitusest. See on suhteliselt põhiartikkel. Kirjutasin ka teavet ja mul ei olnud sügavat arusaama mõnest MP4-failidega seotud mõistest. Selles peaks olema mõned arusaamatused, loodan, et kõik loevad seda artiklit kriitilise pilguga. Kui midagi on valesti, andke meile sellest teada.

See artikkel viitab peamiselt standardsetele ja netis kasutatavatele blogisarja artiklitele wqyuwss: Mp4 failivorming

Algne link: http://blog.sina.com.cn/s/blog_48f93b530100jz4x.html