1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
|
/*
* Copyright (C) 2010-2011 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
#ifndef TINYWRAP_MEDIA_SESSIONMGR_H
#define TINYWRAP_MEDIA_SESSIONMGR_H
#include "tinyWRAP_config.h"
#include "tinymedia.h"
#include "Common.h"
class ProxyPlugin;
class MediaSessionMgr;
class TINYWRAP_API QoS
{
friend class MediaSessionMgr;
public:
#if !defined(SWIG)
QoS(float qavg, float q1 = -1.f, float q2 = -1.f, float q3 = -1.f, float q4 = -1.f, float q5 = -1.f);
#endif
virtual ~QoS();
float getQavg() {
return m_Qqvg;
}
float getQ1() {
return m_Qn[0];
}
float getQ2() {
return m_Qn[1];
}
float getQ3() {
return m_Qn[2];
}
float getQ4() {
return m_Qn[3];
}
float getQ5() {
return m_Qn[4];
}
unsigned getVideoInWidth() {
return m_VideoInWidth;
}
unsigned getVideoOutWidth() {
return m_VideoOutWidth;
}
unsigned getVideoInHeight() {
return m_VideoInHeight;
}
unsigned getVideoOutHeight() {
return m_VideoOutHeight;
}
unsigned getBandwidthDownKbps() {
return m_BandwidthDownKbps;
}
unsigned getBandwidthUpKbps() {
return m_BandwidthUpKbps;
}
unsigned getVideoInAvgFps() {
return m_VideoInAvgFps;
}
unsigned getVideoDecAvgTime() { // In millis
return m_VideoDecAvgTime;
}
unsigned getVideoEncAvgTime() { // In millis
return m_VideoEncAvgTime;
}
private:
float m_Qqvg;
float m_Qn[5];
unsigned m_VideoInWidth;
unsigned m_VideoOutWidth;
unsigned m_VideoInHeight;
unsigned m_VideoOutHeight;
unsigned m_BandwidthDownKbps;
unsigned m_BandwidthUpKbps;
unsigned m_VideoInAvgFps;
unsigned m_VideoDecAvgTime;
unsigned m_VideoEncAvgTime;
};
class TINYWRAP_API Codec
{
public:
#if !defined(SWIG)
Codec(const struct tmedia_codec_s* pWrappedCodec);
#endif
virtual ~Codec();
public:
#if !defined(SWIG)
const struct tmedia_codec_s* getWrappedCodec() {
return m_pWrappedCodec;
}
inline bool isOpened() {
return (m_pWrappedCodec && (m_pWrappedCodec->opened == tsk_true));
}
#endif
twrap_media_type_t getMediaType();
const char* getName();
const char* getDescription();
const char* getNegFormat();
int getAudioSamplingRate();
int getAudioChannels();
int getAudioPTime();
private:
struct tmedia_codec_s* m_pWrappedCodec;
};
class TINYWRAP_API MediaSessionMgr
{
public:
#if !defined(SWIG)
MediaSessionMgr(tmedia_session_mgr_t* pWrappedMgr);
#endif
virtual ~MediaSessionMgr();
public:
bool sessionSetInt32(twrap_media_type_t media, const char* key, int32_t value);
int32_t sessionGetInt32(twrap_media_type_t media, const char* key);
QoS* sessionGetQoS(twrap_media_type_t media);
bool consumerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool consumerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
bool producerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool producerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
Codec* producerGetCodec(twrap_media_type_t media);
#if !defined(SWIG)
const ProxyPlugin* findProxyPlugin(twrap_media_type_t media, bool consumer)const;
#endif
const ProxyPlugin* findProxyPluginConsumer(twrap_media_type_t media)const {
return this->findProxyPlugin(media, true);
}
const ProxyPlugin* findProxyPluginProducer(twrap_media_type_t media)const {
return this->findProxyPlugin(media, false);
}
static unsigned int registerAudioPluginFromFile(const char* path);
uint64_t getSessionId(twrap_media_type_t media)const;
#if !defined(SWIG)
inline const tmedia_session_mgr_t* getWrappedMgr()const {
return m_pWrappedMgr;
}
#endif
// Defaults
static bool defaultsSetProfile(tmedia_profile_t profile);
static tmedia_profile_t defaultsGetProfile();
static bool defaultsSetBandwidthLevel(tmedia_bandwidth_level_t bl); // @deprecated
static tmedia_bandwidth_level_t defaultsGetBandwidthLevel(); // @deprecated
static bool defaultsSetCongestionCtrlEnabled(bool enabled);
static bool defaultsSetVideoMotionRank(int32_t video_motion_rank);
static bool defaultsSetVideoFps(int32_t video_fps);
static bool defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps);
static bool defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps);
static bool defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max);
static bool defaultsSetAdaptativeVideoSizeOutEnabled(bool enabled);
static bool defaultsSetJbMargin(uint32_t jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32_t jb_late_rate_percent);
static bool defaultsSetEchoTail(uint32_t echo_tail);
static uint32_t defaultsGetEchoTail();
static bool defaultsSetEchoSkew(uint32_t echo_skew);
static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
static bool defaultsGetEchoSuppEnabled();
static bool defaultsSetAgcEnabled(bool agc_enabled);
static bool defaultsGetAgcEnabled();
static bool defaultsSetAgcLevel(float agc_level);
static float defaultsGetAgcLevel();
static bool defaultsSetVadEnabled(bool vad_enabled);
static bool defaultsGetGetVadEnabled();
static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
static bool defaultsGetNoiseSuppEnabled();
static bool defaultsSetNoiseSuppLevel(int32_t noise_supp_level);
static int32_t defaultsGetNoiseSuppLevel();
static bool defaultsSet100relEnabled(bool _100rel_enabled);
static bool defaultsGet100relEnabled();
static bool defaultsSetScreenSize(int32_t sx, int32_t sy);
static bool defaultsSetAudioGain(int32_t producer_gain, int32_t consumer_gain);
static bool defaultsSetAudioPtime(int32_t ptime);
static bool defaultsSetAudioChannels(int32_t channel_playback, int32_t channel_record);
static bool defaultsSetRtpPortRange(uint16_t range_start, uint16_t range_stop);
static bool defaultsSetRtpSymetricEnabled(bool enabled);
static bool defaultsSetMediaType(twrap_media_type_t media_type);
static bool defaultsSetVolume(int32_t volume);
static int32_t defaultsGetVolume();
static bool defaultsSetInviteSessionTimers(int32_t timeout, const char* refresher);
static bool defaultsSetSRtpMode(tmedia_srtp_mode_t mode);
static tmedia_srtp_mode_t defaultsGetSRtpMode();
static bool defaultsSetSRtpType(tmedia_srtp_type_t srtp_type);
static tmedia_srtp_type_t defaultsGetSRtpType();
static bool defaultsSetRtcpEnabled(bool enabled);
static bool defaultsGetRtcpEnabled();
static bool defaultsSetRtcpMuxEnabled(bool enabled);
static bool defaultsGetRtcpMuxEnabled();
static bool defaultsSetStunEnabled(bool stun_enabled);
static bool defaultsSetIceStunEnabled(bool icestun_enabled);
static bool defaultsSetIceTurnEnabled(bool iceturn_enabled);
static bool defaultsSetStunServer(const char* server_ip, uint16_t server_port);
static bool defaultsSetStunCred(const char* username, const char* password);
static bool defaultsSetIceEnabled(bool ice_enabled);
static bool defaultsSetByPassEncoding(bool enabled);
static bool defaultsGetByPassEncoding();
static bool defaultsSetByPassDecoding(bool enabled);
static bool defaultsGetByPassDecoding();
static bool defaultsSetVideoJbEnabled(bool enabled);
static bool defaultsGetVideoJbEnabled();
static bool defaultsSetVideoZeroArtifactsEnabled(bool enabled);
static bool defaultsGetVideoZeroArtifactsEnabled();
static bool defaultsSetRtpBuffSize(unsigned buffSize);
static unsigned defaultsGetRtpBuffSize();
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
static bool defaultsSetAvpfMode(enum tmedia_mode_e mode);
static bool defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate);
static bool defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate);
static bool defaultsSetMaxFds(int32_t max_fds);
private:
tmedia_session_mgr_t* m_pWrappedMgr;
};
#endif /* TINYWRAP_MEDIA_SESSIONMGR_H */
|