Conocimientos básicos de H.264 y análisis de transmisión de video

Conocimientos básicos de H.264 y análisis de transmisión de video


Tabla de contenido

  1. Descripción general de H.264
  2. Conceptos relacionados con H264
  3. Método de compresión H264
  4. Estructura en capas H264
  5. Estructura de flujo H264
  6. Unidad H264 NAL
  7. Análisis de flujo de video H.264

1. Descripción general de H.264

  1. La codificación consiste en comprimir datos para que los recursos no se desperdicien durante la transmisión.
  2. Use un ejemplo simple para ilustrar la necesidad de codificar: cuando está reproduciendo un video en el monitor, la resolución es 1280 *720, la velocidad de fotogramas es 25, luego el tamaño de datos normal generado en un segundo es: 1280 * 720 (bit píxeles) * 25 (hojas) / 8 (1 byte 8 bits) (resultado: B) / 1024 (resultado: KB) / 1024 (resultado: MB) = 2,75 MB. Obviamente, no puede aceptar datos tan grandes como un segundo y necesita comprimirlos.
  3. H264 pertenece a los datos del nivel de códec en la captura y salida de video.Como se muestra en la figura siguiente, son los datos presentados después de ser codificados por el estándar de codificación cuando los datos se recopilan y comprimen.
    Inserte la descripción de la imagen aquí
  4. Para los archivos de video, el video se compone de un solo cuadro de imagen, como 25 cuadros por segundo, pero existen similitudes entre los bloques de píxeles de los cuadros de imagen, por lo que las imágenes de los cuadros de video se pueden comprimir; H264 adopta con 16 * 16 bloques de tamaño, las imágenes de fotogramas de vídeo se comparan y comprimen de forma similar. Como se muestra abajo:
    Inserte la descripción de la imagen aquí

2. Conceptos relacionados con H264

1. Secuencia

  1. La base teórica seguida en el estándar de codificación H264 se entiende personalmente como: refiriéndose a imágenes adyacentes dentro de un período de tiempo, la diferencia en píxeles, brillo y temperatura de color es muy pequeña. Por lo tanto, cuando enfrentamos imágenes dentro de un período de tiempo, no necesitamos codificar cada imagen en un cuadro completo. En su lugar, podemos seleccionar la primera imagen de este período como la codificación completa, y la siguiente imagen se puede grabar con la primera. El marco puede codificar completamente la diferencia de píxeles de la imagen, brillo y temperatura de color, etc.
  2. ¿Qué es una secuencia? El conjunto de imágenes en el que la imagen cambia poco durante el período anterior se puede llamar secuencia. Una secuencia puede entenderse como un dato con las mismas características. Sin embargo, si una determinada imagen tiene una gran transformación de la imagen anterior, es difícil hacer referencia al fotograma anterior para generar un nuevo fotograma, luego finalizar la eliminación de una secuencia y comenzar la siguiente secuencia. Repite la secuencia anterior para generar una nueva secuencia.

2. Tipo de marco

  1. En la estructura H264, los datos codificados de una imagen de vídeo se denominan fotogramas. Un fotograma se compone de un segmento o de varios segmentos, un segmento se compone de uno o más macrobloques (MB) y un macrobloque se compone de un 16x16 yuv Composición de datos. El macrobloque es la unidad básica de la codificación H264.
  2. H26 utiliza compresión intra-fotograma y compresión entre fotogramas para mejorar la tasa de compresión de codificación;
  3. H264 utiliza una estrategia única de fotograma I, fotograma P y fotograma B para lograr la compresión entre fotogramas consecutivos;
    Inserte la descripción de la imagen aquí
1. Yo
  1. Marco I: marco codificado dentro del marco, marco I representa el marco clave, puede entenderlo como la preservación completa de este marco de imagen; solo se necesita este marco de datos para decodificar (porque contiene la imagen completa)
  2. Encuadro características:
    1. Es un cuadro codificado por compresión de fotograma completo. Realiza la codificación de compresión JPEG y la transmisión de información de imagen de fotograma completo;
    2. La imagen completa se puede reconstruir con solo datos de cuadro I durante la decodificación;
    3. El cuadro I describe los detalles del fondo de la imagen y el sujeto en movimiento;
    4. No es necesario generar fotogramas con referencia a otras imágenes;
    5. El marco I es el marco de referencia del marco P y el marco B (su calidad afecta directamente la calidad de los fotogramas posteriores en el mismo grupo);
    6. La trama I es la trama básica (la primera trama) del GOP del grupo de tramas, y solo hay una trama I en un grupo;
    7. Marco no necesita considerar el vector de movimiento;
    8. La cantidad de información ocupada por la trama I es relativamente grande.
