Proceso de procesamiento de video en vivo

El vídeo es en realidad una serie de imágenes consecutivas que se reproducen rápidamente.

Cada imagen se llama marco. Siempre que haya suficientes datos en fotogramas por segundo, se podrá reproducir lo suficientemente rápido. Por ejemplo, a 30 fotogramas por segundo, la sensibilidad del ojo humano no puede decir que se trata de imágenes independientes, lo que a menudo llamamos velocidad de fotogramas (FPS).

Cada imagen está compuesta de píxeles, suponiendo que sea 1024 * 768 (este número de píxeles no es demasiado). Cada píxel consta de RGB, de 8 bits cada uno, para un total de 24 bits.

30 fotogramas × 1024 × 768 × 24 = 566.231.040 Bits = 70.778.880 Bytes. ¿Y si es un minuto? 4.246.732.800Bytes, que ya son 4G.

La razón por la que las imágenes de las transmisiones de vídeo se pueden comprimir es porque los vídeos y las imágenes tienen esas características.

  • Redundancia espacial: existe una fuerte correlación entre los píxeles adyacentes de una imagen. Los píxeles adyacentes de una imagen suelen ser degradados, no cambios repentinos. No es necesario guardar cada píxel por completo. Puede guardar uno cada pocos. Los del medio se calculan utilizando algoritmos.
  • Redundancia temporal: el contenido de las imágenes adyacentes en una secuencia de vídeo es similar. Las imágenes que aparecen continuamente en un video no son cambios repentinos y pueden predecirse e inferirse en función de las imágenes existentes.
  • Redundancia visual: el sistema visual humano no es sensible a ciertos detalles, por lo que no se notan todos los detalles, lo que permite que se pierdan algunos datos.
  • Redundancia de codificación: diferentes valores de píxeles tienen diferentes probabilidades de aparición: aquellos con alta probabilidad usan menos bytes y aquellos con baja probabilidad usan más bytes, similar a la idea de la codificación Huffman.

Género 1 : VCEG (Grupo de Expertos en Codificación de Video) de la UIT (Unión Internacional de Telecomunicaciones), esto se llama VCEG en la UIT. Dado que se trata de telecomunicaciones, es concebible que inicialmente se centraran en la codificación de vídeo y principalmente en la transmisión.

Género 2 : MPEG (Moving Picture Experts Group) de ISO (Organización Internacional de Estándares). Este es MPEG bajo ISO. Originalmente se usaba para almacenamiento de video. Por ejemplo, codificar y guardar en VCD y DVD.

El protocolo de red empuja la transmisión de video codificada desde el ancla al servidor. Hay un servidor que ejecuta el mismo protocolo en el servidor para recibir estos paquetes de red y obtener la transmisión de video en su interior. Este proceso se llama transmisión.

Después de que el servidor recibe la transmisión de video, puede realizar cierto procesamiento en la transmisión de video, como la transcodificación, es decir, la conversión de un formato de codificación a otro formato. Debido a que los clientes utilizados por los espectadores varían ampliamente, es necesario asegurarse de que todos puedan ver la transmisión en vivo.

Una vez que se procesan las transmisiones, puede esperar a que los clientes espectadores soliciten estas transmisiones de video. El proceso de solicitudes de clientes por parte de los espectadores se denomina pull streaming.

Si hay muchos espectadores viendo un video en vivo al mismo tiempo, todas las transmisiones se extraerán de un servidor, lo cual es demasiado estresante. Por lo tanto, se necesita una red de distribución de video para precargar el video en el nodo de borde más cercano para que la mayoría de los espectadores pueden verlo. El video se extrae del nodo perimetral, lo que puede reducir la presión sobre el servidor.

Cuando el cliente del espectador baja la transmisión de video, es necesario decodificarla, es decir, a través del proceso inverso al proceso anterior, una cadena de binarios incomprensibles se convierte en fotogramas de imágenes vívidas, que se reproducen en el cliente. puedes ver bellezas y chicos guapos.

