¿Cómo reproduce una computadora un video mientras hace otra cosa?


8

¿Cómo se realiza la reproducción de video en una computadora? Obviamente, no se basa únicamente en la CPU, ya que la reproducción de video continúa cuando un usuario realiza otra actividad, como escribir en un campo de comentarios de YouTube. Esta tarea parece aún más complicada en el caso de la transmisión de video, donde presumiblemente los datos deben transferirse desde la interfaz de red al controlador de video / gráficos.

EDITAR: Debería haber dejado claro que entiendo que la CPU cambia entre múltiples procesos y subprocesos todo el tiempo. Mi pregunta estaba destinada a ser más específicamente sobre la reproducción de video. ¿El procesamiento de video se realiza en el chipset / tarjeta de gráficos? ¿Esos suelen ofrecer almacenamiento en búfer? ¿O puede ser manejado todo por una CPU de un solo núcleo con tiempo de sobra para otras tareas, o me equivoco al pensar que las CPU de gama baja pueden reproducir video sin demoras (sin red)?


2
Cualquier núcleo puede simplemente ejecutar una operación en cualquier paso de tiempo discreto, pero como es realmente rápido, puede cambiar entre hacer las cosas tan rápido que no podemos detectarlo. Si pudiéramos escuchar o ver a tiempo los pasos en el rango de nanosegundos, parecería / suena como si estuviera tartamudeando. La programación sería el tema aproximado para esto, supongo; El truco es probablemente programar cosas sensibles al tiempo (como reproducir medios o cambiar el contenido de la pantalla) con la frecuencia suficiente para que nuestro cerebro no pueda darse cuenta de que se hizo algo más en el medio. (Nota: lo anterior es una conjetura aproximada, pero ahí es donde miraría).
G. Bach

1
Agregue al comentario anterior que los chips modernos tienen varios núcleos (léase: varias CPU) y que hay otros procesadores para compartir la carga de trabajo, como el procesador gráfico.
babou

Gracias, pero pensé en varios núcleos y lo descarté, ya que parecía que incluso las computadoras de gama baja más antiguas pueden hacer algo más mientras muestran videos.
Ellen Spertus

Respuestas:


3

Una tarjeta gráfica moderna funciona más o menos (algo) igual que una CPU normal.

En una tarjeta gráfica, tendrá (a veces) múltiples procesadores, cada procesador tendrá (a veces) múltiples multiprocesadores, cada uno con múltiples núcleos.

Cuando un video se carga en una tarjeta gráfica, se transcodifica en el búfer de salida mediante una determinada asignación de núcleos multiprocesador. Este búfer de salida es generalmente una memoria accesible a nivel mundial, lo que significa que cualquier núcleo de cualquier multiprocesador de al menos un procesador (pero a menudo todos) tiene acceso directo de r / w.

Por lo general, un multiprocesador está limitado a un conjunto de instrucciones, lo que significa que una tarjeta gráfica solo puede operar simultáneamente con tantos "sabores" diferentes de subprocesos como multiprocesadores en la tarjeta. Un "sabor" podría ser, por ejemplo, una simulación física, un video renderizado, un sistema operativo o una función criptográfica. Naturalmente, un multiprocesador puede programar varios tipos de subprocesos para que se ejecuten de forma intermitente, pero esto generalmente no es necesario.

Decodificar un video a menudo es mucho trabajo, teniendo en cuenta cómo suele estar comprimido y, a veces, cifrado, por lo que el búfer de visualización no siempre está ocupado. Por lo tanto, es relativamente fácil renderizar el cursor del mouse sobre un cuadro de video. Sin embargo, a veces esto no funciona del todo, y verá cómo desaparece el cursor en algunas aplicaciones. Esto no se debe necesariamente a que la aplicación esté "encima" del sistema operativo, sino simplemente porque está acaparando parte del búfer de salida.


3

Esto se implementa utilizando varias técnicas diferentes. Dentro de la aplicación (por ejemplo, el navegador web), el programa puede ejecutar diferentes hilos de ejecución. Un hilo puede realizar la transmisión / reproducción de video, mientras que un hilo diferente puede manejar al usuario escribiendo en el campo de comentarios.

Estos subprocesos, junto con muchos otros subprocesos y procesos, a su vez son programados por el sistema operativo (incluso si solo tiene abierto el navegador web, el sistema operativo tiene muchas tareas en segundo plano en ejecución, como el administrador de ventanas, la cola de impresión, el Administrador de dispositivos USB, etc.). El trabajo del planificador del sistema operativo es determinar qué subproceso puede ejecutarse activamente, en qué núcleo del procesador y durante cuánto tiempo. En un sistema típico, un subproceso puede ejecutarse hasta un valor de umbral, supongamos 100 milisegundos, antes de que el programador permita que se ejecute otra tarea.

Este cambio de tareas es fundamental para todos los sistemas operativos modernos (Windows, Linux, UNIX, etc.), y suele ser una parte importante de un curso de pregrado en sistemas operativos.


Gracias por la respuesta. Debería haber dejado claro que sé sobre subprocesamiento múltiple y programación múltiple. (De hecho, estoy impartiendo un curso de pregrado sobre sistemas operativos por aproximadamente la décima vez). Simplemente no entiendo específicamente cómo funciona la reproducción de video
Ellen Spertus

1
@espertus Aquí hay un documento sobre la programación de medios continuos , tal vez eso pueda aclarar algunas de sus preocupaciones. Si bien tener que leer es mucho más trabajo que alguien que solo proporciona una respuesta, pensé que al menos es un punto de partida, ya que no estoy seguro de que haya alguien en este foro versado en los temas relevantes.
G. Bach

2

La reproducción de video no es tan especial. Claro, la decodificación acelerada por GPU es común en estos días, lo que libera la CPU para otro trabajo, pero no siempre fue así. Definitivamente es posible una reproducción fluida de video con una sola CPU, siempre y cuando haya suficiente CPU disponible para la resolución y complejidad del algoritmo de compresión, y hacerlo junto con otras tareas es igual de posible, siempre que haya suficiente CPU para ambas, y el sistema operativo programa bien. El video de 30 fps es común, lo que permite que 33 ms decodifiquen cada cuadro. Incluso los chips bastante antiguos pueden administrar eso para MPEG-2 con calidad SD, y los chips modernos pueden administrarlo para HD MPEG-4; la computadora portátil en la que estoy escribiendo esto requiere aproximadamente el 20% de la CPU para reproducir 720p AVC de alto perfil.

En cuanto al almacenamiento en búfer, hay una cantidad limitada disponible. El mínimo para cualquier cosa que no quiera que se rompa la pantalla es el "doble búfer", donde hay dos cuadros en la memoria: la tarjeta de video muestra uno mientras el software actualiza el otro, y los roles de los dos se intercambian durante la vertical actualizar. Con "triple buffering", hay dos cuadros fuera de pantalla, el siguiente y el siguiente + 1, lo que reduce la cantidad de jitter. En las tarjetas modernas con grandes cantidades de RAM, es posible ir más allá de eso a un mayor número de fotogramas, con los únicos inconvenientes que es la latencia visible para el usuario al buscar, iniciar la reproducción, etc. y el hecho de que otras aplicaciones pueden querer esa RAM de video para ellos .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.