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=1
3 番目のヘッダー拡張子のデータをパディングします: 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> |