Fork me on GitHub
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rtcp.h
Go to the documentation of this file.
1 
16 #ifndef _JANUS_RTCP_H
17 #define _JANUS_RTCP_H
18 
19 #include <arpa/inet.h>
20 #ifdef __MACH__
21 #include <machine/endian.h>
22 #else
23 #include <endian.h>
24 #endif
25 #include <inttypes.h>
26 #include <string.h>
27 
29 typedef enum {
30  RTCP_FIR = 192,
31  RTCP_SR = 200,
32  RTCP_RR = 201,
33  RTCP_SDES = 202,
34  RTCP_BYE = 203,
35  RTCP_APP = 204,
36  RTCP_RTPFB = 205,
37  RTCP_PSFB = 206,
38 } rtcp_type;
39 
40 
42 typedef struct rtcp_header
43 {
44 #if __BYTE_ORDER == __BIG_ENDIAN
45  uint16_t version:2;
46  uint16_t padding:1;
47  uint16_t rc:5;
48  uint16_t type:8;
49 #elif __BYTE_ORDER == __LITTLE_ENDIAN
50  uint16_t rc:5;
51  uint16_t padding:1;
52  uint16_t version:2;
53  uint16_t type:8;
54 #endif
55  uint16_t length:16;
56 } rtcp_header;
57 
59 typedef struct sender_info
60 {
61  uint32_t ntp_ts_msw;
62  uint32_t ntp_ts_lsw;
63  uint32_t rtp_ts;
64  uint32_t s_packets;
65  uint32_t s_octets;
66 } sender_info;
67 
69 typedef struct report_block
70 {
71  uint32_t ssrc;
72  uint32_t flcnpl;
73  uint32_t ehsnr;
74  uint32_t jitter;
75  uint32_t lsr;
76  uint32_t delay;
77 } report_block;
78 
80 typedef struct rtcp_sr
81 {
83  uint32_t ssrc;
86 } rtcp_sr;
87 
89 typedef struct rtcp_rr
90 {
92  uint32_t ssrc;
94 } rtcp_rr;
95 
97 typedef struct rtcp_sdes_chunk
98 {
99  uint32_t csrc;
101 
102 typedef struct rtcp_sdes_item
103 {
104  uint8_t type;
105  uint8_t len;
106  char content[1];
108 
109 typedef struct rtcp_sdes
110 {
112  uint32_t ssrc;
115 } rtcp_sdes;
116 
118 typedef struct rtcp_bye
119 {
121  uint32_t ssrc[1];
122 } rtcp_bye_t;
123 
125 typedef struct rtcp_app
126 {
128  uint32_t ssrc;
129  char name[4];
130 } rtcp_app_t;
131 
133 typedef struct rtcp_nack
134 {
136  uint16_t pid;
138  uint16_t blp;
139 } rtcp_nack;
140 
142 typedef struct janus_nack {
144  uint16_t seq_no;
146  struct janus_nack *next;
147 } janus_nack;
148 
149 
151 typedef struct rtcp_remb
152 {
154  char id[4];
156  uint32_t bitrate;
158  uint32_t ssrc[1];
159 } rtcp_remb;
160 
161 
163 typedef struct rtcp_fir
164 {
166  uint32_t ssrc;
168  uint32_t seqnr;
169 } rtcp_fir;
170 
171 
173 typedef struct rtcp_fb
174 {
178  uint32_t ssrc;
180  uint32_t media;
182  char fci[1];
183 } rtcp_fb;
184 
185 
190 guint32 janus_rtcp_get_sender_ssrc(char *packet, int len);
195 guint32 janus_rtcp_get_receiver_ssrc(char *packet, int len);
196 
201 int janus_rtcp_parse(char *packet, int len);
202 
210 int janus_rtcp_fix_ssrc(char *packet, int len, int fixssrc, uint32_t newssrcl, uint32_t newssrcr);
211 
216 gboolean janus_rtcp_has_fir(char *packet, int len);
217 
222 gboolean janus_rtcp_has_pli(char *packet, int len);
223 
228 GSList *janus_rtcp_get_nacks(char *packet, int len);
229 
238 int janus_rtcp_remove_nacks(char *packet, int len);
239 
244 uint64_t janus_rtcp_get_remb(char *packet, int len);
245 
251 int janus_rtcp_cap_remb(char *packet, int len, uint64_t bitrate);
252 
259 int janus_rtcp_sdes(char *packet, int len, const char *cname, int cnamelen);
260 
266 int janus_rtcp_remb(char *packet, int len, uint64_t bitrate);
267 
273 int janus_rtcp_fir(char *packet, int len, int *seqnr);
274 
281 int janus_rtcp_fir_legacy(char *packet, int len, int *seqnr);
282 
287 int janus_rtcp_pli(char *packet, int len);
288 
294 int janus_rtcp_nacks(char *packet, int len, GSList *nacks);
295 
296 #endif