Agora C++ API Reference for All Platforms
Loading...
Searching...
No Matches
rtc_connection_i.h
1//
2// Agora Media SDK
3//
4// Created by Sting Feng in 2015-05.
5// Copyright (c) 2015 Agora IO. All rights reserved.
6//
7#pragma once
8
9#include <functional>
10#include <list>
11#include <memory>
12#include <string>
13#include <utility>
14#include <vector>
15
16#include "IAgoraService.h"
17#include "NGIAgoraRtcConnection.h"
18#include "audio_node_stat_i.h"
19#include "local_user_i.h"
20
21namespace agora {
22namespace base {
23class BaseWorker;
24struct ExtraReportData;
25} // namespace base
26
27namespace commons {
28namespace cjson {
29class JsonWrapper;
30} // namespace cjson
31
32namespace network {
33struct network_info_t;
34} // namespace network
35} // namespace commons
36
37namespace rtc {
38
39struct LocalAccessPointInfo;
40
41namespace protocol {
42struct CmdRecordingEventReportArgus;
43} // namespace protocol
44
45class CallContext;
47class IAudioEngineWrapper;
48class IVideoEngine;
49class AudioPacketFilter;
50class VideoPacketFilter;
51struct audio_packet_t;
52struct SAudioFrame;
53struct video_packet_t;
54struct peer_message_t;
58
59static const uint8_t AUDIO_MEDIA_PACKET_PAYLOAD_TYPE = 127;
60
62 // Agora will ignore unknown payload type
63 uint8_t payload_type;
64 // if enabled audio rs-fec
65 bool rsfec;
67 // RTP ssrc
68 uint32_t ssrc;
69 // bool is_key_frame;
70 // uint8_t frame_packet_count;
71 // uint8_t frame_packet_sequence;
72 // if packet is encrypted
74 // payload with agora header
78 payload_type(0),
79 rsfec(false),
80 ssrc(0),
81 encrypted(false),
82 with_agora_header(false) {}
83};
84
94
96 // In active mode, broadcast messages will be sent through the connection.
97 // This is used as a publisher is bound with the connection.
99 // In passive mode, broadcast messages will not be sent through the
100 // connection.
101 // This is used as default mode and no publisher is bound with the connection,
103};
104
142
144 using onAudioPacketType = std::function<int(audio_packet_t&)>;
145 using onVideoPacketType = std::function<int(video_packet_t&)>;
147 using onPeerMessageType = std::function<int(const peer_message_t&)>;
149 using onAudioFrameType = std::function<int(SAudioFrame&)>;
150
157 ReceivePacketHandler(onAudioPacketType&& onAudioPacket = nullptr,
158 onVideoPacketType&& onVideoPacket = nullptr,
159 onControlBroadcastPacketType&& onControlBroadcastPacket = nullptr,
160 onPeerMessageType&& onPeerMessagePacket = nullptr,
161 onVideoCustomCtrlPacketType&& onVideoCustomCtrlPacket = nullptr,
162 onAudioFrameType&& onAudioFrame = nullptr)
163 : onAudioPacket_(std::move(onAudioPacket)),
164 onVideoPacket_(std::move(onVideoPacket)),
165 onControlBroadcastPacket_(std::move(onControlBroadcastPacket)),
166 onPeerMessagePacket_(std::move(onPeerMessagePacket)),
167 onVideoCustomCtrlPacket_(std::move(onVideoCustomCtrlPacket)),
168 onAudioFrame_(std::move(onAudioFrame)) {}
176};
177
180 uint64_t banned_elapse = 0;
181 uint64_t space_id = UINT64_MAX;
182};
183
185 public:
186 virtual int initialize(const base::AgoraServiceConfiguration& serviceCfg,
187 const RtcConnectionConfiguration& cfg) = 0;
189 const RtcConnectionConfiguration& connCfg) = 0;
190 virtual int initializeEx(const base::AgoraServiceConfiguration& serviceCfg,
191 const RtcConnectionConfigurationEx& cfg) = 0;
192 virtual int deinitialize() = 0;
193 virtual void setUserRole(CLIENT_ROLE_TYPE role) = 0;
195 virtual bool isEncryptionEnabled() const = 0;
196 virtual int sendAudioFrame(SAudioFrame& frame, int delay_ms = 0) = 0;
197 virtual int sendVideoPacket(video_packet_t& packet) = 0;
198 virtual int sendVideoPacketInternal(video_packet_t& packet) = 0;
199
200 virtual int sendControlBroadcastPacket(std::string&& data) = 0;
201 virtual int sendPeerMessage(peer_message_t& message) = 0;
203 virtual int sendMediaControlMessageLLApiInternal(user_id_t userId, const char* data, size_t length) = 0;
206 virtual void setChannelId(const char* channel) = 0;
208 virtual void setLocalUserId(user_id_t userId) = 0;
209 virtual void setSid(const char* sid) = 0;
210 // FIXME: remove this after we rework internal logic. Only modules of the call
211 // engine relies on CallContext
212 virtual CallContext* getCallContext() = 0;
213 virtual bool getUid(user_id_t userId, rtc::uid_t& uid) = 0;
214 virtual bool getUserId(rtc::uid_t uid, std::string& userId) = 0;
215 virtual rtc::uid_t getLocalUid() = 0;
216 virtual std::string getLocalUserId() = 0;
217 virtual bool isLocalUid(uid_t uid) = 0;
218 virtual bool isLocalUserId(const std::string& userId) = 0;
219 virtual void muteLocalAudio(bool mute) = 0;
220 virtual void muteRemoteAudio(user_id_t userId, bool mute) = 0;
221 virtual void muteAllRemoteAudio(bool mute) = 0;
222 virtual void setDefaultMuteAllRemoteAudioStreams(bool mute) = 0;
223 virtual void muteLocalVideo(bool mute) = 0;
224 virtual void muteRemoteVideo(user_id_t userId, bool mute) = 0;
225 virtual void muteAllRemoteVideo(bool mute) = 0;
226 virtual void setDefaultMuteAllRemoteVideoStreams(bool mute) = 0;
229
230 virtual void setRtcStats(const RtcStats& stats) = 0;
231 virtual void setBannedTime(const uint64_t banned_time) = 0;
232 virtual RtcConnStats GetStats() = 0;
233 virtual bool isConnected() = 0;
234 virtual uint32_t getCid() = 0;
235 virtual uint32_t getVid() = 0;
236 virtual const char* getSid() = 0;
237 virtual void setVos(const char* name, int port) = 0;
238 virtual int reportArgusCounters(int* counterId, int* value, int count, user_id_t userId) = 0;
239 virtual void setChannelProfile(CHANNEL_PROFILE_TYPE channel_profile) = 0;
240 virtual void setRtmFlag(bool rtmFlag) = 0;
241
242 // The following functions should only be used in UT.
243 virtual AudioPacketFilter* getAudioPacketFilter() = 0;
244 virtual VideoPacketFilter* getVideoPacketFilter() = 0;
245 virtual bool hasAudioRemoteTrack(user_id_t id) = 0;
246 virtual bool hasVideoRemoteTrack(user_id_t id, uint32_t ssrc) = 0;
247 // The upper functions should only be used by UT.
248
250
251 // TODO(hanpengfei): maybe need to implement at other place.
252 virtual void onClientRoleChanged(CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole, const ClientRoleOptions& newRoleOptions) = 0;
253 virtual void networkChanged(commons::network::network_info_t&& networkInfo) = 0;
254 virtual int sendReport(const void* data, size_t length, int level, int type, int retry,
255 const base::ExtraReportData* extra) = 0;
256 virtual int setParameters(const std::string& parameters, int priority = 50) = 0;
257 virtual int getParameters(const std::string& parameters, commons::cjson::JsonWrapper& results) = 0;
258 virtual void stopAsyncHandler(bool waitForExit) = 0;
259 virtual void setPacketObserver(IPacketObserver* observer) = 0;
260 virtual int sendWebAgentVideoStats(const std::string& uidstr,
261 const WebAgentVideoStats& stats) = 0;
262 virtual void sendRecordingArgusEvents(const protocol::CmdRecordingEventReportArgus& events) = 0;
263
264 virtual int sendCallRating(const std::string& callId, int rating,
265 const std::string& description) = 0;
266 virtual bool isWebrtcPacerEnabled() = 0;
267 virtual void didStreamMessageSync(uid_t userId, int streamId, const char* data, size_t length,
268 uint64_t sentTs) = 0;
269 virtual void sendAudioVolumeIndication(const AudioVolumeInfo* speakers, unsigned int speaker_number,
270 int total_volume) = 0;
271 virtual int32_t setEncryptionSecret(const char* secret) = 0;
272 virtual int32_t setEncryptionMode(const char* mode) = 0;
273 virtual int32_t enableVosUserInfoHidden(bool enabled) = 0;
274 virtual int32_t enableBuiltInMediaEncryption(bool enabled) = 0;
275 virtual int32_t setAudioScenarioType(AUDIO_SCENARIO_TYPE type) = 0;
276 virtual std::string getAppIdFromToken(const std::string& token) = 0;
277 virtual uint64_t statsSpace() = 0;
278 virtual int setMediaRenderingTracingTick(uint64_t tick) = 0;
279 virtual void SetLocalApInfo(const LocalAccessPointInfo& config) = 0;
281 virtual int connectLLApiInternal(const TConnectSettings& settings) = 0;
282 virtual int connectLLApiInternal(const char* token, const char* channelId, const char* info,
283 user_id_t userId) = 0;
284 virtual int disconnectLLApiInternal() = 0;
286 virtual int renewTokenLLApiInternal(const char* token) = 0;
288 virtual int getRemoteUsersLLApiInternal(UserList& users) = 0;
291 virtual int registerObserverLLApiInternal(IRtcConnectionObserver* observer, void (*safeDeleter)(IRtcConnectionObserver*) = NULL) = 0;
294 virtual int createDataStreamLLApiInternal(int* streamId, bool reliable, bool ordered, bool sync) = 0;
295 virtual int sendStreamMessageLLApiInternal(int streamId, const char* data, size_t length) = 0;
296 virtual int sendRdtMessageLLApiInternal(user_id_t userId, RdtStreamType type, const char* data, size_t length) = 0;
297 virtual int registerNetworkObserverLLApiInternal(INetworkObserver* observer, void (*safeDeleter)(INetworkObserver*) = NULL) = 0;
299 virtual int sendCustomReportMessageLLApiInternal(const char* id, const char* category, const char* event, const char* label, int value) = 0;
300 virtual int enableEncryptionLLApiInternal(bool enabled, const EncryptionConfig& config) = 0;
301 virtual void enableMediaRelay(bool enabled) = 0;
302};
303
304} // namespace rtc
305} // namespace agora
Definition AgoraOptional.h:413
Definition IAgoraParameter.h:147
Definition local_user_i.h:129
Definition NGIAgoraRtcConnection.h:917
Definition AgoraBase.h:3824
Definition rtc_connection_i.h:184
virtual int connectLLApiInternal(const TConnectSettings &settings)=0
virtual int enableEncryptionLLApiInternal(bool enabled, const EncryptionConfig &config)=0
virtual void onClientRoleChanged(CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole, const ClientRoleOptions &newRoleOptions)=0
virtual rtc::uid_t getLocalUid()=0
virtual CallContext * getCallContext()=0
virtual bool getUid(user_id_t userId, rtc::uid_t &uid)=0
virtual void setChannelProfile(CHANNEL_PROFILE_TYPE channel_profile)=0
virtual AudioPacketFilter * getAudioPacketFilter()=0
virtual void enableMediaRelay(bool enabled)=0
virtual int32_t setEncryptionMode(const char *mode)=0
virtual int sendVideoCustomCtrlBroadcastPacket(video_custom_ctrl_broadcast_packet_t &packet)=0
virtual void setDefaultMuteAllRemoteVideoStreams(bool mute)=0
virtual int unregisterNetworkObserverLLApiInternal(INetworkObserver *observer)=0
virtual base::IAgoraParameter * getAgoraParameterLLApiInternal()=0
virtual void setLocalUserId(user_id_t userId)=0
virtual int disconnectLLApiInternal()=0
virtual int initializeEx(const base::AgoraServiceConfiguration &serviceCfg, const RtcConnectionConfigurationEx &cfg)=0
virtual int stopLastmileProbeTestLLApiInternal()=0
virtual bool isEncryptionEnabled() const =0
virtual const char * getSid()=0
virtual int sendVideoPacket(video_packet_t &packet)=0
virtual void setConnectionState(CONNECTION_STATE_TYPE state)=0
virtual ILocalUserEx * getLocalUserLLApiInternal()=0
virtual int initialize(const base::AgoraServiceConfiguration &serviceCfg, const RtcConnectionConfiguration &cfg)=0
virtual std::string getLocalUserId()=0
virtual int sendWebAgentVideoStats(const std::string &uidstr, const WebAgentVideoStats &stats)=0
virtual int sendControlBroadcastPacket(std::string &&data)=0
virtual uint32_t getCid()=0
virtual int connectLLApiInternal(const char *token, const char *channelId, const char *info, user_id_t userId)=0
virtual int32_t setAudioScenarioType(AUDIO_SCENARIO_TYPE type)=0
virtual CLIENT_ROLE_TYPE getUserRole()=0
virtual int setMediaRenderingTracingTick(uint64_t tick)=0
virtual RtcConnStats GetStats()=0
virtual void muteAllRemoteAudio(bool mute)=0
virtual int sendReport(const void *data, size_t length, int level, int type, int retry, const base::ExtraReportData *extra)=0
virtual int sendStreamMessageLLApiInternal(int streamId, const char *data, size_t length)=0
virtual int sendAudioFrame(SAudioFrame &frame, int delay_ms=0)=0
virtual int setParameters(const std::string &parameters, int priority=50)=0
virtual void setRtcStats(const RtcStats &stats)=0
virtual bool isWebrtcPacerEnabled()=0
virtual int sendMediaControlMessageLLApiInternal(user_id_t userId, const char *data, size_t length)=0
virtual void sendRecordingArgusEvents(const protocol::CmdRecordingEventReportArgus &events)=0
virtual int unregisterObserverLLApiInternal(IRtcConnectionObserver *observer)=0
virtual int sendCustomReportMessageLLApiInternal(const char *id, const char *category, const char *event, const char *label, int value)=0
virtual int32_t setEncryptionSecret(const char *secret)=0
virtual int sendPeerMessage(peer_message_t &message)=0
virtual int32_t enableVosUserInfoHidden(bool enabled)=0
virtual int getParameters(const std::string &parameters, commons::cjson::JsonWrapper &results)=0
virtual bool isConnected()=0
virtual void sendAudioVolumeIndication(const AudioVolumeInfo *speakers, unsigned int speaker_number, int total_volume)=0
virtual void setPacketObserver(IPacketObserver *observer)=0
virtual void setRtmFlag(bool rtmFlag)=0
virtual void setChannelId(const char *channel)=0
virtual int registerObserverLLApiInternal(IRtcConnectionObserver *observer, void(*safeDeleter)(IRtcConnectionObserver *)=NULL)=0
virtual void setUserRole(CLIENT_ROLE_TYPE role)=0
virtual void didStreamMessageSync(uid_t userId, int streamId, const char *data, size_t length, uint64_t sentTs)=0
virtual void setRemoteDefaultVideoStreamType(VIDEO_STREAM_TYPE type)=0
virtual int deinitialize()=0
virtual std::string getAppIdFromToken(const std::string &token)=0
virtual uint32_t getVid()=0
virtual agora::base::IAgoraParameter * getAgoraParameter()=0
virtual void stopAsyncHandler(bool waitForExit)=0
virtual bool getUserId(rtc::uid_t uid, std::string &userId)=0
virtual int reportArgusCounters(int *counterId, int *value, int count, user_id_t userId)=0
virtual void muteRemoteAudio(user_id_t userId, bool mute)=0
virtual void setVos(const char *name, int port)=0
virtual bool isLocalUserId(const std::string &userId)=0
virtual int registerNetworkObserverLLApiInternal(INetworkObserver *observer, void(*safeDeleter)(INetworkObserver *)=NULL)=0
virtual void networkChanged(commons::network::network_info_t &&networkInfo)=0
virtual void setRemoteVideoStreamType(user_id_t userId, VIDEO_STREAM_TYPE type)=0
virtual int sendRdtMessageLLApiInternal(user_id_t userId, RdtStreamType type, const char *data, size_t length)=0
virtual bool hasAudioRemoteTrack(user_id_t id)=0
virtual TConnectionInfo getConnectionInfoLLApiInternal()=0
virtual int32_t enableBuiltInMediaEncryption(bool enabled)=0
virtual VideoPacketFilter * getVideoPacketFilter()=0
virtual void muteLocalAudio(bool mute)=0
virtual int initializeLLApiInternal(const base::AgoraServiceConfiguration &serviceCfg, const RtcConnectionConfiguration &connCfg)=0
virtual uint64_t statsSpace()=0
virtual void setSid(const char *sid)=0
virtual void unsubscribeReceivePacketHandler()=0
virtual CongestionControlType ccType()=0
virtual void setDefaultMuteAllRemoteAudioStreams(bool mute)=0
virtual void muteLocalVideo(bool mute)=0
virtual int createDataStreamLLApiInternal(int *streamId, bool reliable, bool ordered, bool sync)=0
virtual int renewTokenLLApiInternal(const char *token)=0
virtual bool hasVideoRemoteTrack(user_id_t id, uint32_t ssrc)=0
virtual void muteRemoteVideo(user_id_t userId, bool mute)=0
virtual int sendVideoPacketInternal(video_packet_t &packet)=0
virtual void muteAllRemoteVideo(bool mute)=0
virtual int sendCallRating(const std::string &callId, int rating, const std::string &description)=0
virtual int getRemoteUsersLLApiInternal(UserList &users)=0
virtual void setBannedTime(const uint64_t banned_time)=0
virtual bool isLocalUid(uid_t uid)=0
virtual void SetLocalApInfo(const LocalAccessPointInfo &config)=0
virtual int startLastmileProbeTestLLApiInternal(const LastmileProbeConfig &config)=0
virtual void subscribeReceivePacketHandler(ReceivePacketHandler &&handler)=0
Definition NGIAgoraRtcConnection.h:184
Definition NGIAgoraRtcConnection.h:594
Definition IAgoraRtcEngine.h:1580
Definition IAgoraService.h:72
Definition rtc_connection_i.h:28
Definition rtc_connection_i.h:32
Definition agora_log_i.h:14
Definition content_inspect_i.h:15
Definition rtc_connection_i.h:41
CongestionControlType
Definition rtc_connection_i.h:85
@ CONGESTION_CONTROLLER_TYPE_AGORA_CC
Definition rtc_connection_i.h:86
@ CONGESTION_CONTROLLER_TYPE_REMB
Definition rtc_connection_i.h:88
@ CONGESTION_CONTROLLER_TYPE_TRANSPORT_CC
Definition rtc_connection_i.h:90
@ CONGESTION_CONTROLLER_TYPE_AUT_CC
Definition rtc_connection_i.h:92
AUDIO_SCENARIO_TYPE
Definition AgoraBase.h:3042
CLIENT_ROLE_TYPE
Definition AgoraBase.h:2879
CONNECTION_STATE_TYPE
Definition AgoraBase.h:4215
VIDEO_STREAM_TYPE
Definition AgoraBase.h:1613
ConnectionMode
Definition rtc_connection_i.h:95
@ CONNECTION_MODE_ACTIVE
Definition rtc_connection_i.h:98
@ CONNECTION_MODE_PASSIVE
Definition rtc_connection_i.h:102
RdtStreamType
Reliable Data Transmission Tunnel message stream type.
Definition AgoraBase.h:7418
static const uint8_t AUDIO_MEDIA_PACKET_PAYLOAD_TYPE
Definition rtc_connection_i.h:59
unsigned int uid_t
Definition AgoraMediaBase.h:28
Definition AgoraAtomicOps.h:21
util::AList< UserInfo > UserList
Definition AgoraBase.h:880
const char * user_id_t
Definition AgoraBase.h:853
CHANNEL_PROFILE_TYPE
Definition AgoraBase.h:267
Definition video_node_i.h:28
Definition AgoraOptional.h:881
Definition IAgoraService.h:82
Definition AgoraMediaBase.h:322
Definition audio_node_stat_i.h:32
Definition AgoraBase.h:3772
Definition AgoraBase.h:2927
Definition AgoraBase.h:6811
Definition AgoraBase.h:4688
bool encrypted
Definition rtc_connection_i.h:73
uint8_t payload_type
Definition rtc_connection_i.h:63
PacketOptions()
Definition rtc_connection_i.h:76
uint32_t ssrc
Definition rtc_connection_i.h:68
AudioFrameHandleInfo handle_info
Definition rtc_connection_i.h:66
bool with_agora_header
Definition rtc_connection_i.h:75
bool rsfec
Definition rtc_connection_i.h:65
Definition rtc_connection_i.h:143
std::function< int(video_custom_ctrl_broadcast_packet_t &)> onVideoCustomCtrlPacketType
Definition rtc_connection_i.h:148
onAudioFrameType onAudioFrame_
Definition rtc_connection_i.h:156
std::function< int(const peer_message_t &)> onPeerMessageType
Definition rtc_connection_i.h:147
ReceivePacketHandler(onAudioPacketType &&onAudioPacket=nullptr, onVideoPacketType &&onVideoPacket=nullptr, onControlBroadcastPacketType &&onControlBroadcastPacket=nullptr, onPeerMessageType &&onPeerMessagePacket=nullptr, onVideoCustomCtrlPacketType &&onVideoCustomCtrlPacket=nullptr, onAudioFrameType &&onAudioFrame=nullptr)
Definition rtc_connection_i.h:157
onVideoPacketType onVideoPacket_
Definition rtc_connection_i.h:152
std::function< int(video_packet_t &)> onVideoPacketType
Definition rtc_connection_i.h:145
ReceivePacketHandler(ReceivePacketHandler &&rhs)
Definition rtc_connection_i.h:169
onAudioPacketType onAudioPacket_
Definition rtc_connection_i.h:151
std::function< int(control_broadcast_packet_t &)> onControlBroadcastPacketType
Definition rtc_connection_i.h:146
std::function< int(SAudioFrame &)> onAudioFrameType
Definition rtc_connection_i.h:149
std::function< int(audio_packet_t &)> onAudioPacketType
Definition rtc_connection_i.h:144
onVideoCustomCtrlPacketType onVideoCustomCtrlPacket_
Definition rtc_connection_i.h:155
onPeerMessageType onPeerMessagePacket_
Definition rtc_connection_i.h:154
onControlBroadcastPacketType onControlBroadcastPacket_
Definition rtc_connection_i.h:153
Definition rtc_connection_i.h:178
uint64_t space_id
Definition rtc_connection_i.h:181
RtcStats stats
Definition rtc_connection_i.h:179
uint64_t banned_elapse
Definition rtc_connection_i.h:180
Definition rtc_connection_i.h:105
std::list< std::string > vosList
Definition rtc_connection_i.h:140
Optional< conn_id_t > connId
Definition rtc_connection_i.h:138
bool is_p2p_switch_enabled
Definition rtc_connection_i.h:139
RtcConnectionConfigurationEx()
Definition rtc_connection_i.h:106
int clientType
Definition rtc_connection_i.h:137
Definition NGIAgoraRtcConnection.h:90
bool autoSubscribeAudio
Definition NGIAgoraRtcConnection.h:96
bool audioRecvMediaPacket
Definition NGIAgoraRtcConnection.h:137
RtcConnectionConfiguration()
Definition NGIAgoraRtcConnection.h:158
bool isDataChannelOnly
Definition NGIAgoraRtcConnection.h:156
int maxSendBitrate
Definition NGIAgoraRtcConnection.h:112
int maxPort
Definition NGIAgoraRtcConnection.h:120
CHANNEL_PROFILE_TYPE channelProfile
Definition NGIAgoraRtcConnection.h:127
int minPort
Definition NGIAgoraRtcConnection.h:116
bool videoRecvMediaPacket
Definition NGIAgoraRtcConnection.h:142
bool isInteractiveAudience
Definition NGIAgoraRtcConnection.h:151
bool enableAudioRecordingOrPlayout
Definition NGIAgoraRtcConnection.h:108
bool audioRecvEncodedFrame
Definition NGIAgoraRtcConnection.h:132
bool autoSubscribeVideo
Definition NGIAgoraRtcConnection.h:102
Definition AgoraBase.h:2672
Definition packet_i.h:64
Definition NGIAgoraRtcConnection.h:55
Definition NGIAgoraRtcConnection.h:26
Definition rtc_engine_i.h:360
Definition packet_i.h:151
Definition packet_i.h:293
Definition packet_i.h:163