Rtp/Rtcp协议头的定义

来源:互联网 发布:mybatis sql if 且 编辑:程序博客网 时间:2024/05/06 05:36

#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
原创粉丝点击