Extensión de encabezado RTP

Encabezado RTP

En el protocolo RTP, el RTP Header (cabecera) incluye una cabecera fija (Fixed Header) y una extensión de cabecera (Header extension, opcional).

La estructura del encabezado fijo RTP es la siguiente, donde los primeros 12 bytes deben incluirse en cada paquete RTP.


Extensión de encabezado RTP

Si el campo en RTP Fixed Header Xes 1, significa que va seguido de RTP Header Extension. La estructura de extensión de encabezado RTP es la siguiente:

  • definido por perfil : decida qué extensión de encabezado usar: encabezado de un byte o de dos bytes
  • length : Indica la longitud del Header Extension: longitud x 4 bytes

 

Encabezado de un byte

Para el encabezado de un byte, el campo "definido por perfil" se fija en 0xBEDE. Entonces la siguiente estructura es la siguiente:

  • ID : ID de 4 bits de longitud representa un identificador local
  • len : indica la longitud de los datos de extensión, rango: 0~15, 0 significa que la longitud es de 1 byte, 15 significa 16 bytes

 

El primero es el comienzo del campo fijo 0xBEDE, y luego la longitud es 3, lo que indica que le sigue la 3x4extensión del encabezado de la longitud del byte. Para la primera extensión de encabezado: L=0, significa que la longitud de los datos es de 1 byte. Para la extensión del segundo encabezado: L=1, significa que la longitud de los datos es de 2 bytes. Dado que está alineado por 4 bytes, sigue el relleno de datos con un valor de 0. La última extensión del encabezado: L=3, indica que la longitud de los datos es de 4 bytes.  Defined by profileEl campo es 0xBEDE, que indica un encabezado de un byte, Extension lengthy 1, que indica que la longitud de la extensión del encabezado es 1x4de bytes. Para la extensión del encabezado: el ID es 3, la longitud es 2.

  • El código relacionado con la construcción se encuentra RtpPacket::AllocateRawExtensionen
  • El código relacionado con el análisis se encuentra RtpPacket::ParseBufferen

Encabezado de dos bytes 

Primero, el campo "definido por perfil" es 0x1000, la longitud es 3, seguido de la 3x4extensión de longitud de bytes, para la primera extensión de encabezado: L=0, la longitud de datos es 0, para la segunda extensión de encabezado: L=1, la longitud de datos es 1, seguido rellenando Datos, para la extensión del tercer encabezado: L=4, seguido de datos de longitud de 4 bytes.

Dado que el valor predeterminado es el encabezado de un byte en WebRTC, la captura y el análisis de paquetes no se realizarán. La estructura específica y el código de análisis se encuentran en el mismo lugar que el encabezado de un byte.

Extensión de encabezado RTP común

Muchas RTP Header Extensions están definidas en WebRTC, la más común es la extensión Transport-CC para estimación de ancho de banda, que registra un número de serie de la capa de transporte: , y cada paquete RTP tiene esta extensión TransportSequenceNumberpor defecto.

Por supuesto, existen extensiones AudioLevel que registran el volumen, extensiones AbsoluteSendTime que registran el tiempo de envío, etc.

 

enum RTPExtensionType: int {

  kRtpExtensionNinguno,

  kRtpExtensionTransmissionTimeOffset,

  kRtpExtensionAudioLevel,

  kRtpExtensionInbandComfortRuido,

  kRtpExtensionAbsoluteSendTime,

  kRtpExtensionAbsoluteCaptureTime,

  kRtpExtensionVideoRotation,

  kRtpExtensionTransportSequenceNumber,

  kRtpExtensionTransportSequenceNumber02,

  kRtpExtensionPlayoutDelay,

  kRtpExtensionVideoContentType,

  kRtpExtensionVideoLayersAsignación,

  kRtpExtensionVideoTiempo,

  kRtpExtensionRtpStreamId,

  kRtpExtensionRepairedRtpStreamId,

  kRtpExtensionMid,

  kRtpExtensionGenericFrameDescriptor00,

  kRtpExtensionGenericFrameDescriptor = kRtpExtensionGenericFrameDescriptor00,

  kRtpExtensionGenericFrameDescriptor02,

  kRtpExtensionColorSpace,

  kRtpExtensionVideoFrameTrackingId,

  kRtpExtensionNumberOfExtensions

};

Para la extensión de encabezado RTP definida en RFC, el formato SDP es el siguiente:

1

a=extmap:<valor> urn:ietf:params:rtp-hdrext:<atributos de extensión>

Para la extensión de encabezado RTP personalizada en WebRTC, el formato SDP es el siguiente:

1

a=extmap:<valor> <URI>

 

Supongo que te gusta

Origin blog.csdn.net/Doubao93/article/details/122032526
Recomendado
Clasificación