Agora C++ API Reference for All Platforms
|
12 #include <unordered_map>
15 #include "AgoraBase.h"
16 #include "NGIAgoraVideoTrack.h"
17 #include "api/transport/network_types.h"
18 #include "call/rtp_config.h"
20 #include "rtc_connection_i.h"
21 #include "track_stat_i.h"
22 #include "video_config_i.h"
23 #include "common_defines.h"
24 #include "video_node_i.h"
25 #include "absl/types/optional.h"
28 class IFecMethodFactoryInterface;
29 class IRsfecCodecFactoryInterface;
56 template <
typename Observer>
62 bool add(std::shared_ptr<Observer> obs) {
67 std::lock_guard<std::mutex> _(obs_mutex_);
68 observer_map_[obs.get()] = obs;
73 std::lock_guard<std::mutex> _(obs_mutex_);
74 return observer_map_.size();
83 std::lock_guard<std::mutex> _(obs_mutex_);
84 if (observer_map_.find(obs) == observer_map_.end()) {
88 observer_map_.erase(obs);
92 void notify(std::function<
void (std::shared_ptr<Observer>)>&&
notify) {
93 std::vector<std::shared_ptr<Observer>> obs_copy;
96 std::lock_guard<std::mutex> _(obs_mutex_);
98 for (
auto it = observer_map_.begin(); it != observer_map_.end();) {
99 auto obs_shared = it->second.lock();
101 it = observer_map_.erase(it);
105 obs_copy.push_back(obs_shared);
110 for (
auto obs : obs_copy) {
116 std::mutex obs_mutex_;
117 std::unordered_map<Observer*, std::weak_ptr<Observer>> observer_map_;
124 class VideoNodeRtpSink;
125 class VideoNodeRtpSource;
126 class VideoTrackConfigurator;
159 int width,
int height,
160 int rotation,
int timestamp_ms) {}
233 virtual int GetConfigExs(std::vector<VideoConfigurationEx>& configs) = 0;
284 static std::atomic<int> id_generator_;
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:309
int size()
Definition: video_track_i.h:72
webrtc::FecConfig fec_config
Definition: video_track_i.h:203
@ CONFIG_PRIORITY_USER
Definition: video_track_i.h:48
InternalVideoSourceType
Definition: video_track_i.h:128
LOCAL_VIDEO_STREAM_STATE
Definition: AgoraBase.h:2543
virtual int32_t Width() const =0
virtual int SetVideoConfigEx(const VideoConfigurationEx &configEx, utils::ConfigPriority priority=utils::CONFIG_PRIORITY_USER)=0
uint64_t firstDecodingTimeTickMs
Definition: video_track_i.h:288
@ TRACK_DESTROY
Definition: video_track_i.h:175
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:279
virtual bool getStatisticsEx(LocalVideoTrackStatsEx &statsEx)=0
@ NETWORK_DESTROY
Definition: video_track_i.h:295
Definition: video_track_i.h:168
@ CONFIG_PRIORITY_DEBUG
Definition: video_track_i.h:38
Definition: common_defines.h:11
int MinHoldtimeAutoResizeZoomout
Definition: video_track_i.h:189
int TrackId() const
Definition: video_track_i.h:270
@ MANUAL
Definition: video_track_i.h:175
virtual int addVideoWatermark(const char *watermarkUrl, const WatermarkOptions &options)
Definition: video_track_i.h:261
WeakPipelineBuilder builder
Definition: video_track_i.h:301
virtual void onSourceVideoSizeChanged(uid_t uid, int width, int height, int rotation, int timestamp_ms)
Definition: video_track_i.h:158
Definition: video_track_i.h:185
virtual bool attach(const AttachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
VQCParametersCollection vqc_parameters
Definition: video_track_i.h:210
virtual void onFirstVideoFrameRendered(uid_t uid, int width, int height, int timestamp_ms)
Definition: video_track_i.h:154
int sent_loss_ratio
Definition: video_track_i.h:170
webrtc::CongestionControllerConfig cc_config
Definition: video_track_i.h:201
IRemoteVideoTrackEx()=default
void notify(std::function< void(std::shared_ptr< Observer >)> &¬ify)
Definition: video_track_i.h:92
std::vector< int > fec_protection_factor
Definition: video_track_i.h:179
StateEvents< REMOTE_VIDEO_STATE, REMOTE_VIDEO_STATE_REASON > RemoteVideoEvents
Definition: video_track_i.h:296
absl::optional< uint32_t > hw_encoder_width_alignment
Definition: video_track_i.h:216
virtual void onFirstVideoFrameDecoded(uid_t uid, int width, int height, int timestamp_ms)
Definition: video_track_i.h:156
REMOTE_VIDEO_STATE_REASON
Definition: AgoraBase.h:2693
virtual void onRemoteVideoStateChanged(uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int timestamp_ms)
Definition: video_track_i.h:149
virtual void onRecvSideDelay(uid_t uid, int recv_delay)
Definition: video_track_i.h:162
virtual VideoTrackConfigurator * GetVideoTrackConfigurator()
Definition: video_track_i.h:264
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:324
std::vector< std::vector< int > > fec_ratioLevel
Definition: video_track_i.h:180
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:332
virtual int getObserverSize()
Definition: video_track_i.h:239
Definition: AgoraAtomicOps.h:21
uid_t user_id_
Definition: video_track_i.h:280
std::string hw_encoder_provider
Definition: video_track_i.h:207
@ CustomEncodedImageSource
int MinFramerate
Definition: video_track_i.h:187
REMOTE_VIDEO_STATE
Definition: AgoraBase.h:2665
virtual void onEncoderConfigurationChanged(int width, int height, int fps, int framerate)
Definition: video_track_i.h:164
Definition: video_track_i.h:287
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:251
Definition: video_track_i.h:173
Definition: video_track_i.h:307
VideoNodeRtpSource * source
Definition: video_track_i.h:299
uint32_t uid
Definition: video_track_i.h:195
uint32_t cid
Definition: video_track_i.h:196
std::vector< int > fec_rttThreshold
Definition: video_track_i.h:181
virtual void onLocalVideoStateChanged(int id, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_ERROR errorCode, int timestamp_ms)
Definition: video_track_i.h:144
virtual ~IVideoTrackObserver()=default
uint64_t stats_space
Definition: video_track_i.h:199
int IosH265Adjust
Definition: video_track_i.h:191
virtual void onRecvSideFps(uid_t uid, int fps)
Definition: video_track_i.h:163
Definition: video_track_i.h:298
bool add(std::shared_ptr< Observer > obs)
Definition: video_track_i.h:62
Definition: video_track_i.h:221
@ MANUAL
Definition: video_track_i.h:295
DetachReason reason
Definition: video_track_i.h:223
Definition: NGIAgoraVideoTrack.h:245
int MinHoldtimeAutoResizeZoomin
Definition: video_track_i.h:188
WeakPipelineBuilder builder
Definition: video_track_i.h:198
@ NETWORK_DESTROY
Definition: video_track_i.h:175
void setUniqueId(const std::string &unique_id)
Definition: video_track_i.h:272
std::string enable_hw_encoder
Definition: video_track_i.h:206
std::shared_ptr< webrtc::IRsfecCodecFactoryInterface > rsfec_codec_factory
Definition: video_track_i.h:304
virtual int setUserId(uid_t uid)
Definition: video_track_i.h:235
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:327
@ CONFIG_PRIORITY_NORMAL_FROM_SERVER
Definition: video_track_i.h:50
VideoNodeRtpSink * network
Definition: video_track_i.h:222
@ CONFIG_PRIORITY_DEVICE
Definition: video_track_i.h:40
int largest_ref_distance
Definition: video_track_i.h:215
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:300
bool enable_two_bytes_extension
Definition: video_track_i.h:202
@ CONFIG_PRIORITY_HIGH_FROM_SERVER
Definition: video_track_i.h:44
Definition: video_config_i.h:25
std::string unique_id_
Definition: video_track_i.h:281
std::vector< StateEvent< STATE_TYPE, REASON_TYPE > > StateEvents
Definition: track_stat_i.h:21
LOCAL_VIDEO_STREAM_ERROR
Definition: AgoraBase.h:2565
virtual bool attach(const AttachInfo &info)=0
bool QuickAdaptNetwork
Definition: video_track_i.h:186
Definition: video_track_i.h:293
virtual int32_t Height() const =0
virtual InternalVideoSourceType getInternalVideoSourceType()
Definition: video_track_i.h:268
ConfigPriority
Definition: video_track_i.h:35
@ TRACK_DESTROY
Definition: video_track_i.h:295
virtual uid_t getUserId()
Definition: video_track_i.h:237
virtual bool Enabled() const =0
CongestionControlType cc_type
Definition: video_track_i.h:200
absl::optional< bool > hw_encoder_force_alignment
Definition: video_track_i.h:218
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:496
virtual ~ILocalVideoTrackEx()
Definition: video_track_i.h:227
Definition: NGIAgoraVideoTrack.h:401
DetachReason
Definition: video_track_i.h:295
virtual bool detach(const DetachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
CongestionControlType
Definition: rtc_connection_i.h:75
@ CONFIG_PRIORITY_MAX
Definition: video_track_i.h:53
virtual int clearVideoWatermarks()
Definition: video_track_i.h:262
Definition: AgoraBase.h:2013
Definition: NGIAgoraVideoTrack.h:325
@ CONFIG_PRIORITY_LUA
Definition: video_track_i.h:46
int fec_method
Definition: video_track_i.h:212
Definition: video_track_i.h:194
virtual bool hasPublished()=0
virtual int prepareNodes()=0
bool recv_media_packet
Definition: video_track_i.h:302
virtual uint32_t getRemoteSsrc()=0
absl::optional< uint32_t > hw_encoder_height_alignment
Definition: video_track_i.h:217
int32_t dmfec_minimum_level
Definition: video_track_i.h:214
LocalVideoTrackStats local_video_stats
Definition: video_track_i.h:169
virtual int GetActiveStreamsCount()=0
static void resetIdGenerator()
bool remove(Observer *obs)
Definition: video_track_i.h:78
DetachReason
Definition: video_track_i.h:175
VideoNodeRtpSource * source
Definition: video_track_i.h:308
uint64_t stats_space
Definition: video_track_i.h:303
bool isHardwareCodec
Definition: video_track_i.h:290
@ CONFIG_PRIORITY_INTERNAL
Definition: video_track_i.h:52
virtual void onCameraFacingChanged(int facing)
Definition: video_track_i.h:165
unsigned int uid_t
Definition: AgoraMediaBase.h:25
bool pec_enabled
Definition: video_track_i.h:182
Definition: video_track_i.h:57
virtual ~IRemoteVideoTrackEx()
Definition: video_track_i.h:315
Definition: video_track_i.h:141
virtual int GetConfigExs(std::vector< VideoConfigurationEx > &configs)=0
uint64_t firstVideoFrameRendered
Definition: video_track_i.h:289
VideoNodeRtpSink * network
Definition: video_track_i.h:197
int dm_wsize
Definition: video_track_i.h:213
ILocalVideoTrackEx()
Definition: video_track_i.h:226
virtual bool getStatisticsEx(RemoteVideoTrackStatsEx &statsex)
Definition: video_track_i.h:322
virtual void onSendSideDelay(int id, int send_delay)
Definition: video_track_i.h:161
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:248
Definition: video_node_i.h:27
int QpAdjust
Definition: video_track_i.h:190
int id_
Definition: video_track_i.h:278
Definition: video_track_i.h:178
Definition: NGIAgoraVideoTrack.h:153
virtual bool detach(const DetachInfo &info)=0
DetachReason reason
Definition: video_track_i.h:310
std::weak_ptr< webrtc::Call > WeakPipelineBuilder
Definition: common_defines.h:19