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 X
es 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 3x4
extensió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 profile
El campo es 0xBEDE, que indica un encabezado de un byte, Extension length
y 1, que indica que la longitud de la extensión del encabezado es 1x4
de 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::AllocateRawExtension
en - El código relacionado con el análisis se encuentra
RtpPacket::ParseBuffer
en
Encabezado de dos bytes
Primero, el campo "definido por perfil" es 0x1000, la longitud es 3, seguido de la 3x4
extensió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 TransportSequenceNumber
por 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> |