RTP ヘッダー拡張

RTP ヘッダー

RTP プロトコルでは、RTP ヘッダー (ヘッダー) には、固定ヘッダー(Fixed Header) とヘッダー拡張(ヘッダー拡張、オプション) が含まれます。

RTP 固定ヘッダーの構造は次のとおりです。最初の 12 バイトが各 RTP パケットに含まれている必要があります。


RTP ヘッダー拡張

RTP 固定ヘッダーのフィールドXが 1 の場合、RTP ヘッダー拡張が後に続くことを意味します。RTP ヘッダー拡張構造は次のとおりです。

  • プロファイルで定義: 使用するヘッダー拡張を決定: 1 バイトまたは2 バイトのヘッダー
  • length : ヘッダー拡張の長さを示します: 長さ x 4 バイト

 

1 バイト ヘッダー

1 バイト ヘッダーの場合、「プロファイルで定義」フィールドは 0xBEDE に固定されます。次に、次の構造は次のとおりです。

  • ID : ローカル識別子を表す4ビット長のID
  • len : 拡張データの長さを示します, 範囲: 0~15, 0 は長さが 1 バイトであることを意味します, 15 は 16 バイトを意味します

 

3x4最初は 0xBEDE 固定フィールドの先頭で、長さは 3 で、その後にバイト長のヘッダー拡張が続くことを示します。最初のヘッダー拡張子: はL=0、データ長が 1 バイトであることを意味します。2 番目のヘッダー拡張子: はL=1、データ長が 2 バイトであることを意味します。4 バイトでアラインされているため、値が 0 のパディング データが続きます。最後のヘッダー拡張子: はL=3、データ長が 4 バイトであることを示します。 Defined by profileフィールドは、1 バイト ヘッダーを示す 0xBEDE、Extension lengthおよびヘッダー拡張の長さが1x4バイトであることを示す 1 です。ヘッダー拡張の場合: ID は 3、長さは 2 です。

  • 建設関連のコードは次RtpPacket::AllocateRawExtensionの場所にあります。
  • 解析関連のコードは次の場所RtpPacket::ParseBufferにあります。

2 バイトのヘッダー 

最初に、「プロファイルによって定義された」フィールドは 0x1000 で、長さは 3 で、その後に3x4バイト長拡張が続きます。最初のヘッダー拡張の場合: 、データ長は 0、2 番目のヘッダーL=0拡張の場合: L=13 番目のヘッダー拡張子のデータをパディングします: L=4、その後に 4 バイト長のデータが続きます。

WebRTCのデフォルトはOne-Byte Headerであるため、パケットのキャプチャと解析は実行されません.特定の構造と解析コードは、One-Byte Headerと同じ場所にあります.

一般的な RTP ヘッダー拡張

多くの RTP ヘッダー拡張が WebRTC で定義されています。最も一般的なものは、帯域幅推定のための Transport-CC 拡張であり、トランスポート層のシリアル番号を記録します: 、各 RTP パケットにはデフォルトでこの拡張がありますTransportSequenceNumber

もちろん、音量を記録する AudioLevel 拡張、送信時間を記録する AbsoluteSendTime 拡張などがあります。

 

enum RTPExtensionType : int {

  kRtpExtensionNone、

  kRtpExtensionTransmissionTimeOffset、

  kRtpExtensionAudioLevel、

  kRtpExtensionInbandComfortNoise、

  kRtpExtensionAbsoluteSendTime、

  kRtpExtensionAbsoluteCaptureTime、

  kRtpExtensionVideoRotation、

  kRtpExtensionTransportSequenceNumber、

  kRtpExtensionTransportSequenceNumber02、

  kRtpExtensionPlayoutDelay、

  kRtpExtensionVideoContentType、

  kRtpExtensionVideoLayersAllocation、

  kRtpExtensionVideoTiming、

  kRtpExtensionRtpStreamId、

  kRtpExtensionRepairedRtpStreamId,

  kRtpExtensionMid、

  kRtpExtensionGenericFrameDescriptor00、

  kRtpExtensionGenericFrameDescriptor = kRtpExtensionGenericFrameDescriptor00,

  kRtpExtensionGenericFrameDescriptor02、

  kRtpExtensionColorSpace、

  kRtpExtensionVideoFrameTrackingId、

  kRtpExtensionNumberOfExtensions

};

RFC で定義されている RTP ヘッダー拡張の場合、SDP 形式は次のとおりです。

1

a=extmap:<値> urn:ietf:params:rtp-hdrext:<拡張属性>

WebRTC のカスタム RTP ヘッダー拡張の場合、SDP 形式は次のとおりです。

1

a=extmap:<値> <URI>

 

おすすめ

転載: blog.csdn.net/Doubao93/article/details/122032526
RTP
RTP
RTP
RTP