¿Qué sucede cuando se reproduce un video comprimido?

He estado leyendo sobre la compresión de video. Entiendo que los tamaños de los archivos multimedia 'sin procesar' son demasiado grandes para el uso práctico, por lo que deben comprimirse, pero me pregunto qué sucede cuando se reproduce el video.

Quiero decir, ¿se descodificó (descomprimió) todo el video y se almacenó en algún lugar de la memoria (esto no parece posible) o se decodificaron los fotogramas individuales uno a la vez y luego se olvidaron, de modo que cuando desee reproducir una parte del video? ¿Necesitas decodificarlo de nuevo?

Probablemente sea una pregunta muy novata y es porque yo soy uno, por lo que agradecería cualquier información.

Sí, el reproductor solo decodifica fotogramas según sea necesario. El búfer del decodificador almacena todos los fotogramas necesarios para la cola actual de fotogramas que se están reproduciendo. Cuando reproduces una parte que jugaste hace algún tiempo, se vuelve a decodificar. Sin embargo, los jugadores pueden mantener un caché, por lo que una parte reproducida poco después de su última reproducción aún puede estar en ese caché.

Respuestas (2)

En los esquemas de compresión más comunes, no existe una correspondencia 1::1 entre los cuadros de "video" y los cuadros de "archivo" (o transmisión) **. Cualquier cuadro de video en particular puede requerir el contenido de varios cuadros de archivo para convertirse en una imagen visible completa. Entonces, un reproductor leerá y almacenará en el búfer tantos cuadros de archivo como sea necesario para reconstruir el cuadro de video en cuestión. El reproductor puede almacenar mucho más en el búfer, pero no es necesario.

Por ejemplo, si algún cuadro de video termina como un cuadro P cuando se codifica en el archivo, el reproductor deberá mirar hacia atrás para encontrar el cuadro I anterior, decodificarlo y luego aplicar las diferencias codificadas en los cuadros P intermedios para obtener el cuadro completo. resultado.

** EDITAR: por supuesto, hay un cuadro de archivo para cada cuadro de video, pero el punto es que generalmente no puede leer un cuadro del archivo y obtener un cuadro de video completo: eso solo es cierto para cuadros I.

La idea es poder transmitir los datos y reproducirlos en un dispositivo tonto (como un "reproductor de DVD"). El dispositivo tonto generalmente utilizará la menor cantidad de hardware posible, por lo que seguramente no tendrá suficiente memoria para descomprimir toda la película y luego reproducirla. Además, tardaría una eternidad en empezar. El concepto de transmisión significa que desea que los datos se reproduzcan a medida que ingresan.

Mi entendimiento de H.264 es que tiene un marco llamado I-Frame que puede descomprimir por sí solo. Esta es esencialmente una imagen JPEG dentro de su archivo de película.

Los siguientes cuadros van a ser P-Frames que hacen uso del cuadro anterior para generar el nuevo cuadro. Más o menos, si solo se mueve un personaje en su pantalla, solo necesita borrar el personaje donde estaba y mostrarlo donde está ahora. El resto de la pantalla puede permanecer sin cambios. En ese caso, puede comprimir mucho los datos de imagen de ese cuadro (es decir, un cuadro I puede tener 250 Kb en una película 4K, mientras que un cuadro P puede tener tan solo 2 Kb).

Además, el esquema de compresión H.264 admite B-Frames (Bidireccional). Esto es un poco más complicado. Significa que un cuadro solo se puede descomprimir después de que se descomprima algún cuadro futuro. Esto significa que el dispositivo que descomprime fotogramas debe poder almacenar en caché más fotogramas descomprimidos que solo el último I-Frame y el último P-Frame (y hasta donde yo sé, los P-Frames pueden hacer referencia a P-Frames más antiguos que el anterior ).

Cada decodificador tendrá límites a lo que puede hacer. Por ejemplo, estoy usando Supersónicos para crear un sistema integrado y solo admiten video comprimido en 4: 2: 0 (2 bytes de croma por cada 4 píxeles). La cantidad de búferes que tiene un decodificador y si se admiten B-Frames son otras características que pueden o no funcionar según el decodificador.