2. Marco P
  1. Trama P: trama de codificación predictiva hacia adelante. El cuadro P representa la diferencia entre este cuadro y el cuadro clave anterior (o cuadro P). Al decodificar, la diferencia definida por este cuadro debe superponerse a la imagen almacenada previamente en búfer para generar la imagen final. (Es decir, el cuadro de diferencia, el cuadro P no tiene datos de imagen completos, solo datos que son diferentes de la imagen del cuadro anterior)
  2. Predicción y reconstrucción de la trama P: la trama P utiliza la trama I como trama de referencia, encuentra el valor predicho y el vector de movimiento de la trama P "un cierto punto" en la trama I y transmite la diferencia de predicción y el vector de movimiento juntos. En el extremo receptor, de acuerdo con el vector de movimiento, el valor predicho de "cierto punto" del marco P se encuentra a partir del marco I y se suma con la diferencia para obtener el valor de muestra del "cierto punto" del marco P , de modo que se pueda obtener un cuadro P completo.
  3. Características del marco P:
    1. El cuadro P es un cuadro codificado separado de 1 a 2 cuadros después del cuadro I;
    2. El cuadro P usa compensación de movimiento para transmitir la diferencia entre él y el cuadro I o P anterior y el vector de movimiento (error de predicción);
    3. Durante la decodificación, el valor predicho en la trama I debe sumarse con el error de predicción para reconstruir la imagen completa de la trama P;
    4. Las tramas P pertenecen a la codificación entre tramas de la predicción directa. Solo se refiere al marco I anterior o marco P más cercano a él;
    5. El marco P puede ser el marco de referencia del marco P después de él, o el marco de referencia del marco B antes y después de él;
    6. Dado que el marco P es un marco de referencia, puede provocar la propagación de errores de decodificación;
    7. Dado que es una transmisión diferencial, la compresión de las tramas P es relativamente alta.
3. Marco B
  1. Trama B: trama de codificación de interpolación predictiva bidireccional. El cuadro B es un cuadro de diferencia bidireccional, es decir, el cuadro B registra la diferencia entre el cuadro actual y los cuadros anterior y siguiente (los detalles son más complicados, hay 4 casos), en otras palabras, para decodificar la Cuadro B, no solo debe obtener la imagen almacenada en búfer anterior, sino también decodificar. Después de la pantalla, la pantalla final se obtiene superponiendo las pantallas frontal y posterior con los datos del cuadro actual. La tasa de compresión de cuadros B es alta, pero la CPU se cansará al decodificar.
  2. El cuadro B utiliza el cuadro I o P anterior y el siguiente cuadro P como cuadros de referencia, "averigua" el valor predicho de un "punto" del cuadro B y dos vectores de movimiento, y luego toma la diferencia de predicción y el vector de movimiento para transmisión. El extremo receptor "encuentra (calcula)" el ​​valor predicho en los dos marcos de referencia de acuerdo con el vector de movimiento y lo suma con la diferencia para obtener el valor de muestra de "algún punto" del marco B, obteniendo así el marco B completo.
  3. Características del marco B
    1. La trama B es predicha por la trama I o P anterior y la trama P siguiente;
    2. La trama B transmite el error de predicción y el vector de movimiento entre ella y la trama I o P anterior y la trama P siguiente;
    3. La trama B es una trama de codificación predictiva bidireccional;
    4. El cuadro B tiene la relación de compresión más alta, porque solo refleja los cambios en el sujeto en movimiento entre los dos cuadros de referencia, y la predicción es más precisa;
    5. La trama B no es una trama de referencia y no provocará la propagación de errores de decodificación.

