2009-02-23 12 views
5

Voglio capire come funziona la decodifica audio e video, specialmente la sincronizzazione dei tempi (come ottenere video a 30 fps, come accoppiarli con audio, ecc.). Non voglio conoscere TUTTI i dettagli, ma solo l'essenza. Voglio essere in grado di scrivere una semplificazione ad alto livello di un vero decodificatore audio/video.decodifica mpeg 2

Potresti fornire dei puntatori a me? Un vero codice sorgente C/C++ di un decoder video/audio MPEG2 sarebbe il modo più veloce per capire quelle cose che penso.

risposta

6

Leggere il codice sorgente da un codec che funziona sembra la strada giusta da percorrere. suggerisco il seguente:

http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html

dato che è menzionate sul sito web mpeg.org, direi che troverete quello che vi serve qui.

In passato ho avuto un po 'di tempo per lavorare sulla decodifica dei video mpeg (senza audio), e i principi sono abbastanza semplici. Ci sono alcune immagini pure incluse, alcune immagini intermedie che sono descritte relativamente a quelle principali più vicine, e il resto è descritto usando le immagini principali/intermedie più vicine.

Uno slot, un'immagine. Ma i codec recenti sono molto più complicati, immagino!

EDIT: sincronizzazione

non sono un esperto nel sincronizzare audio e video, ma la questione sembra essere affrontato con l'utilizzo di uno strato di sincronizzazione (vedi there per una definizione).

+0

Sì, conosco i principi di base della decodifica video, intraprec dct ecc. Tuttavia, è la sincronizzazione che mi interessa. Risposta utile btw, grazie. –

3

Per l'audio/video sincronizzazione, in fondo, ogni video e audio struttura dovrebbe essere data e ora. Il timestamp è in genere noto come PTS (Presentation Time Stamp). Una volta che un video/audio è decodificatore per decodificatore, il renderer audio/video dovrebbe programmare la cornice da visualizzare al momento giusto in modo che l'audio/video sia sincronizzato.

Penso che si possa fare riferimento al capitolo "Timing Model" di MPEG2 Tutorial per i dettagli.

+1

solo per aggiungere qualcosa: è una buona idea derivare il tempo dal suono (ad esempio, i campioni riprodotti dall'inizio) perché l'uscita audio raramente funziona esattamente alla frequenza specificata. L'uso dell'audio garantisce che audio e video rimangano sincronizzati fino alla fine del film. –

1

@ Patric e Nils

Così si dice che ci sono timestamp, Hein ... Questi sono per la parte video solo io immagino. Per l'audio immagino ci siano abbastanza informazioni nell'intestazione (come "samples per second"). Quante volte sono necessari questi timestamp? Immagino che l'interlacciamento di pacchetti audio e video garantisca che i dati video siano sempre in vantaggio rispetto ai dati audio o qualcosa del genere?

EDIT: trovato quello che serviva: http://www.dranger.com/ffmpeg/tutorial01.html

1

Helltone,

Timestamps per i dati audio sono ancora necessari perché l'audio e video frame non possono essere allineati nello stesso luogo. Ad esempio:

V: 1000 1040 1080 1120 ... A: 990 1013 1036 (perduti) 1082

Potrebbe essere necessario compensare lo sfasamento tra il primo video/audio frame. Inoltre, se è possibile che ci sia una perdita di pacchetti (durante lo streaming video), è necessario il timestamp di entrambi i video/audio per mantenere una sincronizzazione accurata.