UniMRCP  1.7.0
mpf_rtp_descriptor.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2015 Arsen Chaloyan
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MPF_RTP_DESCRIPTOR_H
18 #define MPF_RTP_DESCRIPTOR_H
19 
20 /**
21  * @file mpf_rtp_descriptor.h
22  * @brief MPF RTP Stream Descriptor
23  */
24 
25 #include <apr_network_io.h>
26 #include "apt_string.h"
27 #include "mpf_stream_descriptor.h"
28 
30 
31 /** RTP media descriptor declaration */
33 /** RTP stream descriptor declaration */
35 /** RTP termination descriptor declaration */
37 /** RTP configuration declaration */
39 /** RTP settings declaration */
41 /** Jitter buffer configuration declaration */
43 
44 /** MPF media state */
45 typedef enum {
46  MPF_MEDIA_DISABLED, /**< disabled media */
47  MPF_MEDIA_ENABLED /**< enabled media */
49 
50 /** RTP media (local/remote) descriptor */
52  /** Media state (disabled/enabled)*/
54  /** IP address */
56  /** External (NAT) IP address */
58  /** Port */
59  apr_port_t port;
60  /** Stream mode (send/receive) */
62  /** Packetization time */
63  apr_uint16_t ptime;
64  /** Codec list */
66  /** Media identifier */
67  apr_size_t mid;
68  /** Position, order in SDP message (0,1,...) */
69  apr_size_t id;
70 };
71 
72 /** RTP stream descriptor */
74  /** Stream capabilities */
76  /** Local media descriptor */
78  /** Remote media descriptor */
80  /** Settings loaded from config */
82 };
83 
84 /** RTP termination descriptor */
86  /** Audio stream descriptor */
88  /** Video stream descriptor */
90 };
91 
92 /** Jitter buffer configuration */
94  /** Min playout delay in msec */
95  apr_uint32_t min_playout_delay;
96  /** Initial playout delay in msec */
97  apr_uint32_t initial_playout_delay;
98  /** Max playout delay in msec */
99  apr_uint32_t max_playout_delay;
100  /** Mode of operation of the jitter buffer: static - 0, adaptive - 1 */
101  apr_byte_t adaptive;
102  /** Enable/disable time skew detection */
104 };
105 
106 /** RTCP BYE transmission policy */
107 typedef enum {
108  RTCP_BYE_DISABLE, /**< disable RTCP BYE transmission */
109  RTCP_BYE_PER_SESSION, /**< transmit RTCP BYE at the end of session */
110  RTCP_BYE_PER_TALKSPURT /**< transmit RTCP BYE at the end of each talkspurt (input) */
112 
113 /** RTP factory config */
115  /** Local IP address to bind to */
117  /** External (NAT) IP address */
119  /** Min RTP port */
120  apr_port_t rtp_port_min;
121  /** Max RTP port */
122  apr_port_t rtp_port_max;
123  /** Current RTP port */
124  apr_port_t rtp_port_cur;
125 };
126 
127 /** RTP settings */
129  /** Packetization time */
130  apr_uint16_t ptime;
131  /** Codec list */
133  /** Preference in offer/anwser: 1 - own(local) preference, 0 - remote preference */
135  /** Enable/disable RTCP support */
137  /** RTCP BYE policy */
139  /** RTCP report transmission interval */
140  apr_uint16_t rtcp_tx_interval;
141  /** RTCP rx resolution (timeout to check for a new RTCP message) */
142  apr_uint16_t rtcp_rx_resolution;
143  /** Jitter buffer config */
145 };
146 
147 /** Initialize RTP media descriptor */
148 static APR_INLINE void mpf_rtp_media_descriptor_init(mpf_rtp_media_descriptor_t *media)
149 {
150  media->state = MPF_MEDIA_DISABLED;
151  apt_string_reset(&media->ip);
152  apt_string_reset(&media->ext_ip);
153  media->port = 0;
155  media->ptime = 0;
156  mpf_codec_list_reset(&media->codec_list);
157  media->mid = 0;
158  media->id = 0;
159 }
160 
161 /** Initialize RTP stream descriptor */
162 static APR_INLINE void mpf_rtp_stream_descriptor_init(mpf_rtp_stream_descriptor_t *descriptor)
163 {
164  descriptor->capabilities = NULL;
165  descriptor->local = NULL;
166  descriptor->remote = NULL;
167  descriptor->settings = NULL;
168 }
169 
170 /** Initialize RTP termination descriptor */
171 static APR_INLINE void mpf_rtp_termination_descriptor_init(mpf_rtp_termination_descriptor_t *rtp_descriptor)
172 {
173  mpf_rtp_stream_descriptor_init(&rtp_descriptor->audio);
174  mpf_rtp_stream_descriptor_init(&rtp_descriptor->video);
175 }
176 
177 /** Initialize JB config */
178 static APR_INLINE void mpf_jb_config_init(mpf_jb_config_t *jb_config)
179 {
180  jb_config->adaptive = 0;
181  jb_config->initial_playout_delay = 0;
182  jb_config->min_playout_delay = 0;
183  jb_config->max_playout_delay = 0;
184  jb_config->time_skew_detection = 1;
185 }
186 
187 /** Allocate RTP config */
188 static APR_INLINE mpf_rtp_config_t* mpf_rtp_config_alloc(apr_pool_t *pool)
189 {
190  mpf_rtp_config_t *rtp_config = (mpf_rtp_config_t*)apr_palloc(pool,sizeof(mpf_rtp_config_t));
191  apt_string_reset(&rtp_config->ip);
192  apt_string_reset(&rtp_config->ext_ip);
193  rtp_config->rtp_port_cur = 0;
194  rtp_config->rtp_port_min = 0;
195  rtp_config->rtp_port_max = 0;
196  return rtp_config;
197 }
198 
199 /** Allocate RTP settings */
200 static APR_INLINE mpf_rtp_settings_t* mpf_rtp_settings_alloc(apr_pool_t *pool)
201 {
202  mpf_rtp_settings_t *rtp_settings = (mpf_rtp_settings_t*)apr_palloc(pool,sizeof(mpf_rtp_settings_t));
203  rtp_settings->ptime = 0;
204  mpf_codec_list_init(&rtp_settings->codec_list,0,pool);
205  rtp_settings->own_preferrence = FALSE;
206  rtp_settings->rtcp = FALSE;
207  rtp_settings->rtcp_bye_policy = RTCP_BYE_DISABLE;
208  rtp_settings->rtcp_tx_interval = 0;
209  rtp_settings->rtcp_rx_resolution = 0;
210  mpf_jb_config_init(&rtp_settings->jb_config);
211  return rtp_settings;
212 }
213 
214 /** Allocate RTP termination descriptor */
215 static APR_INLINE mpf_rtp_termination_descriptor_t* mpf_rtp_termination_descriptor_alloc(apr_pool_t *pool)
216 {
218  mpf_rtp_termination_descriptor_init(rtp_descriptor);
219  return rtp_descriptor;
220 }
221 
222 /** Allocate RTP media descriptor */
223 static APR_INLINE mpf_rtp_media_descriptor_t* mpf_rtp_media_descriptor_alloc(apr_pool_t *pool)
224 {
226  mpf_rtp_media_descriptor_init(media);
227  return media;
228 }
229 
230 /** Copy RTP media descriptor */
231 static APR_INLINE mpf_rtp_media_descriptor_t* mpf_rtp_media_descriptor_copy(const mpf_rtp_media_descriptor_t *src_media, apr_pool_t *pool)
232 {
233  mpf_rtp_media_descriptor_t *media = mpf_rtp_media_descriptor_alloc(pool);
234  if(src_media) {
235  *media = *src_media;
236  apt_string_copy(&media->ip,&src_media->ip,pool);
237  apt_string_copy(&media->ext_ip,&src_media->ext_ip,pool);
238  }
239  return media;
240 }
241 
242 /** Compare RTP media descriptors (return TRUE, if identical) */
243 static APR_INLINE apt_bool_t mpf_rtp_media_descriptors_compare(const mpf_rtp_media_descriptor_t *media1, const mpf_rtp_media_descriptor_t *media2)
244 {
245  if(!media1 || !media2)
246  return FALSE;
247 
248  if(media1->state != media2->state)
249  return FALSE;
250 
251  if(apt_strings_compare(&media1->ip, &media2->ip) == FALSE)
252  return FALSE;
253 
254  if(apt_strings_compare(&media1->ext_ip, &media2->ext_ip) == FALSE)
255  return FALSE;
256 
257  if(media1->port != media2->port)
258  return FALSE;
259 
260  if(media1->direction != media2->direction)
261  return FALSE;
262 
263  if(media1->ptime != media2->ptime)
264  return FALSE;
265 
266  if(mpf_codec_lists_compare(&media1->codec_list, &media2->codec_list) == FALSE)
267  return FALSE;
268 
269  if(media1->mid != media2->mid)
270  return FALSE;
271 
272  if(media1->id != media2->id)
273  return FALSE;
274 
275  return TRUE;
276 }
277 
279 
280 #endif /* MPF_RTP_DESCRIPTOR_H */
Definition: mpf_rtp_descriptor.h:93
Definition: mpf_codec_descriptor.h:79
Definition: mpf_rtp_descriptor.h:73
Definition: mpf_rtp_descriptor.h:108
apr_port_t rtp_port_max
Definition: mpf_rtp_descriptor.h:122
Definition: mpf_stream_descriptor.h:34
Definition: mpf_rtp_descriptor.h:128
MPF Stream Descriptor.
apt_str_t ext_ip
Definition: mpf_rtp_descriptor.h:118
apr_uint32_t max_playout_delay
Definition: mpf_rtp_descriptor.h:99
#define APT_END_EXTERN_C
Definition: apt.h:38
apt_bool_t mpf_codec_lists_compare(const mpf_codec_list_t *codec_list1, const mpf_codec_list_t *codec_list2)
int apt_bool_t
Definition: apt.h:57
Definition: mpf_rtp_descriptor.h:114
rtcp_bye_policy_e
Definition: mpf_rtp_descriptor.h:107
apt_bool_t rtcp
Definition: mpf_rtp_descriptor.h:136
apt_bool_t own_preferrence
Definition: mpf_rtp_descriptor.h:134
mpf_rtp_stream_descriptor_t video
Definition: mpf_rtp_descriptor.h:89
apr_port_t rtp_port_cur
Definition: mpf_rtp_descriptor.h:124
mpf_media_state_e state
Definition: mpf_rtp_descriptor.h:53
Definition: mpf_rtp_descriptor.h:85
apr_uint16_t ptime
Definition: mpf_rtp_descriptor.h:63
rtcp_bye_policy_e rtcp_bye_policy
Definition: mpf_rtp_descriptor.h:138
Definition: mpf_stream_descriptor.h:43
apr_size_t mid
Definition: mpf_rtp_descriptor.h:67
apr_uint16_t rtcp_tx_interval
Definition: mpf_rtp_descriptor.h:140
#define APT_BEGIN_EXTERN_C
Definition: apt.h:36
mpf_media_state_e
Definition: mpf_rtp_descriptor.h:45
mpf_stream_direction_e
Definition: mpf_stream_descriptor.h:33
apr_size_t id
Definition: mpf_rtp_descriptor.h:69
Definition: mpf_rtp_descriptor.h:110
apr_uint32_t min_playout_delay
Definition: mpf_rtp_descriptor.h:95
Definition: mpf_rtp_descriptor.h:47
mpf_jb_config_t jb_config
Definition: mpf_rtp_descriptor.h:144
apt_str_t ext_ip
Definition: mpf_rtp_descriptor.h:57
apr_uint32_t initial_playout_delay
Definition: mpf_rtp_descriptor.h:97
apt_str_t ip
Definition: mpf_rtp_descriptor.h:116
mpf_rtp_settings_t * settings
Definition: mpf_rtp_descriptor.h:81
apr_uint16_t ptime
Definition: mpf_rtp_descriptor.h:130
Definition: mpf_rtp_descriptor.h:51
apr_port_t port
Definition: mpf_rtp_descriptor.h:59
Definition: apt_string.h:36
mpf_rtp_media_descriptor_t * remote
Definition: mpf_rtp_descriptor.h:79
Definition: mpf_rtp_descriptor.h:46
apt_str_t ip
Definition: mpf_rtp_descriptor.h:55
mpf_codec_list_t codec_list
Definition: mpf_rtp_descriptor.h:132
apr_uint16_t rtcp_rx_resolution
Definition: mpf_rtp_descriptor.h:142
mpf_stream_capabilities_t * capabilities
Definition: mpf_rtp_descriptor.h:75
mpf_stream_direction_e direction
Definition: mpf_rtp_descriptor.h:61
apr_byte_t time_skew_detection
Definition: mpf_rtp_descriptor.h:103
mpf_codec_list_t codec_list
Definition: mpf_rtp_descriptor.h:65
apr_port_t rtp_port_min
Definition: mpf_rtp_descriptor.h:120
mpf_rtp_media_descriptor_t * local
Definition: mpf_rtp_descriptor.h:77
apr_byte_t adaptive
Definition: mpf_rtp_descriptor.h:101
String Representation.
Definition: mpf_rtp_descriptor.h:109
mpf_rtp_stream_descriptor_t audio
Definition: mpf_rtp_descriptor.h:87