3. GOP (grupo de imágenes)

  1. GOP es Grupo de imagen (grupo de imágenes), que se refiere a la distancia entre dos cuadros I (la secuencia de video mencionada en la figura siguiente es GOP), Referencia (período de referencia) se refiere a la distancia entre dos cuadros P, que puede ser entendido como sigue La secuencia es casi la misma, es decir, el conjunto de imágenes que no ha cambiado mucho durante un período de tiempo. A modo de comparación, el GOP es 120. Si es 720 p60, es un cuadro I cada 2s. El número de bytes ocupados por una trama I es mayor que el de una trama P, y el número de bytes ocupados por una trama P es mayor que el de una trama B. Por lo tanto, bajo la premisa de la misma tasa de bits, cuanto mayor sea el valor de GOP, mayor será el número de tramas P y B. El número medio de bytes ocupados por cada trama I, P y B es, y más fácil es Obtenga una buena calidad de imagen; cuanto mayor sea la referencia, más fotogramas B y, de manera similar, es más fácil obtener una mejor calidad de imagen.
  2. La estructura GOP generalmente tiene dos números, como M = 3, N = 12. M especifica la distancia entre un fotograma I y un fotograma P, y N especifica la distancia entre dos fotogramas I. Lo anterior M = 3, N = 12, la estructura GOP es: IBBPBBPBBPBBI. La decodificación de cuadros I dentro de un GOP no depende de ningún otro cuadro, mientras que la decodificación de cuadros p depende del cuadro I anterior o cuadro P, y la decodificación del cuadro B depende del cuadro I anterior o cuadro P y del siguiente cuadro P más cercano.

4. Marco IDR (marco clave)

  1. Actualización de decodificación instantánea IDR (Instant Decoding Refresh) actualización de decodificación instantánea. Para mayor comodidad en la codificación y decodificación, la primera trama I en el GOP debe distinguirse de otras tramas I, y la primera trama I se llama IDR, que es conveniente para controlar el proceso de codificación y decodificación, por lo que las tramas IDR deben ser tramas I, pero tramas I No es necesariamente una trama IDR, la función de una trama IDR es refrescarse inmediatamente, de modo que los errores no se propaguen y comenzar a codificar desde la trama IDR como una nueva secuencia. I frame puede ser referenciado a través de frames, IDR no lo hará.
  2. El cuadro I no tiene que hacer referencia a ningún cuadro, pero los cuadros P y B posteriores pueden referirse al cuadro anterior al cuadro I. IDR no permite esto, por ejemplo:
    Inserte la descripción de la imagen aquí
  3. Su función principal es resincronizar la decodificación.Cuando el decodificador decodifica la imagen IDR, borrará la cola del marco de referencia, emitirá o descartará todos los datos decodificados, buscará el conjunto de parámetros nuevamente e iniciará una nueva secuencia. De esta manera, si hay un error repetitivo en la secuencia anterior, puede tener la oportunidad de resincronizar aquí. Las imágenes posteriores a las imágenes IDR nunca se decodificarán utilizando los datos de las imágenes anteriores a IDR.
    Inserte la descripción de la imagen aquí

3. Método de compresión H264

  1. Los algoritmos centrales utilizados por H264 son la compresión intracuadro y la compresión entre cuadros La compresión intracuadro es un algoritmo para generar cuadros I y la compresión entre cuadros es un algoritmo para generar cuadros B y P.
  2. La compresión intracuadro también se denomina compresión espacial . Al comprimir un cuadro de imagen, solo se consideran los datos del cuadro actual sin considerar la información redundante entre cuadros adyacentes, que en realidad es similar a la compresión de imágenes fijas. Intraframe generalmente utiliza un algoritmo de compresión con pérdida. Dado que la compresión intracuadro codifica una imagen completa, se puede decodificar y mostrar de forma independiente. La compresión intracuadro generalmente no logra una compresión alta, que es similar a la codificación jpeg.
  3. El principio de compresión entre cuadros es: los datos de varios cuadros adyacentes tienen una gran correlación, o las características de poco cambio en la información de los dos cuadros antes y después. Es decir, el video continuo tiene información redundante entre cuadros adyacentes De acuerdo con esta característica, comprimir la redundancia entre cuadros adyacentes puede aumentar aún más la cantidad de compresión y reducir la relación de compresión. La compresión entre cuadros también se denomina compresión temporal (Compresión temporal), que se comprime comparando datos entre diferentes cuadros en el eje del tiempo. La compresión entre cuadros generalmente no tiene pérdidas. El algoritmo de diferencia de fotogramas (Framedifferencing) es un método típico de compresión de tiempo. Compara la diferencia entre el fotograma actual y los fotogramas adyacentes, y solo registra la diferencia entre el fotograma actual y sus fotogramas adyacentes, lo que puede reducir en gran medida la cantidad de datos.

