织梦CMS - 轻松建站从此开始!

罗索

RTP/RTCP(实时传输协议/实时传输控制协议)自定义的相关C结构(

jackyhwei 发布于 2011-11-22 09:18 点击:次 
我去年做远程视频监控系统时,曾用基于2个协议,用Wonsock工具封装了一个网络传输动态连接库,专门用于局域网组播传输实时视频数据。以下是我针对此2个协议定义的相关C结构。
TAG:

wgscd转摘的
RTP/RTCP(实时传输协议/实时传输控制协议)基于UDP派生出的协议,并增加了对实时传输的控制。一般用于网上传 输实时视频数据,比如远程视频监控,视频点播等。有一本名叫《多媒体网络传输协议》的书上对此2个协议的结构和原理做了比较详细的介绍,好象是清华大学出 版社出版的。
我去年做远程视频监控系统时,曾用基于2个协议,用Wonsock工具封装了一个网络传输动态连接库,专门用于局域网组播传输实时视频数据。以下是我针对此2个协议定义的相关C结构。

  1. /*Current protocol version. */ 
  2. #define RTP_VERSION    2 
  3. #define MIN_SEQUENTIAL  1 
  4. #define RTP_SEQ_MOD (1<<16) 
  5. #define RTP_MAX_SDES 255      /* maximum text length for SDES */ 
  6. #define MID_BUFFER_NUM   2 
  7. #define MAX_DROPOUT   25 
  8.  
  9. typedef enum { 
  10.     RTCP_SR   = 200, 
  11.     RTCP_RR   = 201, 
  12.     RTCP_SDES = 202, 
  13.     RTCP_BYE  = 203, 
  14.     RTCP_APP  = 204 
  15. } rtcp_type_t; 
  16.  
  17. typedef enum { 
  18.    RTCP_SDES_END   = 0, 
  19.    RTCP_SDES_CNAME = 1, 
  20.    RTCP_SDES_NAME  = 2, 
  21.    RTCP_SDES_EMAIL = 3, 
  22.    RTCP_SDES_PHONE = 4, 
  23.    RTCP_SDES_LOC   = 5, 
  24.    RTCP_SDES_TOOL  = 6, 
  25.    RTCP_SDES_NOTE  = 7, 
  26.    RTCP_SDES_PRIV  = 8 
  27. } rtcp_sdes_type_t; 
  28.  
  29. /* 
  30.  * RTP data header 
  31.  */ 
  32. typedef struct { 
  33.    unsigned int version:2;   /* protocol version */ 
  34.    unsigned int p:1;         /* padding flag */ 
  35.    unsigned int x:1;         /* header extension flag */ 
  36.    unsigned int cc:4;        /* CSRC count */ 
  37.    unsigned int m:1;         /* marker bit */ 
  38.    unsigned int pt:7;        /* payload type */ 
  39.    u_int16 seq;              /* sequence number */ 
  40.    u_int32 ts;               /* timestamp */ 
  41.    u_int32 ssrc;             /* synchronization source */ 
  42.    u_int32 csrc[1];          /* optional CSRC list */ 
  43. } rtp_hdr_t; 
  44.  
  45. /* 
  46.  * RTCP common header word 
  47.  */ 
  48. typedef struct { 
  49.    unsigned int version:2;   /* protocol version */ 
  50.    unsigned int p:1;         /* padding flag */ 
  51.    unsigned int count:5;     /* varies by packet type */ 
  52.    unsigned int pt:8;        /* RTCP packet type */ 
  53.    u_int16 length;           /* pkt len in words, w/o this word */ 
  54. } rtcp_common_t; 
  55.  
  56. /* 
  57.  * Big-endian mask for version, padding bit and packet type pair 
  58.  */ 
  59. #define RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe) 
  60. #define RTCP_VALID_VALUE ((RTP_VERSION << 14) | RTCP_SR) 
  61.  
  62. /* 
  63.  * Reception report block 
  64.  */ 
  65. typedef struct { 
  66.    u_int32 ssrc;             /* data source being reported */ 
  67.    unsigned int fraction:8;  /* fraction lost since last SR/RR */ 
  68.    int lost:24;              /* cumul. no. pkts lost (signed!) */ 
  69.    u_int32 last_seq;         /* extended last seq. no. received */ 
  70.    u_int32 jitter;           /* interarrival jitter */ 
  71.    u_int32 lsr;              /* last SR packet from this source */ 
  72.    u_int32 dlsr;             /* delay since last SR packet */ 
  73. } rtcp_rr_t; 
  74.  
  75. /* 
  76.  * SDES item 
  77.  */ 
  78. typedef struct { 
  79.    u_int8 type;              /* type of item (rtcp_sdes_type_t) */ 
  80.    u_int8 length;            /* length of item (in octets) */ 
  81.    char data[1];             /* text, not null-terminated */ 
  82. } rtcp_sdes_item_t; 
  83.  
  84. /* 
  85.  * One RTCP packet 
  86.  */ 
  87. typedef struct { 
  88.    rtcp_common_t common;     /* common header */ 
  89.    union { 
  90.       /* sender report (SR) */ 
  91.       struct { 
  92.          u_int32 ssrc;     /* sender generating this report */ 
  93.          u_int32 ntp_sec;  /* NTP timestamp */ 
  94.          u_int32 ntp_frac; 
  95.          u_int32 rtp_ts;   /* RTP timestamp */ 
  96.          u_int32 psent;    /* packets sent */ 
  97.          u_int32 osent;    /* octets sent */ 
  98.          rtcp_rr_t rr[1];  /* variable-length list */ 
  99.        } sr; 
  100.  
  101.        /* reception report (RR) */ 
  102.        struct { 
  103.           u_int32 ssrc;     /* receiver generating this report */ 
  104.           rtcp_rr_t rr[1];  /* variable-length list */ 
  105.        } rr; 
  106.  
  107.        /* source description (SDES) */ 
  108.        struct rtcp_sdes { 
  109.           u_int32 src;      /* first SSRC/CSRC */ 
  110.           rtcp_sdes_item_t item[1]; /* list of SDES items */ 
  111.        } sdes; 
  112.  
  113.        /* BYE */ 
  114.        struct { 
  115.           u_int32 src[1];   /* list of sources */ 
  116.                   /* can't express trailing text for reason */ 
  117.        } bye; 
  118.    } r; 
  119. } rtcp_t; 

 

(rageliu)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201111/15345.html]
本文出处:blog.csdn.net/rageliu 作者:rageliu
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容