Janus
Home
Demos
Documentation
Cite us!
Discuss Janus
Meetecho
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
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
{
82
rtcp_header
header
;
83
uint32_t
ssrc
;
84
sender_info
si
;
85
report_block
rb
[1];
86
}
rtcp_sr
;
87
89
typedef
struct
rtcp_rr
90
{
91
rtcp_header
header
;
92
uint32_t
ssrc
;
93
report_block
rb
[1];
94
}
rtcp_rr
;
95
97
typedef
struct
rtcp_sdes_chunk
98
{
99
uint32_t
csrc
;
100
}
rtcp_sdes_chunk
;
101
102
typedef
struct
rtcp_sdes_item
103
{
104
uint8_t
type
;
105
uint8_t
len
;
106
char
content
[1];
107
}
rtcp_sdes_item
;
108
109
typedef
struct
rtcp_sdes
110
{
111
rtcp_header
header
;
112
uint32_t
ssrc
;
113
rtcp_sdes_chunk
chunk
;
114
rtcp_sdes_item
item
;
115
}
rtcp_sdes
;
116
118
typedef
struct
rtcp_bye
119
{
120
rtcp_header
header
;
121
uint32_t
ssrc
[1];
122
}
rtcp_bye_t
;
123
125
typedef
struct
rtcp_app
126
{
127
rtcp_header
header
;
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
{
176
rtcp_header
header
;
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