1. 程式人生 > >Rtp/Rtcp協議頭的定義

Rtp/Rtcp協議頭的定義


#ifndef _H_RTPHEADER
#define _H_RTPHEADER

/*++
V ― 版本。識別 RTP 版本。
P ― 間隙(Padding)。設定時,資料包包含一個或多個附加間隙位組,其中這部分不屬於有效載荷。
X ― 擴充套件位。設定時,在固定頭後面,根據指定格式設定一個擴充套件頭。
CSRC Count ― 包含 CSRC 識別符號(在固定頭後)的編號。
M ― 標記。標記由 Profile 檔案定義。允許重要事件如幀邊界在資料包流中進行標記。
Payload Type ― 識別 RTP 有效載荷的格式,並通過應用程式決定其解釋。Profile 檔案規定了從 Payload 編碼到 Payload 格式的預設靜態對映。另外的 Payload Type 編碼可能通過非 RTP 方法實現動態定義。
Sequence Number ― 每傳送一個 RTP 資料包,序列號增加1。接收方可以依次檢測資料包的丟失並恢復資料包序列。
Timestamp ― 反映 RTP 資料包中的第一個八位組的取樣時間。取樣時間必須通過時鐘及時提供線性無變化增量獲取,以支援同步和抖動計算。
SSRC ― 同步源。該識別符號隨機選擇,旨在確保在同一個 RTP 會話中不存在兩個同步源具有相同的 SSRC 識別符號。
CSRC ― 貢獻源識別符號。識別該資料包中的有效載荷的貢獻源。
--*/
typedef struct _RTP_HEAD
{
    unsigned char    Version        : 2;
    unsigned char    Padding        : 1;
    unsigned char    Extension    : 1;
    unsigned char    Ccount        : 4;
    unsigned char    Marker        : 1;
    unsigned char    Ptype        : 7;
    WORD            Snumber;        //16bits
    DWORD            Timestamp;        //32
    DWORD            Ssrc;            //32
    DWORD            Csrc;            //32
}RTP_HEAD,*pRTP_HEAD;

/*++
Version ― 識別 RTP 版本。 RTP 資料包中的該值與 RTCP 資料包中的一樣。 當前規範定義的版本值為 2 。
P ― 間隙(Padding)。設定時, RTCP 資料包包含一些其它 padding 八位位組,它們不屬於控制資訊。 Padding 的最後八位是用於計算應該忽略多少間隙八位位組。一些加密演算法中需要計算固定塊大小時也可能需要使用 Padding 欄位。在一個複合 RTCP 資料包中,只有最後的個別資料包中才需要使用 padding ,這是因為複合資料包是作為一個整體來加密的。
RC ― 接收方報告計數。包含在該資料包中的接收方報告塊的數量,有效值為 0 。
Packet type ― 包括常量 200 ,識別這是一個 RTCP SR 資料包。
Length ― RTCP 資料包的大小(32 位字減去 1),包含頭和任意間隙 (偏移量的引入使得 0 成為有效值,並避免了掃描複合 RTCP 資料包過程中的無限迴圈現象,而採用 32 位字計數方法則避免了對 4 的倍數的有效性校驗)。
--*/
typedef struct _RTCP_HEAD
{
    unsigned char    Version        : 2;
    unsigned char    Padding        : 1;
    unsigned char    PCount        : 5;
    unsigned char    Ptype;            //8bits
    WORD            Length;            //16bits
}RTCP_HEAD,*pRTCP_HEAD;

#endif