1. Descripción del método de compresión

  1. Agrupar, es decir, agrupar una serie de imágenes con poca transformación en un grupo, es decir, una secuencia, que también se puede denominar GOP (Group of Pictures);
  2. Defina marcos y clasifique cada grupo de marcos de imagen en tres tipos: marco I, marco P y marco B;
  3. La trama predicha, la trama I se usa como trama básica, la trama P se predice por trama I y la trama B se predice por trama I y trama P;
  4. Para la transmisión de datos, finalmente se almacenan y transmiten los datos de la trama I y la información de diferencia predicha.

4. Estructura en capas H264

  1. El objetivo principal de H264 es tener una alta relación de compresión de video y una buena afinidad de red. Para lograr estos dos objetivos, la solución H264 es dividir el marco del sistema en dos niveles, a saber, el nivel de codificación de video (VCL: Video Coding Layer ) y la capa de codificación de red (NAL: capa de codificación de red), el flujo H.264 original (flujo desnudo) se compone de una NALU conectada, como se muestra a continuación:
    Inserte la descripción de la imagen aquí
  2. La capa VLC es la definición del nivel de sintaxis del motor de algoritmo central, bloque, macrobloque y segmento, que es responsable de representar eficazmente el contenido de los datos de video y, finalmente, enviar los datos codificados SODB;
  3. La capa NAL define el nivel gramatical por encima del nivel de segmento (como el conjunto de parámetros de secuencia y el conjunto de parámetros de imagen, que se describirán más adelante para la transmisión de la red), y es responsable de formatear los datos y proporcionar la información del encabezado de la manera adecuada requerida por la red. para asegurar los datos Adecuado para la transmisión en varios canales y medios de almacenamiento . La capa NAL empaqueta el SODB en un RBSP y luego agrega un encabezado NAL para formar una unidad NALU La composición específica de la unidad NAL también se describirá en detalle más adelante.
  4. Antes de la transmisión o el almacenamiento de datos en la VCL, estos datos VCL codificados se asignan o encapsulan en unidades NAL. (NALU)
  5. A NALU = un conjunto de información de encabezado NALU correspondiente a la codificación de video + una carga útil de secuencia de bytes sin procesar (RBSP, Carga útil de secuencia de bytes sin procesar).
  6. La estructura principal de la unidad estructural NALU se muestra a continuación; una unidad H.264 NALU original generalmente consta de tres partes: [StartCode] [NALU Header] [NALU Payload], donde Start Code se usa para indicar que este es el comienzo de una unidad NALU, debe ser "00 00 00 01" o "00 00 01", de lo contrario, es básicamente equivalente a un encabezado NAL + RBSP;
    Inserte la descripción de la imagen aquí
  7. La asociación entre SODB y RBSP, la estructura específica se muestra en la Figura 3:
    1. SODB (String Of Data Bits): cadena de bits de datos, es el dato original después de la codificación;
    2. RBSP (Raw Byte Sequence Payload): secuencia de bytes original payload, es decir, los bits finales se agregan en la parte posterior de SODB, es decir, un bit 1 y varios bit 0, para alinear los bytes;
  8. El proceso de formación de RBSP
    1. Si el contenido de SODB está vacío, entonces el contenido de RBSP también está vacío. De lo contrario, el primer byte de RBSP se toma del primero al octavo bits de SODB, y los bytes de RBSP se organizan en orden de izquierda a derecha, de mayor a menor. Por analogía, cada byte de la RBSP se toma directamente del bit correspondiente de SODP. El último byte de RBSP contiene los últimos bits de SODB, así como los bits finales. Entre ellos, el primer bit de los bits finales es 1 y los bits restantes son 0 para garantizar la alineación de bytes. Entonces, RBSP es equivalente a SODB después del último bit de su último byte, seguido de 1 bit con un valor de 1, y luego agregando varios bits de 0 para complementar este byte.
      Inserte la descripción de la imagen aquí

5. Estructura del flujo H264

  1. Antes de describir la unidad NAL en detalle, es necesario comprender la estructura del flujo de bits de H264. El flujo de código del H264 codificado se muestra en la figura siguiente. A partir de la figura, necesitamos obtener un concepto. El flujo de código H264 está compuesto por unidades NAL. Entre ellos, SPS, PPS, IDR y SLICE son algunos tipos de NAL unidades datos.
    Inserte la descripción de la imagen aquí

