FFmpeg demultiplexelés

Ffmpeg Demultiplexing



A demultiplexelés a multimédia fejlesztés alapvető funkciója. A demultiplexelési funkció az, hogy ezen kívül különféle hang- és videofolyamokat osztanak szét az audio- és videojelforráson, emellett a demultiplexelés általában egy aktív művelethez tartozik, vagyis kiveszi azt az audio- és videojelforrásból.

Az adatfolyam struktúrája Forrás-> Demux-> Áramlat



A fő megvalósítási módok a következők:



1) Közvetlen mód: A megfelelő audio vagy video adatokat közvetlenül a jelforrásból szerezheti be. Ez a módszer alkalmas szekvenciális olvasásra és olyan jelforrásokra, mint a keretpozíció metaadatai.



Ebben a módban az adatokat tulajdonképpen közvetlenül a Demux-tól nyerjük, természetesen a Stream-től is, majd közvetett módon Demux-nak hívjuk.

2) Index mód: Ha a közvetlen mód nem tartalmazza a keretpozíció metaadatainak (vagy a rögzített valós idejű adatfájl) adatait, a keresés nem hajtható végre.

A probléma megoldása érdekében a hang- vagy videofolyam külön indexelhető a fájlelemzési folyamat során. Ennek a módnak a használatával a Demux funkciója az adatok elemzése után gyengül, és a tényleges adatgyűjtés a Source-> Stream.



3) Gyorsítótár mód: Demultiplex audio és video adatokat, külön tárolja őket, majd szerezze be az adatokat a megfelelő adatfolyam felületen keresztül. A hálózati folyamok demultiplexelése ezt a módot használja.

Az általános demultiplexelési folyamat a következő:

1.1. Ábra A multiplexelés folyamatábrája

2. Demultiplexhez kapcsolódó struktúrák

3. Demultiplexelési folyamat

Az MP4-nek megfelelő AVFormatContext:

AVInputFormat ff_mov_demuxer = { .name = 'mov,mp4,m4a,3gp,3g2,mj2', .long_name = NULL_IF_CONFIG_SMALL('QuickTime / MOV'), .priv_class = &mov_class, .priv_data_size = sizeof(MOVContext), .extensions = 'mov,mp4,m4a,3gp,3g2,mj2', .read_probe = mov_probe, .read_header = mov_read_header, .read_packet = mov_read_packet, .read_close = mov_read_close, .read_seek = mov_read_seek, .flags = AVFMT_NO_BYTE_SEEK, }