OpenTera WebRTC API (C++) 1.2.5
StreamClient.h
1 #ifndef OPENTERA_WEBRTC_NATIVE_CLIENT_STREAM_CLIENT_H
2 #define OPENTERA_WEBRTC_NATIVE_CLIENT_STREAM_CLIENT_H
3 
4 #include <OpenteraWebrtcNativeClient/Sources/AudioSource.h>
5 #include <OpenteraWebrtcNativeClient/Sources/VideoSource.h>
6 #include <OpenteraWebrtcNativeClient/Handlers/StreamPeerConnectionHandler.h>
7 
8 #include <OpenteraWebrtcNativeClient/WebrtcClient.h>
9 
10 #include <memory>
11 
12 namespace opentera
13 {
17  class StreamClient : public WebrtcClient
18  {
19  std::shared_ptr<VideoSource> m_videoSource;
20  std::shared_ptr<AudioSource> m_audioSource;
21 
22  bool m_hasOnMixedAudioFrameReceivedCallback;
23  std::function<void(const Client&)> m_onAddRemoteStream;
24  std::function<void(const Client&)> m_onRemoveRemoteStream;
25  VideoFrameReceivedCallback m_onVideoFrameReceived;
26  EncodedVideoFrameReceivedCallback m_onEncodedVideoFrameReceived;
27  AudioFrameReceivedCallback m_onAudioFrameReceived;
28 
29  bool m_isLocalAudioMuted;
30  bool m_isRemoteAudioMuted;
31  bool m_isLocalVideoMuted;
32 
33  public:
35  SignalingServerConfiguration signalingServerConfiguration,
36  WebrtcConfiguration webrtcConfiguration,
37  VideoStreamConfiguration videoStreamConfiguration);
39  SignalingServerConfiguration signalingServerConfiguration,
40  WebrtcConfiguration webrtcConfiguration,
41  VideoStreamConfiguration videoStreamConfiguration,
42  std::shared_ptr<VideoSource> videoSource);
44  SignalingServerConfiguration signalingServerConfiguration,
45  WebrtcConfiguration webrtcConfiguration,
46  VideoStreamConfiguration videoStreamConfiguration,
47  std::shared_ptr<AudioSource> audioSource);
49  SignalingServerConfiguration signalingServerConfiguration,
50  WebrtcConfiguration webrtcConfiguration,
51  VideoStreamConfiguration videoStreamConfiguration,
52  std::shared_ptr<VideoSource> videoSource,
53  std::shared_ptr<AudioSource> audioSource);
54  ~StreamClient() override;
55 
56  DECLARE_NOT_COPYABLE(StreamClient);
57  DECLARE_NOT_MOVABLE(StreamClient);
58 
59  bool isLocalAudioMuted();
60  void muteLocalAudio();
61  void unmuteLocalAudio();
62  void setLocalAudioMuted(bool muted);
63 
64  bool isRemoteAudioMuted();
65  void muteRemoteAudio();
66  void unmuteRemoteAudio();
67  void setRemoteAudioMuted(bool muted);
68 
69  bool isLocalVideoMuted();
70  void muteLocalVideo();
71  void unmuteLocalVideo();
72  void setLocalVideoMuted(bool muted);
73 
74  void setOnAddRemoteStream(const std::function<void(const Client&)>& callback);
75  void setOnRemoveRemoteStream(const std::function<void(const Client&)>& callback);
76  void setOnVideoFrameReceived(const VideoFrameReceivedCallback& callback);
77  void setOnEncodedVideoFrameReceived(const EncodedVideoFrameReceivedCallback& callback);
78  void setOnAudioFrameReceived(const AudioFrameReceivedCallback& callback);
79  void setOnMixedAudioFrameReceived(const AudioSinkCallback& callback);
80 
81  protected:
82  std::unique_ptr<PeerConnectionHandler>
83  createPeerConnectionHandler(const std::string& id, const Client& peerClient, bool isCaller) override;
84  };
85 
91  {
92  return callSync(getInternalClientThread(), [this]() { return m_isLocalAudioMuted; });
93  }
94 
95 
100 
105 
111  {
112  return callSync(getInternalClientThread(), [this]() { return m_isRemoteAudioMuted; });
113  }
114 
119 
124 
130  {
131  return callSync(getInternalClientThread(), [this]() { return m_isLocalVideoMuted; });
132  }
133 
138 
143 
156  inline void StreamClient::setOnAddRemoteStream(const std::function<void(const Client&)>& callback)
157  {
158  callSync(getInternalClientThread(), [this, &callback]() { m_onAddRemoteStream = callback; });
159  }
160 
173  inline void StreamClient::setOnRemoveRemoteStream(const std::function<void(const Client&)>& callback)
174  {
175  callSync(getInternalClientThread(), [this, &callback]() { m_onRemoveRemoteStream = callback; });
176  }
177 
192  inline void StreamClient::setOnVideoFrameReceived(const VideoFrameReceivedCallback& callback)
193  {
194  callSync(getInternalClientThread(), [this, &callback]() { m_onVideoFrameReceived = callback; });
195  }
196 
216  inline void StreamClient::setOnEncodedVideoFrameReceived(const EncodedVideoFrameReceivedCallback& callback)
217  {
218  callSync(getInternalClientThread(), [this, &callback]() { m_onEncodedVideoFrameReceived = callback; });
219  }
220 
238  inline void StreamClient::setOnAudioFrameReceived(const AudioFrameReceivedCallback& callback)
239  {
240  callSync(getInternalClientThread(), [this, &callback]() { m_onAudioFrameReceived = callback; });
241  }
242 
259  inline void StreamClient::setOnMixedAudioFrameReceived(const AudioSinkCallback& callback)
260  {
261  bool hasOnMixedAudioFrameReceivedCallback(callback);
262  callSync(
263  getInternalClientThread(),
264  [this, hasOnMixedAudioFrameReceivedCallback]()
265  { m_hasOnMixedAudioFrameReceivedCallback = hasOnMixedAudioFrameReceivedCallback; });
266 
267  m_audioDeviceModule->setOnMixedAudioFrameReceived(callback);
268  }
269 }
270 
271 #endif
Represents a peer client.
Definition: Client.h:14
Represents a signaling server configuration.
Definition: SignalingServerConfiguration.h:14
A signaling client to join a WebRTC room and stream a video source.
Definition: StreamClient.h:18
void unmuteLocalVideo()
Unmutes the local video.
Definition: StreamClient.h:142
void setRemoteAudioMuted(bool muted)
Mutes or unmutes the remote audio.
Definition: StreamClient.cpp:141
void setOnVideoFrameReceived(const VideoFrameReceivedCallback &callback)
Sets the callback that is called when a video stream frame is received.
Definition: StreamClient.h:192
bool isLocalAudioMuted()
Indicates if the local audio is muted.
Definition: StreamClient.h:90
void muteLocalAudio()
Mutes the local audio.
Definition: StreamClient.h:99
void unmuteRemoteAudio()
Unmutes the remote audio.
Definition: StreamClient.h:123
StreamClient(SignalingServerConfiguration signalingServerConfiguration, WebrtcConfiguration webrtcConfiguration, VideoStreamConfiguration videoStreamConfiguration)
Creates a stream client.
Definition: StreamClient.cpp:14
void setOnMixedAudioFrameReceived(const AudioSinkCallback &callback)
Sets the callback that is called when a mixed audio stream frame is received.
Definition: StreamClient.h:259
void unmuteLocalAudio()
Unmutes the local audio.
Definition: StreamClient.h:104
std::unique_ptr< PeerConnectionHandler > createPeerConnectionHandler(const std::string &id, const Client &peerClient, bool isCaller) override
Creates the peer connection handler for this client.
Definition: StreamClient.cpp:182
void setLocalAudioMuted(bool muted)
Mutes or unmutes the local audio.
Definition: StreamClient.cpp:123
void setOnRemoveRemoteStream(const std::function< void(const Client &)> &callback)
Sets the callback that is called when a stream is removed.
Definition: StreamClient.h:173
bool isRemoteAudioMuted()
Indicates if the remote audio is muted.
Definition: StreamClient.h:110
void muteLocalVideo()
Mutes the local video.
Definition: StreamClient.h:137
void setLocalVideoMuted(bool muted)
Mutes or unmutes the local video.
Definition: StreamClient.cpp:159
void setOnEncodedVideoFrameReceived(const EncodedVideoFrameReceivedCallback &callback)
Sets the callback that is called when an encoded video stream frame is received.
Definition: StreamClient.h:216
void setOnAddRemoteStream(const std::function< void(const Client &)> &callback)
Sets the callback that is called when a stream is added.
Definition: StreamClient.h:156
void muteRemoteAudio()
Mutes the remote audio.
Definition: StreamClient.h:118
void setOnAudioFrameReceived(const AudioFrameReceivedCallback &callback)
Sets the callback that is called when an audio stream frame is received.
Definition: StreamClient.h:238
bool isLocalVideoMuted()
Indicates if the local video is muted.
Definition: StreamClient.h:129
Represents a video stream configuration.
Definition: VideoStreamConfiguration.h:26
Represents the base class of DataChannelClient and StreamClient.
Definition: WebrtcClient.h:29
Represents a WebRTC peer connection configuration.
Definition: WebrtcConfiguration.h:14