# Capa de abstracción de red

La capa de abstracción de red (en inglés Network Abstraction Layer, NAL) es la parte del estándar de codificación de video H.264/AVC cuyo principal objetivo es facilitar una representación del contenido, adaptada al soporte de almacenamiento o de transmisión. Dicha representación se puede realizar tanto para aplicaciones "conversacionales" (video telefonía) como para aplicaciones "no conversacionales" (almacenamiento, difusión, o streaming). Gracias a la NAL, se ha conseguido una significante mejora en términos de eficiciencia de tasa de transmisión y distorsión, comparado con los estándares existentes.

## Introducción

El constante incremento del número de servicios y la popularidad que está alcanzando la televisión de alta definición, está haciendo necesaria la creación de métodos de codificación de alta eficiencia. Además, otros medios de transmisión como Módem por Cable proporcionan tasas de transmisión mucho menores que los canales de radiodifusión, así que una mayor eficiencia de codificación puede permitir la transmisión de más canales de video o con una mayor calidad, mediante las mismas capacidades de transmisión digitales de las que se dispone. La codificación de video para aplicaciones de telecomunicaciones se ha diversificado desde los servicios RDSI y T1/E1 hasta abarcar la Red Telefónica Conmutada RTC, redes inalámbricas móviles, y LAN/Internet. A través de esta evolución, se han realizado continuos esfuerzos con tal de maximizar la eficiencia de codificación, mientras se ha tratado con una diversificación de tipos de red y sus formatos característicos, y sus requerimientos basados en su robustez ante pérdidas y errores. El estándar H.264/AVC se ha desarrollado para dar soluciones técnicas en diferentes áreas como la difusión (a través de cable, satélite, módems de cable, DSL, terrestre, etc.) almacenamiento interactivo o en serie en dispositivos ópticos y magnéticos, servicios conversacionales, video bajo demanda o streaming multimedia, servicios de mensajería multimedia, etc. Además, se podrán desarrollar nuevas aplicaciones sobre redes tanto existentes como futuras. Esto realza la cuestión de como gestionar tal variedad de aplicaciones y redes. Para realizar el direccionamiento en tal diversidad de redes, aparecen las necesidades de flexibilidad y personalización, las que satisface el estándar H.264/AVC mediante el diseño de la NAL, que da forma a la representación del video según la VCL y proporciona información de cabecera en un modo apropiado para el transporte en una gran variedad de redes o medios de almacenamiento. La NAL está diseñada con el objectivo de proporcionar "un amistad con la red" que permita una adaptación más simple y efectiva en el uso de la VCL para una amplia variedad de sistemas. La NAL facilita la capacidad de mapear los datos de codificación de video en capas de transporte como pueden ser:
* RTP/IP para cualquier tipo de servicio de Internet a tiempo real, cableado o no cableado, conversacional o de streaming.
* Formatos de fichero, p.e. ISO MP4 para almacenamiento y MMS.
* H.32X para servicios conversacionales cableados e inalámbricos.
* Sistemas MPEG-2 para servicios de difusión, etc.
El grado completo de personalización de los contenidos de vídeo para adaptarse a las necesidades de cada aplicación particular se encuentra fuera del ámbito de aplicación de la normalización H.264/AVC, pero el diseño de la NAL prevé una amplia variedad de tales asignaciones. Algunos conceptos clave de la NAL son unidades NAL, secuencia de bytes, paquetes de formatos y usos de las unidades NAL, conjuntos de parámetros y unidades de acceso. Una breve descripción de estos conceptos se da a continuación.

## Unidades NAL

Los datos de video codificado se organizan en unidades NAL, cada una de las cuales es efectivamente un paquete que contiene un número entero de bytes. El primer byte de cada unidad NAL es un byte de cabecera que contiene una indicación del tipo de datos que contiene dicha unidad NAL, y el resto de bytes contienen la carga útil de datos del tipo indicado en la cabecera. La definición de la estructura de la unidad NAL específica un formato genérico para su uso tanto en sistemas orientados a la transmisión de paquetes como sistemas orientados al streaming de bits. Una serie de unidades NAL generadas por un codificador se conoce como un stream de unidades NAL.

## Unidades NAL en formato de Byte-Stream

Algunos sistemas requieren la entrega del flujo de unidades NAL total o parcialmente como un flujo ordenado de bytes o bits donde el principio y fin de cada unidad NAL debe ser identificada a partir de patrones codificados dentro de los propios datos. Para que sean útiles en dichos sistemas, las especificaciones del estándar H.264/AVC definen un formato de flujo de bytes. En el formato que define el flujo de datos, cada unidad NAL es precedida por un patrón especificado de tres bytes llamado un prefijo de inicio de código. Los límites de cada unidad NAL pueden así ser identificados buscando los datos codificados del inequívoco prefijo de inicio de código. El uso de bytes de prevención de emulación garantiza que los prefijos de inicio de código son los únicos posibles identificadores del inicio de una nueva unidad NAL. Un pequeño conjunto de datos adicionales (un byte por imagen de video) es también añadido para permitir recuperar el sincronismo necesario de los datos del flujo, a los decodificadores que operan en sistemas que proporcionan streams de bits sin sincronismo de los límites de byte. También se pueden insertar datos adicionales en el formato del flujo de bytes que permitan una expansión del conjunto de datos a ser enviados y puedan ayudar a conseguir una recuperación más rápida del sincronismo, si se desea.

