¿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)?
fuente
Respuestas:
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.
fuente
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.
fuente
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 .
fuente