webrtc版本m79
// 0 1 2 3
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// |V=2|P|X| CC |M| PT | sequence number |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | timestamp |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | synchronization source (SSRC) identifier |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | Contributing source (CSRC) identifiers |
// | .... |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | header eXtension profile id | length in 32bits |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Extensions |
// | .... |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | Payload |
// | .... : padding... |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | padding | Padding size |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
struct rtpHeader
{
uint8_t version : 2;
uint8_t padding : 1;
uint8_t extension : 1;
uint8_t csrcCount : 4;
uint8_t marker : 1;
uint8_t payloadType : 7;
uint16_t sequenceNumber;
uint32_t timestamp;
uint32_t ssrc;
/* 變長熟丸,根據(jù)csrcCount決定csrc個數(shù) */
uint32_t csrc[csrcCount];
};
-
version: 版本號2。
-
padding: 置為1表示RTP數(shù)據(jù)有填充鸥印。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)逃片,包含這個字節(jié)本身
-
extension: 擴展標(biāo)志绪妹,置為1則在RTP有RTP header extension
-
csrcCount: csrc的個數(shù)
-
marker: 標(biāo)記。對于視頻乡洼,標(biāo)記一幀的結(jié)束智袭;對于音頻变抽,標(biāo)記會話的開始础拨。
-
payloadType: payload type,在sdp中描述
-
sequenceNumber: 序列號的初始值是隨機的绍载,同時音頻包和視頻包的sequence是分別記數(shù)的诡宗,每次遞增1』骼埽可以用來檢查丟包塔沃;網(wǎng)絡(luò)抖動用來排序。
-
timestamp: 時間戳阳谍,同一幀的時間戳是一樣的
-
ssrc: 與sdp中的ssrc一致
-
csrc: 用音頻來說:ssrc1蛀柴、ssrc2、ssrc3經(jīng)過混音后矫夯,ssrc填充的是混音器的ssrc鸽疾,而csrc填充的分別是ssrc1、ssrc2训貌、ssrc3
RTP header extension rfc3550
/* RTP header extension, RFC 3550.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| defined by profile | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| header extension |
| .... |
*/
struct HeaderExtension
{
uint16_t id;
uint16_t length; // Size of value in multiples of 4 bytes.
};
/* Struct for One-Byte extension. */
struct OneByteExtension
{
uint8_t id : 4;
uint8_t len : 4;
uint8_t value[len];
};
/* Struct for Two-Bytes extension. */
struct TwoBytesExtension
{
uint8_t id : 8;
uint8_t len : 8;
uint8_t value[len];
};
-
HeaderExtension.id: profile id制肮。當(dāng)
HeaderExtension.id==0xBEDE
擴展頭長度為1個字節(jié),即結(jié)構(gòu)體類型為OneByteExtension递沪;否則(HeaderExtension.id & 0xfff0)==0x1000
擴展頭長度為2個字節(jié)豺鼻,即結(jié)構(gòu)體類型為TwoBytesExtension。
-
HeaderExtension.length:
HeaderExtension.length*4
擴展頭長度区拳,不包含HeaderExtension.id和HeaderExtension.length
-
OneByteExtension.id: 消息id拘领,在sdp中描述
-
OneByteExtension.len: OneByteExtension.value的長度
- OneByteExtension.value:
-
TwoBytesExtension: 同OneByteExtension意思一致
/*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OSN | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| Original RTP Packet Payload |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
-
payloadType: payload type意乓,在sdp中描述
-
sequenceNumber: 每次遞增1樱调。可以用來檢查丟包届良;網(wǎng)絡(luò)抖動用來排序笆凌。
-
ssrc: 與sdp中的ssrc一致
-
OSN: original sequence number,原始序列號
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者