## Unidades NAL en formato de sistemas de Transporte de Paquetes

En otros sistemas (p.e. sistemas IP/RTP), los datos codificados se transportan en paquetes formados según el protocolo de transporte del sistema, y la identificación de los límites de las unidades NAL dentro de los paquetes se puede establecer sin usar patrones de prefijo de inicio de código. En dichos sistemas, la inclusión de prefijos de inicio de código resultaría un gasto de la capacidad de transmisión de datos. Así que en este caso, las unidades NAL pueden ser transportadas en paquetes de datos sin prefijos de inicio de código.

## Unidades NAL VCL y no VCL

Las unidades NAL se clasifican en unidades VCL y no VCL. Las unidades NAL VCL contienen datos que representan los valores de las muestras de las imágenes de video, y las unidades NAL no VCL contienen cualquier información adicional asociada como conjuntos de parámetros (datos de cabecera importantes referentes un conjunto de unidades NAL VCL) e información de refuerzo suplementaria (información de temporización y otros datos suplementarios que pueden mejorar la usabilidad de la señal de video decodificada pero no son necesarios para la decodificación de los valores de las muestras de las imágenes de video).

## Conjuntos de parámetros

Un conjunto de parámetros se supone que contiene información que se espera que raramente cambie y asiste la decodificación de un conjunto grande de unidades NAL VCL. Hay dos tipos de conjuntos de parámetros:
* Conjuntos de parámetros de secuencia, que aplican a series de imágenes de video consecutivas codificadas, llamadas secuencias de video codificado.
* Conjuntos de parámetros de imágenes, que aplican a la decodificación de una o más imágenes individuales dentro de una secuencia de video codificado.
El mecanismo de conjuntos de parámetros de secuencia y de imagen disasocia la transmisión de información que cambia infrecuentemente de la transmisión de los valores de las muestras de las imágenes de video. Cada unidad NAL VCL contiene un identificador que se refiere al contenido del conjunto de parámetros de imagen relevante, y cada conjunto de parámetros de imagen contiene un identificador que se refiere al contenido del conjunto de parámetros de secuencia relevante. De esta manera, un pequeño conjunto de datos (el identificador) puede ser usado para referirse a un conjunto mucho más grande de información (el conjunto de parámetros) sin repetir la información de cada unidad NAL VCL. Los conjuntos de parámetros de secuencia e imagen pueden ser enviados bien por delante de la unidad NAL VCL a la que se refiere, como puede ser repetida para proporcionar más robustez ante la pérdida de datos. En algunas aplicaciones, los conjuntos de parámetros pueden ser enviados en el canal que transporta las unidades NAL VCL (transmisión en banda). En otras aplicaciones, puede ser beneficioso transmitir los conjuntos de parámetros fuera de banda usando un mecanismo de transporte más apropiado que el propio canal de video.

## Unidades de acceso

Una Unidad de Acceso es un conjunto de unidades NAL en una forma especificada. La decodificación de cada Unidad de Acceso resulta en una imagen decodificada. Cada unidad de acceso contiene un conjunto de unidades NAL VCL que juntas componen una imagen codificada primaria. Ésta también puede estar precedida por un delimitador de Unidades de Acceso para ayudar a localizar el principio de la Unidad de Acceso. Alguna información suplementaria que contenga datos como información de temporización también puede preceder la imagen primaria codificada. La imagen primaria codificada está formada por un conjunto de unidades NAL VCL que consisten en slices o particiones de slices que representan las muestras de la imagen de video. Después de la imagen primaria codificada puede haber alguna unidad NAL VCL adicional que contenga representaciones redundantes de áreas de la misma imagen de video. Estas se llaman imágenes codificadas redundantes, y están disponibles para ser usadas por un decodificador para recuperar pérdidas o corrupción de datos de las imágenes codificadas primarias. Los decodificadores no necesariamente deben decodificar las imágenes redundantes codificadas, si las hay. Finalmente, si la imagen codificada es la última imagen de una secuencia de video codificada (una secuencia de imágenes que se puede decodificar independientemente y utiliza únicamente un conjunto de parámetros), y la unidad NAL de final de secuencia puede estar presente para indicar el final de la secuencia; y si la imagen codificada es la última imagen codificada de todo el flujo de unidades NAL, se envía una unidad NAL de fin de flujo para indicar que el flujo ha llegado a su fin.

## Secuencias de Video Codificada

Una Secuencia de Video Codificada consiste en una serie de Unidades de Acceso secuenciales en un flujo de unidades NAL y que utilitzan únicamente un conjunto de parámetros, Cada Secuencia de Video Codificada puede ser descodificada independientemente de cualquier otra Secuencia de Video Codificada, dada la información del conjunto de parámetros necesaria, que puede ser transmitida tanto en banda como fuera de banda. Al principio de la Secuendia de Video Codificada hay una Unidad de Acceso de Refresco de Decodificación Instantánea (IDR). Una Unidad de Acceso IDR contiene una imagen intra (una imagen codificada que puede ser decodificada sin decodificar ninguna otra imagen previa de un flujo de unidades NAL, y la presencia de una Unidad de Acceso IDR indica que no se requerirá ninguna imagen anterior a la imagen Intra que contiene para decodificar otra posterior). Una unidad NAL de flujo puede contener una o más Secuencias de Video Codificadas.