Todo el proceso de transmisión en vivo se puede describir con esta imagen.

  • Encuadro, también llamado fotograma clave. Hay una imagen completa en el interior y solo se necesitan los datos de este cuadro para completar la decodificación.
  • Trama P, trama codificada de predicción directa. El fotograma P representa la diferencia entre este fotograma y un fotograma clave anterior (o fotograma P). Al decodificar, debe utilizar la imagen previamente almacenada en caché y superponer la diferencia con la definición de este fotograma para generar la imagen final.
  • Trama B, trama codificada por interpolación predictiva bidireccional. El cuadro B registra la diferencia entre este cuadro y los cuadros anteriores y posteriores. Para decodificar un cuadro B, no solo se debe obtener la imagen almacenada en caché anterior, sino también la imagen posterior. La imagen final se obtiene superponiendo los datos de las imágenes anterior y posterior con los datos de este cuadro.

Se puede ver que el cuadro I es el más completo, el cuadro B tiene la tasa de compresión más alta y la secuencia de cuadros comprimidos debe aparecer en el intervalo IBBP. Esto es codificación a través del tiempo.

Un vídeo se puede dividir en una serie de fotogramas. Cada fotograma se divide en una serie de porciones. Cada porción se coloca en una NALU. Las NALU están separadas por identificadores de inicio especiales. En cada I fotograma Delante de la primera porción, una NALU que almacena SPS y PPS por separado debe insertarse, formando eventualmente una secuencia NALU larga.

RTMP se basa en TCP, por lo que ambas partes deben establecer una conexión TCP. Además de la conexión TCP, también necesita establecer una conexión RTMP, es decir, en el programa, debe llamar a la función Conectar de la biblioteca de clases RTMP para crear explícitamente una conexión.

Hay dos cosas principales: una es el número de versión. Si los números de versión del cliente y del servidor son inconsistentes, no funcionará. El otro es la marca de tiempo. En la reproducción de video, el tiempo es muy importante. Cuando se comunican flujos de datos posteriores, a menudo se incluye la diferencia en las marcas de tiempo, por lo que ambas partes deben conocer la marca de tiempo de la otra parte desde el principio.

El proceso de transmisión consiste en poner NALU en el mensaje y enviarlo, lo que también se denomina paquete de paquetes RTMP. El formato del Mensaje es así.

Cuando RTMP envía y recibe datos, no utiliza el mensaje como unidad, sino que divide el mensaje en fragmentos para enviarlos, y el siguiente fragmento debe enviarse solo después de enviar un fragmento. Cada fragmento tiene un ID de mensaje, que indica a qué mensaje pertenece. El extremo receptor también ensamblará el fragmento en un mensaje de acuerdo con este ID.

Supongamos que la longitud del mensaje de un vídeo es 307, pero se acuerda que el tamaño del fragmento es 128, por lo que se dividirá en tres fragmentos.

El Tipo = 0 del primer fragmento significa que el encabezado del fragmento está completo; la marca de tiempo en el encabezado es 1000, la longitud total es 307, el tipo es 9, es un video, el ID de transmisión es 12346 y la parte de texto contiene 128 bytes de datos.

El segundo fragmento también necesita enviar 128 bytes. Dado que el encabezado del fragmento es el mismo que el del primer fragmento, se utiliza el tipo de fragmento = 3, lo que significa que no se enviará nuevamente si el encabezado es el mismo.

La longitud de los datos que enviará el tercer fragmento es 307-128-128 = 51 bytes y todavía se utiliza el tipo = 3.

De esta forma, los datos llegan continuamente al servidor de medios de transmisión y todo el proceso es así.

La red de distribución se divide en dos capas: central y periférica. Los servidores de capa perimetral están desplegados en todo el país y en los principales operadores, muy cerca de los usuarios. La capa central es el clúster de servicios de transmisión de medios, que es responsable de reenviar el contenido. El sistema de equilibrio de carga inteligente selecciona el servidor perimetral más cercano en función de la información de ubicación geográfica del usuario para proporcionar servicios de transmisión push/pull al usuario. La capa central también es responsable de los servicios de transcodificación, por ejemplo, convirtiendo flujos de código del protocolo RTMP en flujos de código HLS.

El cliente del espectador transmite la transmisión a través de RTMP.

Lo primero que se debe leer son los parámetros de decodificación de H.264, como SPS y PPS, y luego los cuadros NALU recibidos se decodifican y se entregan a la emisora ​​para su reproducción, y aparece una imagen de video colorida.

Este artículo es una nota de estudio del día 16 de septiembre. El contenido proviene del "Protocolo de Internet" de Geek Time . Se recomienda este curso.

Supongo que te gusta

Origin blog.csdn.net/key_3_feng/article/details/132927393
Recomendado
Clasificación