6. Unidad H264 NAL

1. Estructura de H264 NAL

  1. En el proceso de transmisión de datos de la red real, la estructura de datos de H264 se transmite en NALU (unidad NAL), y la estructura de datos de transmisión se compone de [Encabezado NALU] + [RBSP], como se muestra en la siguiente figura:
    Inserte la descripción de la imagen aquí
  2. Del análisis anterior, podemos saber que los datos del cuadro de video codificados por la capa VCL pueden ser cuadros I / B / P, y estos cuadros también pueden pertenecer a diferentes secuencias; la misma secuencia también tiene conjuntos de parámetros de secuencia correspondientes. Y parámetro de imagen conjunto; En resumen, para completar la decodificación de un video preciso y sin errores, además de los datos del cuadro de video codificados por la capa VCL, también necesita transmitir conjuntos de parámetros de secuencia y conjuntos de parámetros de imagen, etc., por lo que RBSP no solo guarda información de codificación de datos de tramas I / B / P, sino que también puede aparecer otra información en ella.
  3. Se sabe por lo anterior que la unidad NAL es la unidad básica de la transmisión de datos de video real. El encabezado NALU se usa para identificar qué tipo de datos es la siguiente RBSP. Al mismo tiempo, registra si los datos RBSP serán referenciado por otras tramas y si hay un error en la transmisión de la red. Por lo tanto, el encabezado NAL y La función y estructura de RBSP y los datos que transporta requieren una comprensión simple.

2. Encabezado NAL

1. La composición del jefe de NAL

El encabezado de la unidad NAL se compone de tres partes: forbidden_bit (1bit), nal_reference_bit (2bits) (prioridad) y nal_unit_type (5bits) (tipo), como se muestra en la siguiente figura:

  1. F (prohibido): bit prohibido, que ocupa el primer bit del encabezado NAL. Cuando el valor del bit prohibido es 1, significa un error de sintaxis;
  2. NRI: Tome 00 ~ 11, que parece indicar la importancia de este NALU. Por ejemplo, el decodificador NALU de 00 puede descartarlo sin afectar la reproducción de la imagen. 0 ~ 3, cuanto mayor es el valor, más importante es la corriente NAL, y primero debe protegerse. Si el NAL actual pertenece al marco de referencia, o al conjunto de parámetros de secuencia, o la unidad importante del conjunto de parámetros de imagen, este elemento de sintaxis debe ser mayor que 0.
  3. Tipo: tipo de datos de la unidad NAL, que identifica el tipo de datos de la unidad NAL, ocupando del cuarto al octavo bits del encabezado NAL;
    Inserte la descripción de la imagen aquí
2. Tipo de datos de la unidad NAL
  1. El tipo NAL es principalmente que cada uno de estos tipos en la siguiente figura tiene un rol especial;
  2. Ejemplo: 0x00 00 00 01 67, 67: decimal: 0110 0111, 00111 = 7 (decimal), que es el conjunto de parámetros de secuencia

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
4. Antes de introducir los tipos de datos NAL en detalle, es necesario saber que NAL se divide en unidades VCL NAL y unidades no VCL NAL .
5. Las unidades NAL con nal_unit_type de 1, 2, 3, 4, 5 y 12 se denominan unidades VCL NAL, y otros tipos de unidades NAL son unidades NAL no VCL.
6. Otro concepto que debe entenderse son los conjuntos de parámetros. Los conjuntos de parámetros son unidades NAL que llevan parámetros de decodificación. Los conjuntos de parámetros son muy importantes para una decodificación correcta. En un escenario de transmisión con pérdida, las matrices de bits durante la transmisión o el paquete pueden perderse o dañarse En este entorno de red, el conjunto de parámetros se puede enviar a través de servicios de alta calidad, como el mecanismo de corrección de errores de envío o el mecanismo de prioridad. La relación entre los conjuntos de parámetros y otros elementos sintácticos se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
7. Cada tipo tiene un tipo de datos. Los más importantes se presentan brevemente:

