reSIProcate
SIP stack, Dialog Usage Manager and related libraries
Loading...
Searching...
No Matches
Object.hxx
Go to the documentation of this file.
1#if !defined(Kurento_Object_hxx)
2#define Kurento_Object_hxx
3
4#include <functional>
5#include <string>
6
7#include "Continuation.hxx"
8#include "Event.hxx"
11
12namespace kurento
13{
14
16{
17 static const char *JPEG_VIDEO_ONLY;
18 static const char *KURENTO_SPLIT_RECORDER;
19 static const char *MP4;
20 static const char *MP4_AUDIO_ONLY;
21 static const char *MP4_VIDEO_ONLY;
22 static const char *WEBM;
23 static const char *WEBM_AUDIO_ONLY;
24 static const char *WEBM_VIDEO_ONLY;
25};
26
28{
29 public:
30 bool valid() { return !mId.empty(); };
31 const std::string& getName() const { return mName; };
32 const std::string& getId() const { return mId; };
33
34 std::shared_ptr<KurentoConnection> getConnection() { return mConnection; };
35
36 void processResponse(const std::string& id, std::shared_ptr<KurentoResponseHandler> krh, const json::Object& message) override;
37
38 virtual void create(ContinuationVoid c) { createObject(c); };
39 virtual void release(ContinuationVoid c);
40
41 virtual void onEvent(const std::string& eventType, const json::Object& message);
42 void sendNotifications(const std::string& eventType, const json::Object& message);
43
44 protected:
45 Object(const std::string& name, std::shared_ptr<KurentoConnection> connection);
46 virtual ~Object();
47
48 typedef std::function<void(const json::Object& message) >
50
51 void createObject(ContinuationVoid c, const json::Object& constructorParams = json::Object());
52 void invokeVoidMethod(const std::string& methodName, ContinuationVoid c, const json::Object& methodParams = json::Object());
53 void invokeStringMethod(const std::string& methodName, ContinuationString c, const json::Object& methodParams = json::Object());
54
55 void addListener(const std::string& eventName, std::shared_ptr<EventListener> l, ContinuationVoid c);
56
57 private:
58
59 std::string makeRpcCallStatic(const std::string& methodName, const json::Object& params, ContinuationInternal c);
60 std::string makeRpcCall(const std::string& methodName, json::Object& params, ContinuationInternal c);
61
62 void subscribe(const std::string& eventName, ContinuationVoid c);
63
64 void onConstructorSuccess(ContinuationVoid c, const json::Object& message);
65 void onSubscribeSuccess(ContinuationVoid c, const json::Object& message);
66 void onVoidSuccess(ContinuationVoid c, const json::Object& message);
67 void onStringSuccess(ContinuationString c, const json::Object& message);
68
69 std::string mName;
70 std::string mId;
71 std::shared_ptr<KurentoConnection> mConnection;
72
73 typedef std::map<std::string, ContinuationInternal> ContinuationMap;
74 ContinuationMap mContinuations;
75
76 typedef std::vector<std::shared_ptr<EventListener> > EventListenerList;
77 typedef std::map<std::string, EventListenerList> EventListenerMap;
78 EventListenerMap mEventListeners;
79};
80
81class MediaPipeline : public Object
82{
83 public:
84 MediaPipeline(std::shared_ptr<KurentoConnection> connection);
85 virtual ~MediaPipeline();
86};
87
88class MediaElement : public Object
89{
90 public:
91 virtual void create(ContinuationVoid c) override;
92
95
96 void addErrorListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
97 void addConnectionStateChangedListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
98 void addMediaStateChangedListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
99 void addMediaTranscodingStateChangeListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
100 void addMediaFlowInStateChangeListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
101 void addMediaFlowOutStateChangeListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
102
103 protected:
104 MediaElement(const std::string& name, std::shared_ptr<MediaPipeline> mediaPipeline);
105 virtual ~MediaElement();
106 virtual void create(ContinuationVoid c, const json::Object& extraPparams);
107
108 private:
109 std::shared_ptr<MediaPipeline> mMediaPipeline;
110};
111
113{
114 public:
115 PassThroughElement(std::shared_ptr<MediaPipeline> mediaPipeline);
116 virtual ~PassThroughElement();
117};
118
120{
121 public:
122 GStreamerFilter(std::shared_ptr<MediaPipeline> mediaPipeline, const std::string& command);
123 virtual ~GStreamerFilter();
124 virtual void create(ContinuationVoid c) override;
125 private:
126 std::string mCommand;
127};
128
129class Endpoint : public MediaElement
130{
131 protected:
132 Endpoint(const std::string& name, std::shared_ptr<MediaPipeline> mediaPipeline);
133 virtual ~Endpoint();
134};
135
136class UriEndpoint : public Endpoint
137{
138 public:
139 virtual void create(ContinuationVoid c) override;
140
142 void stop(ContinuationVoid c);
143
144 protected:
145 UriEndpoint(const std::string& name, std::shared_ptr<MediaPipeline> mediaPipeline, const std::string& uri);
146 virtual ~UriEndpoint();
147 virtual void create(ContinuationVoid c, const json::Object& extraParams) override;
148
149 private:
150 std::string mUri;
151};
152
154{
155 public:
156 PlayerEndpoint(std::shared_ptr<MediaPipeline> mediaPipeline, const std::string& uri);
157 virtual ~PlayerEndpoint();
158 void play(ContinuationVoid c);
159};
160
162{
163 public:
164 RecorderEndpoint(std::shared_ptr<MediaPipeline> mediaPipeline, const std::string& uri, const char *mediaProfile);
165 virtual ~RecorderEndpoint();
166 virtual void create(ContinuationVoid c) override;
169 private:
170 const char *mMediaProfile;
171};
172
174{
175 protected:
176 BaseRtpEndpoint(const std::string& name, std::shared_ptr<MediaPipeline> mediaPipeline);
177
178 public:
179 virtual ~BaseRtpEndpoint();
180 void setExternalIPv4(ContinuationVoid c, const std::string& addr);
181 void setExternalIPv6(ContinuationVoid c, const std::string& addr);
183 void processAnswer(ContinuationString s, const std::string& sdp);
184 void processOffer(ContinuationString s, const std::string& sdp);
187
188 void addKeyframeRequiredListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
189};
190
192{
193 public:
194 RtpEndpoint(std::shared_ptr<MediaPipeline> mediaPipeline);
195 virtual ~RtpEndpoint();
196};
197
199{
200 public:
201 SipRtpEndpoint(std::shared_ptr<MediaPipeline> mediaPipeline, bool cryptoAgnostic = true);
202 virtual ~SipRtpEndpoint();
203 virtual void create(ContinuationVoid c) override;
204 private:
205 bool mCryptoAgnostic;
206};
207
209{
210 public:
211 WebRtcEndpoint(std::shared_ptr<MediaPipeline> mediaPipeline);
212 virtual ~WebRtcEndpoint();
213
215 void addIceCandidate(ContinuationVoid c, const std::string& candidate, const std::string& mid, unsigned int lineIndex);
216
217 void addOnIceCandidateFoundListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
218 void addOnIceGatheringDoneListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
219 void addDataChannelOpenedListener(std::shared_ptr<EventListener> l, ContinuationVoid c);
220
221};
222
223}
224
225#endif
226
227/* ====================================================================
228
229 Copyright (c) 2021, Software Freedom Institute https://softwarefreedom.institute
230 Copyright (c) 2021, Daniel Pocock https://danielpocock.com
231 All rights reserved.
232
233 Redistribution and use in source and binary forms, with or without
234 modification, are permitted provided that the following conditions are
235 met:
236
237 1. Redistributions of source code must retain the above copyright
238 notice, this list of conditions and the following disclaimer.
239
240 2. Redistributions in binary form must reproduce the above copyright
241 notice, this list of conditions and the following disclaimer in the
242 documentation and/or other materials provided with the distribution.
243
244 3. Neither the name of Plantronics nor the names of its contributors
245 may be used to endorse or promote products derived from this
246 software without specific prior written permission.
247
248 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
249 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
250 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
251 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
252 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
253 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
254 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
258 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
259
260 ==================================================================== */
void setExternalIPv4(ContinuationVoid c, const std::string &addr)
Definition Object.cxx:438
void getLocalSessionDescriptor(ContinuationString s)
Definition Object.cxx:476
void sendPictureFastUpdate(ContinuationVoid c)
Definition Object.cxx:482
void generateOffer(ContinuationString s)
Definition Object.cxx:454
void processAnswer(ContinuationString s, const std::string &sdp)
Definition Object.cxx:460
void setExternalIPv6(ContinuationVoid c, const std::string &addr)
Definition Object.cxx:446
void addKeyframeRequiredListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:488
void processOffer(ContinuationString s, const std::string &sdp)
Definition Object.cxx:468
virtual ~Endpoint()
Definition Object.cxx:341
virtual void create(ContinuationVoid c) override
Definition Object.cxx:329
void disconnect(ContinuationVoid c, MediaElement &element)
Definition Object.cxx:261
virtual ~MediaElement()
Definition Object.cxx:230
void addErrorListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:269
void addMediaFlowOutStateChangeListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:299
void addMediaStateChangedListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:281
void connect(ContinuationVoid c, MediaElement &element)
Definition Object.cxx:251
void addMediaFlowInStateChangeListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:293
virtual void create(ContinuationVoid c) override
Definition Object.cxx:235
void addConnectionStateChangedListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:275
void addMediaTranscodingStateChangeListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:287
virtual ~MediaPipeline()
Definition Object.cxx:220
std::function< void(const json::Object &message) > ContinuationInternal
Definition Object.hxx:49
void sendNotifications(const std::string &eventType, const json::Object &message)
Definition Object.cxx:97
void addListener(const std::string &eventName, std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:117
void processResponse(const std::string &id, std::shared_ptr< KurentoResponseHandler > krh, const json::Object &message) override
Definition Object.cxx:155
virtual void release(ContinuationVoid c)
Definition Object.cxx:76
void invokeStringMethod(const std::string &methodName, ContinuationString c, const json::Object &methodParams=json::Object())
Definition Object.cxx:142
const std::string & getId() const
Definition Object.hxx:32
const std::string & getName() const
Definition Object.hxx:31
void invokeVoidMethod(const std::string &methodName, ContinuationVoid c, const json::Object &methodParams=json::Object())
Definition Object.cxx:129
virtual void onEvent(const std::string &eventType, const json::Object &message)
Definition Object.cxx:85
virtual ~Object()
Definition Object.cxx:32
virtual void create(ContinuationVoid c)
Definition Object.hxx:38
void createObject(ContinuationVoid c, const json::Object &constructorParams=json::Object())
Definition Object.cxx:56
std::shared_ptr< KurentoConnection > getConnection()
Definition Object.hxx:34
void play(ContinuationVoid c)
Definition Object.cxx:393
virtual ~PlayerEndpoint()
Definition Object.cxx:388
void record(ContinuationVoid c)
Definition Object.cxx:417
void stopAndWait(ContinuationVoid c)
Definition Object.cxx:423
virtual void create(ContinuationVoid c) override
Definition Object.cxx:409
virtual ~RtpEndpoint()
Definition Object.cxx:498
virtual void create(ContinuationVoid c) override
Definition Object.cxx:513
virtual ~SipRtpEndpoint()
Definition Object.cxx:508
void stop(ContinuationVoid c)
Definition Object.cxx:378
void pause(ContinuationVoid c)
Definition Object.cxx:372
virtual void create(ContinuationVoid c) override
Definition Object.cxx:356
virtual ~UriEndpoint()
Definition Object.cxx:351
void addOnIceCandidateFoundListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:548
void addDataChannelOpenedListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:305
void addOnIceGatheringDoneListener(std::shared_ptr< EventListener > l, ContinuationVoid c)
Definition Object.cxx:554
void gatherCandidates(ContinuationVoid c)
Definition Object.cxx:531
void addIceCandidate(ContinuationVoid c, const std::string &candidate, const std::string &mid, unsigned int lineIndex)
Definition Object.cxx:537
virtual ~WebRtcEndpoint()
Definition Object.cxx:526
This class is used in the logging subsystem to identify logging messages generated from the Kurento c...
std::function< void(void) > ContinuationVoid
std::function< void(const std::string &s) > ContinuationString
void list()
Definition userAdmin.cxx:66