2009-02-23 19 views
5

Quiero entender cómo funciona la decodificación de video y audio, especialmente la sincronización de tiempo (cómo obtener video a 30 fps, cómo acoplar eso con audio, etc.). No quiero saber TODOS los detalles, solo la esencia de eso. Quiero poder escribir una simplificación de alto nivel de un decodificador de audio/video real.decodificación mpeg 2

¿Me podría dar consejos? Un código fuente real de C/C++ de un decodificador de audio/video MPEG2 sería la forma más rápida de entender esas cosas, creo.

Respuesta

6

Leer el código fuente de un códec que funciona parece ser el camino correcto. Sugiero lo siguiente:

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

dado que es mencionado en el sitio web mpeg.org, yo diría que encontrará lo que necesita aquí.

En el pasado he tenido algo de tiempo para trabajar en la decodificación de videos MPEG (sin audio, sin embargo), y los principios son bastante simples. Se incluyen algunas imágenes puras, algunas imágenes intermedias que se describen con relación a las principales principales, y el resto se describe utilizando las imágenes principales/intermedias más cercanas.

Ranura única, una imagen. ¡Pero los códecs recientes son mucho más complicados, supongo!

EDIT: la sincronización

no soy un experto en la sincronización de audio y vídeo, pero el tema parece ser tratadas con el uso de una capa de sincronización (véase there para una definición).

+0

Sí, conozco los principios básicos de la decodificación de video, intra-dct, etc. Sin embargo, es la sincronización lo que me interesa. Respuesta útil por cierto, gracias. –

3

Para sincronización de audio/vídeo, básicamente, todos los vídeos y el marco de audio debe estar con marca de tiempo. La marca de tiempo se conoce generalmente como PTS (Sello de tiempo de presentación). Una vez que un video/audio es decodificador por decodificador, el renderizador de audio/video debe programar el cuadro para que se muestre en el momento adecuado para que el audio/video esté sincronizado.

Creo que puede consultar el capítulo "Timing Model" de MPEG2 Tutorial para más detalles.

+1

solo para agregar algo: es una buena idea derivar el tiempo del sonido (por ejemplo, muestras reproducidas desde el principio) porque la salida del sonido rara vez se ejecuta exactamente en la frecuencia especificada. Usar el sonido asegura que el audio y el video permanezcan sincronizados hasta el final de la película. –

1

@ Patric y Nils

por lo que dicen que hay marcas de tiempo, Hein ... Estos son para la parte de vídeo sólo supongo. Para el audio, creo que hay suficiente información en el encabezado (como "muestras por segundo"). ¿Con qué frecuencia se necesitan estas marcas de tiempo? Me imagino que el entrelazado de paquetes de audio y video asegura que los datos de video estén siempre por delante de los datos de audio o algo así.

EDIT: encontrado lo que necesitaba: http://www.dranger.com/ffmpeg/tutorial01.html

1

Helltone,

marcas de tiempo para datos de audio son todavía necesarios, porque el audio y el cuadro de vídeo pueden no estar alineados en el mismo lugar. Por ejemplo:

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

Es posible que necesite para compensar el desfase entre el primer fotograma de vídeo/audio. Además, si es posible que haya pérdida de paquetes (durante la transmisión de video), necesita las marcas de tiempo de ambos, video/audio para mantener una sincronización precisa.