1. Tipos de datos NAL no VCL:
  1. SPS (Sequence Parameter Set) contiene algunos parámetros comunes, como el perfil y el nivel, como el tamaño del fotograma de vídeo, el número máximo de fotogramas de referencia, etc. Estos parámetros son comunes a toda la secuencia de vídeo o programa.
  2. PPS (conjunto de parámetros de imagen) contiene algunos parámetros generales, como el tipo de codificación de entropía, el número de imágenes de referencia válidas y los parámetros de inicialización. Estos parámetros se pueden aplicar a una secuencia de vídeo o una parte del marco codificado.
  3. SEI (Información complementaria de mejora): esta parte de los parámetros se puede transmitir como datos de flujo de bits H264, y cada información SEI se encapsula en una unidad NAL. SEI puede ser útil para el decodificador, pero no es necesario para el proceso de decodificación básico.
  4. Un conjunto de parámetros está inactivo al principio hasta que se activa. Un PPS se transmite al decodificador de antemano, y cuando está involucrado en un Slice Header, se activará, y hasta que se active un PPS diferente. En el caso de SPS, cuando un PPS lo involucre, se activará. Para una secuencia de video codificada que comienza con la unidad de acceso IDR, un SPS siempre estará activo durante todo el proceso. Por lo tanto, el IDR Slice puede activar eficazmente un SPS.
2. Tipo de datos NAL de VCL
  1. El bloque de información de encabezado incluye el tipo de macrobloque, el parámetro de cuantificación y el vector de movimiento. Esta información es la más importante, porque sin ellos, los símbolos del bloque de datos no se pueden utilizar. Este bloque de datos se denomina bloque de datos de tipo A.
  2. El bloque de datos de información de codificación intratrama se denomina bloque de datos de tipo B. Contiene el tipo de macrobloque de codificación intratrama y los coeficientes de codificación intratrama. Para el segmento correspondiente, la disponibilidad de bloques de datos de tipo B depende de los bloques de datos de tipo A. A diferencia del bloque de datos de información de codificación entre tramas, la información de codificación dentro de la trama puede evitar una mayor desviación, por lo que es más importante que la información de codificación entre tramas.
  3. El bloque de datos de información de codificación entre tramas se denomina bloque de datos de tipo C. Contiene el tipo de macrobloque de codificación entre tramas y el coeficiente de codificación entre tramas. Suele ser la mayor parte de las especies de rodajas. El bloque de datos de información de codificación entre tramas es una parte sin importancia. La información que contiene no proporciona sincronización entre códecs. La disponibilidad de bloques de datos de tipo C también depende de los bloques de datos de tipo A, pero no tiene nada que ver con los bloques de datos de tipo B.
  4. Cada partición de los tres bloques de datos anteriores se almacena por separado en una unidad NAL, por lo que se puede transmitir por separado.

