wgscd转摘的
RTP/RTCP(实时传输协议/实时传输控制协议)基于UDP派生出的协议,并增加了对实时传输的控制。一般用于网上传 输实时视频数据,比如远程视频监控,视频点播等。有一本名叫《多媒体网络传输协议》的书上对此2个协议的结构和原理做了比较详细的介绍,好象是清华大学出 版社出版的。
我去年做远程视频监控系统时,曾用基于2个协议,用Wonsock工具封装了一个网络传输动态连接库,专门用于局域网组播传输实时视频数据。以下是我针对此2个协议定义的相关C结构。
-
- #define RTP_VERSION 2
- #define MIN_SEQUENTIAL 1
- #define RTP_SEQ_MOD (1<<16)
- #define RTP_MAX_SDES 255 /* maximum text length for SDES */
- #define MID_BUFFER_NUM 2
- #define MAX_DROPOUT 25
-
- typedef enum {
- RTCP_SR = 200,
- RTCP_RR = 201,
- RTCP_SDES = 202,
- RTCP_BYE = 203,
- RTCP_APP = 204
- } rtcp_type_t;
-
- typedef enum {
- RTCP_SDES_END = 0,
- RTCP_SDES_CNAME = 1,
- RTCP_SDES_NAME = 2,
- RTCP_SDES_EMAIL = 3,
- RTCP_SDES_PHONE = 4,
- RTCP_SDES_LOC = 5,
- RTCP_SDES_TOOL = 6,
- RTCP_SDES_NOTE = 7,
- RTCP_SDES_PRIV = 8
- } rtcp_sdes_type_t;
-
-
-
-
- typedef struct {
- unsigned int version:2;
- unsigned int p:1;
- unsigned int x:1;
- unsigned int cc:4;
- unsigned int m:1;
- unsigned int pt:7;
- u_int16 seq;
- u_int32 ts;
- u_int32 ssrc;
- u_int32 csrc[1];
- } rtp_hdr_t;
-
-
-
-
- typedef struct {
- unsigned int version:2;
- unsigned int p:1;
- unsigned int count:5;
- unsigned int pt:8;
- u_int16 length;
- } rtcp_common_t;
-
-
-
-
- #define RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
- #define RTCP_VALID_VALUE ((RTP_VERSION << 14) | RTCP_SR)
-
-
-
-
- typedef struct {
- u_int32 ssrc;
- unsigned int fraction:8;
- int lost:24;
- u_int32 last_seq;
- u_int32 jitter;
- u_int32 lsr;
- u_int32 dlsr;
- } rtcp_rr_t;
-
-
-
-
- typedef struct {
- u_int8 type;
- u_int8 length;
- char data[1];
- } rtcp_sdes_item_t;
-
-
-
-
- typedef struct {
- rtcp_common_t common;
- union {
-
- struct {
- u_int32 ssrc;
- u_int32 ntp_sec;
- u_int32 ntp_frac;
- u_int32 rtp_ts;
- u_int32 psent;
- u_int32 osent;
- rtcp_rr_t rr[1];
- } sr;
-
-
- struct {
- u_int32 ssrc;
- rtcp_rr_t rr[1];
- } rr;
-
-
- struct rtcp_sdes {
- u_int32 src;
- rtcp_sdes_item_t item[1];
- } sdes;
-
-
- struct {
- u_int32 src[1];
-
- } bye;
- } r;
- } rtcp_t;
(rageliu) |