3. La conexión entre la unidad H264 NAL y el segmento y la macro

  1. ¿Por qué hay tantos tipos de datos en la unidad NAL de datos, y qué es este SLICE? ¿Por qué no codificar directamente la carga útil de la secuencia de bytes original, entonces creo que el concepto de algunos segmentos y macros subdivididos por el marco debería explicarse aquí? es más apropiado, y también es posible comprender mejor la posición de estos conceptos al referirse al contexto, y dar una explicación razonable de estas confusiones, por lo que aquí hay una descripción:
    1. 1 fotograma (una imagen) = 1 ~ N cortes (corte) // También se puede decir que 1 o más cortes son un grupo de cortes
    2. 1 rebanada = 1 ~ N macrobloques (macrobloque)
    3. 1 macrobloque = 16 * 16 datos YUV (datos de adquisición de video sin procesar)
  2. Desde la perspectiva del nivel de datos, una imagen original se puede contar como un marco en un sentido amplio. El marco contiene cortes y cortes. Los cortes se componen de cortes y los cortes se componen de macrobloques. Cada macrobloque puede ser 4 4, Escala de 8 8 , 16 * 16 píxeles, la relación entre ellos se muestra en la siguiente figura. Cada segmento es una unidad de codificación independiente.
    Inserte la descripción de la imagen aquí
  3. Desde la perspectiva de acomodar datos, además de acomodar el flujo de código codificado por sectores, la unidad NAL también puede acomodar otros datos. Es por eso que hay datos como SPS, PPS, etc., y estos datos están en proceso de transmitir el flujo de código H264. Juega un papel indispensable, y el papel específico también se menciona anteriormente.
  4. Luego, puede ordenar los siguientes conceptos en tamaño: secuencia> imagen> corte> macro> píxel (por supuesto, también hay conceptos como grupo de corte, bloque submacro, etc., la comprensión inicial no será tan profunda y más tarde estudia despacio)
  5. Al mismo tiempo, hay varios puntos que necesitan ser explicados para facilitar la comprensión de las unidades NAL:
    1. Si no se utiliza el mecanismo FMO (orden flexible de macrobloques), solo hay un grupo de cortes para una imagen;
    2. Si no se utilizan varios sectores, solo hay un sector en un grupo de sectores;
    3. Si no se utiliza el mecanismo DP (división de datos), un segmento es un NALU y un NALU es un segmento.
      De lo contrario, la composición de un segmento debe estar compuesta por tres NALU, que son los bloques de datos A, B y C mencionados anteriormente.
  6. En este momento, puede comprender la estructura general del flujo de código observando el siguiente diagrama de capas de datos del flujo de código.
    Inserte la descripción de la imagen aquí
  7. Como podemos ver, cada fragmento también contiene dos partes: encabezado y datos. El encabezado del fragmento contiene información como el tipo de fragmento, el tipo de macrobloque en el fragmento, el número de fotogramas fragmentados y la configuración y parámetros de los correspondientes. frame., Y los datos cortados son un macrobloque, aquí es donde estamos buscando el almacenamiento de datos de píxeles; un macrobloque es el portador principal de información de video, porque contiene la información de brillo y croma de cada píxel. El trabajo principal de la decodificación de video es proporcionar una forma eficiente de obtener la matriz de píxeles en el macrobloque del flujo de código. La composición de los datos del macrobloque se muestra en la siguiente figura:
    Inserte la descripción de la imagen aquí
  8. En la figura anterior, puede ver que el macrobloque contiene el tipo de macrobloque, el tipo de predicción, el patrón de bloque codificado, el parámetro de cuantificación, el conjunto de datos de brillo y crominancia de píxeles, etc.
  9. En este punto, deberíamos tener una comprensión general de la estructura de datos de flujo H.264.
Puntos a tener en cuenta:
  1. El estándar H.264 / AVC tiene requisitos estrictos sobre el orden de las unidades NAL enviadas al decodificador. Si el orden de las unidades NAL es caótico, deben reorganizarse de acuerdo con la especificación y enviarse al decodificador, de lo contrario, el decodificador no puede decodificar correctamente.
  2. La unidad NAL del conjunto de parámetros de secuencia debe transmitirse antes de que se transmitan todas las demás unidades NAL referenciadas por este conjunto de parámetros, pero se permiten unidades NAL del conjunto de parámetros de secuencia repetida entre estas unidades NAL. La explicación detallada de la llamada repetición es: la unidad NAL del conjunto de parámetros de secuencia tiene su propia identificación especial. Si las dos unidades NAL del conjunto de parámetros de secuencia tienen la misma identificación, se puede considerar que esta última es solo una copia de la anterior. uno, en lugar de un nuevo conjunto de parámetros de secuencia.
  3. La unidad NAL del conjunto de parámetros de imagen debe transmitirse antes que todas las demás unidades NAL con este conjunto de parámetros como referencia, pero las unidades NAL del conjunto de parámetros de imagen repetidas están permitidas entre estas unidades NAL, que es igual que la unidad NAL del conjunto de parámetros de secuencia mencionado anteriormente .

7. Análisis de transmisión de video H.264

Introducción al procesamiento de datos de video y audio: análisis de flujo de video H.264 El flujo
original de H.264 (también conocido como "flujo desnudo") está compuesto por una NALU. Su estructura se muestra en la figura siguiente.
Inserte la descripción de la imagen aquí

Entre ellos, cada NALU está separado por código de inicio (código de inicio), que se divide en dos tipos: 0x000001 (3Byte) o 0x00000001 (4Byte). Si el segmento correspondiente a NALU es el comienzo de un marco, use 0x00000001; de lo contrario, use 0x000001.
El paso de análisis del flujo de código H.264 es buscar primero 0x000001 y 0x00000001 del flujo de código para separar NALU; luego analizar cada campo de NALU. El procedimiento de este artículo comprende los dos pasos anteriores.


Blog de referencia: Introducción a la comprensión del procesamiento de datos de audio y video de codificación H264
: análisis de transmisión de video H.264

Supongo que te gusta

Origin blog.csdn.net/weixin_41910694/article/details/107661624
Recomendado
Clasificación