Agora C++ API Reference for All Platforms
|
12 #include <unordered_map>
15 #include "AgoraBase.h"
16 #include "AgoraMediaBase.h"
17 #include "AgoraOptional.h"
18 #include "NGIAgoraVideoTrack.h"
19 #include "api/transport/network_types.h"
20 #include "api/video/video_content_type.h"
21 #include "call/rtp_config.h"
23 #include "rtc_connection_i.h"
24 #include "track_stat_i.h"
25 #include "video_config_i.h"
26 #include "common_defines.h"
27 #include "video_node_i.h"
28 #include "utils/thread/base_worker.h"
29 #include "utils/thread/thread_control_block.h"
30 #include "main/core/video/multi_stream_subscribe_interface.h"
31 #include "facilities/media_config/policy_chain/media_config_policy_chain.h"
32 #include <utils/object/object_table.h>
34 class IFecMethodFactoryInterface;
36 class IRsfecCodecFactoryInterface;
37 class IAutoAdjustHarq;
43 template <
typename Observer>
49 bool add(std::shared_ptr<Observer> obs) {
54 std::lock_guard<std::mutex> _(obs_mutex_);
55 observer_map_[obs.get()] = obs;
60 std::lock_guard<std::mutex> _(obs_mutex_);
61 return observer_map_.size();
70 std::lock_guard<std::mutex> _(obs_mutex_);
71 if (observer_map_.find(obs) == observer_map_.end()) {
75 observer_map_.erase(obs);
79 void notify(std::function<
void(std::shared_ptr<Observer>)>&&
notify, worker_type worker =
nullptr) {
80 std::vector<std::shared_ptr<Observer>> obs_copy;
83 std::lock_guard<std::mutex> _(obs_mutex_);
85 for (
auto it = observer_map_.begin(); it != observer_map_.end();) {
86 auto obs_shared = it->second.lock();
88 it = observer_map_.erase(it);
92 obs_copy.push_back(obs_shared);
97 if (worker ==
nullptr) {
98 for (
auto obs : obs_copy) {
102 std::vector<std::weak_ptr<Observer>> weak_obs_copy;
103 for (
auto obs : obs_copy) {
104 weak_obs_copy.push_back(obs);
107 worker->async_call(LOCATION_HERE, [weak_obs_copy,
notify] {
108 for (
auto obs : weak_obs_copy) {
109 auto obs_shared = obs.lock();
119 std::mutex obs_mutex_;
120 std::unordered_map<Observer*, std::weak_ptr<Observer>> observer_map_;
127 class VideoNodeRtpSink;
128 class VideoNodeRtpSource;
129 class VideoTrackConfigurator;
222 int width,
int height,
223 int rotation,
int timestamp_ms) {}
370 virtual int GetConfigExs(std::vector<VideoConfigurationEx>& configs) = 0;
434 static std::atomic<int> id_generator_;
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:473
int size()
Definition: video_track_i.h:59
std::string vqcResAdjustNumList
Definition: video_track_i.h:282
InternalVideoSourceType
Definition: video_track_i.h:131
LOCAL_VIDEO_STREAM_STATE
Definition: AgoraBase.h:2751
int32_t fec_outside_bandwidth_ratio
Definition: video_track_i.h:314
bool vqcFluencyMode
Definition: video_track_i.h:264
std::string hw_encoder_fotmat_config
Definition: video_track_i.h:348
virtual int32_t Width() const =0
int decode_level[10]
Definition: video_track_i.h:449
std::shared_ptr< webrtc::IAutoAdjustHarq > auto_adjust_harq
Definition: video_track_i.h:312
virtual int SetVideoConfigEx(const VideoConfigurationEx &configEx, utils::ConfigPriority priority=utils::CONFIG_PRIORITY_USER)=0
uint64_t firstDecodingTimeTickMs
Definition: video_track_i.h:438
int fec_fix_rate
Definition: video_track_i.h:327
int start_framerate
Definition: video_track_i.h:279
int vqcAdjustStep
Definition: video_track_i.h:277
@ kVideoProcessEventPreprocessNoIncomingFrame
Definition: video_track_i.h:172
@ TRACK_DESTROY
Definition: video_track_i.h:251
VideoProcessEvent
Definition: video_track_i.h:166
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:429
uint32_t render_out_num
Definition: video_track_i.h:445
virtual void onRemoteAddVideoFilter(std::string cid, uid_t uid, uint32_t ssrc, std::string filter_name, bool enabled)
Definition: video_track_i.h:240
@ VideoAvailabilityLevel1
Definition: video_track_i.h:155
uint32_t fec_pkts_num
Definition: video_track_i.h:446
int frame_max_size
Definition: video_track_i.h:274
@ NETWORK_DESTROY
Definition: video_track_i.h:456
virtual void onViewSizeChanged(uid_t uid, agora::utils::object_handle view, int width, int height)
Definition: video_track_i.h:229
SCREEN_SCENARIO_TYPE
Definition: AgoraBase.h:2634
@ kVideoProcessEventNone
Definition: video_track_i.h:167
Optional< uint32_t > hw_encoder_height_alignment
Definition: video_track_i.h:343
Definition: video_track_i.h:244
virtual void onVideoSizeChanged(int id, uid_t uid, int width, int height, int rotation)
Definition: video_track_i.h:236
int dm_maxgc
Definition: video_track_i.h:322
Optional< SIMULCAST_STREAM_MODE > cfg_simulcast_stream_mode
Definition: video_track_i.h:354
VideoDumpMode
Definition: video_track_i.h:182
Definition: common_defines.h:11
int TrackId() const
Definition: video_track_i.h:418
Optional< bool > low_stream_enable_hw_encoder
Definition: video_track_i.h:306
@ MANUAL
Definition: video_track_i.h:251
int screenShareDetailMaxQP
Definition: video_track_i.h:265
@ kVideoProcessEventPreprocessFrameFailure
Definition: video_track_i.h:171
virtual int addVideoWatermark(const char *watermarkUrl, const WatermarkOptions &options)
Definition: video_track_i.h:403
WeakPipelineBuilder builder
Definition: video_track_i.h:462
Optional< uint32_t > hw_enc_hevc_exceptions
Definition: video_track_i.h:349
VideoCodecAvailableEvent
Definition: video_track_i.h:177
virtual int registerVideoEncodedImageReceiver(media::IVideoEncodedFrameObserver *videoReceiver)
Definition: video_track_i.h:422
virtual int prepareNodes(const char *id=nullptr)=0
virtual void onSourceVideoSizeChanged(uid_t uid, int width, int height, int rotation, int timestamp_ms)
Definition: video_track_i.h:221
virtual void onVideoAvailabilityIndicatorEvent(VideoAvailabilityIndicator indicator)
Definition: video_track_i.h:235
virtual void AddVideoAvailabilityIndicatorEvents(VideoAvailabilityIndicator event)
Definition: video_track_i.h:372
bool lowFrameRateMode
Definition: video_track_i.h:278
VideoAvailabilityLevel
Definition: video_track_i.h:154
@ VIDEO_DUMP_RECEIVED_STREAM
Definition: video_track_i.h:187
virtual bool attach(const AttachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
int sent_loss_ratio
Definition: video_track_i.h:246
int vqcLowbitrateThreshold
Definition: video_track_i.h:280
webrtc::CongestionControllerConfig cc_config
Definition: video_track_i.h:299
IRemoteVideoTrackEx()=default
Definition: AgoraBase.h:1700
bool enable_minor_stream_fec
Definition: video_track_i.h:316
@ VideoModuleEncode
Definition: video_track_i.h:146
bool QuickAdaptNetwork
Definition: video_track_i.h:262
virtual void onFirstVideoFrameRendered(int id, uid_t uid, int width, int height, int timestamp_ms)
Definition: video_track_i.h:213
std::vector< int > fec_protection_factor
Definition: video_track_i.h:255
int MinHoldtimeAutoResizeZoomin
Definition: video_track_i.h:268
bool enable_quick_intra_high_fec
Definition: video_track_i.h:330
StateEvents< REMOTE_VIDEO_STATE, REMOTE_VIDEO_STATE_REASON > RemoteVideoEvents
Definition: video_track_i.h:457
virtual void onVideoContentChanged(uid_t uid, agora::VideoContentType newType, agora::VideoContentSubType newSubtype)
Definition: video_track_i.h:219
REMOTE_VIDEO_STATE_REASON
Definition: AgoraBase.h:2974
@ VideoModuleRender
Definition: video_track_i.h:150
virtual void onFirstVideoFrameDecoded(std::string cid, uid_t uid, uint32_t ssrc, int width, int height, int timestamp_ms)
Definition: video_track_i.h:215
virtual void OnRexferStatusUpdated(bool status, int32_t target_bitrate)
Definition: video_track_i.h:231
virtual void onRemoteVideoStateChanged(uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int timestamp_ms)
Definition: video_track_i.h:208
virtual void onRecvSideDelay(uid_t uid, int recv_delay)
Definition: video_track_i.h:225
@ VideoAvailabilityLevel2
Definition: video_track_i.h:156
virtual VideoTrackConfigurator * GetVideoTrackConfigurator()
Definition: video_track_i.h:406
virtual void OnRequestCodecFallback()
Definition: video_track_i.h:232
int max_qp
Definition: video_track_i.h:273
absl::optional< int > max_inflight_frame_count_pre_processsing
Definition: video_track_i.h:331
Optional< int > minscore_for_swh265enc
Definition: video_track_i.h:307
bool enable_minor_stream_vqc
Definition: video_track_i.h:315
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:488
bool dm_lowred
Definition: video_track_i.h:324
Optional< uint32_t > av_enc_bitrate_adjustment_type
Definition: video_track_i.h:336
virtual void onEncoderConfigurationChanged(const std::vector< VideoConfigurationEx > &config)
Definition: video_track_i.h:227
std::vector< std::vector< int > > fec_ratioLevel
Definition: video_track_i.h:256
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:496
std::vector< CameraInfo > CameraInfoList
Definition: video_node_i.h:267
virtual int getObserverSize()
Definition: video_track_i.h:382
Definition: AgoraAtomicOps.h:21
uid_t user_id_
Definition: video_track_i.h:430
std::string hw_encoder_provider
Definition: video_track_i.h:305
virtual int unregisterVideoEncodedImageReceiver(media::IVideoEncodedFrameObserver *videoReceiver)
Definition: video_track_i.h:424
@ kVideoProcessEventPreprocessEnqueueFailure
Definition: video_track_i.h:170
std::string vqcAv1Qpadjust
Definition: video_track_i.h:285
@ CustomEncodedImageSource
int min_qp
Definition: video_track_i.h:272
REMOTE_VIDEO_STATE
Definition: AgoraBase.h:2945
void notify(std::function< void(std::shared_ptr< Observer >)> &¬ify, worker_type worker=nullptr)
Definition: video_track_i.h:79
bool disable_rewrite_num_reorder_frame
Definition: video_track_i.h:466
Definition: video_track_i.h:437
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:394
uid_t uid
Definition: video_track_i.h:196
Definition: video_track_i.h:249
Definition: video_track_i.h:471
VideoNodeRtpSource * source
Definition: video_track_i.h:460
uint32_t uid
Definition: video_track_i.h:293
virtual void GetVideoAvailabilityIndicatorEvents(std::vector< VideoAvailabilityIndicator > &events)
Definition: video_track_i.h:374
uint32_t cid
Definition: video_track_i.h:294
std::vector< int > fec_rttThreshold
Definition: video_track_i.h:257
uint32_t render_in_num
Definition: video_track_i.h:444
virtual void onLocalVideoStateChanged(int id, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_ERROR errorCode, int timestamp_ms)
Definition: video_track_i.h:203
virtual ~IVideoTrackObserver()=default
uint64_t stats_space
Definition: video_track_i.h:297
virtual rtc::VideoEncoderConfiguration getVideoEncoderConfiguration()
Definition: video_track_i.h:412
virtual void onRecvSideFps(uid_t uid, int fps)
Definition: video_track_i.h:226
@ VideoModulePipeline
Definition: video_track_i.h:151
Definition: video_track_i.h:459
@ VIDEO_DUMP_FILTERED_YUV
Definition: video_track_i.h:185
int IosH265Adjust
Definition: video_track_i.h:271
bool add(std::shared_ptr< Observer > obs)
Definition: video_track_i.h:49
Definition: video_track_i.h:358
uint8_t negotiated_video_decode_caps
Definition: video_track_i.h:346
int extra
Definition: video_track_i.h:197
@ MANUAL
Definition: video_track_i.h:456
DetachReason reason
Definition: video_track_i.h:360
virtual void ReconfigureFecMethod(int fec_method, int dmec_version, int fec_mul_rdc)=0
Definition: NGIAgoraVideoTrack.h:292
webrtc::RsfecConfig rsfec_config
Definition: video_track_i.h:301
int vqcSwH264Qpadjust
Definition: video_track_i.h:283
@ VIDEO_DUMP_CAPTURED_YUV
Definition: video_track_i.h:184
WeakPipelineBuilder builder
Definition: video_track_i.h:296
int lowFpsThres
Definition: video_track_i.h:288
virtual int setLocalVideoSend(bool send)=0
@ VIDEO_DUMP_RENDERED_YUV
Definition: video_track_i.h:189
@ NETWORK_DESTROY
Definition: video_track_i.h:251
int lowLoadEstimateThres
Definition: video_track_i.h:286
@ VideoModuleDecode
Definition: video_track_i.h:148
void setUniqueId(const std::string &unique_id)
Definition: video_track_i.h:420
int highFpsThres
Definition: video_track_i.h:289
const int id_
Definition: video_track_i.h:428
int64_t totalFrozen200ms
Definition: video_track_i.h:441
std::string enable_hw_encoder
Definition: video_track_i.h:304
int jitter_offset_ms
Definition: video_track_i.h:448
std::shared_ptr< webrtc::IRsfecCodecFactoryInterface > rsfec_codec_factory
Definition: video_track_i.h:467
virtual int setUserId(uid_t uid)
Definition: video_track_i.h:378
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:491
VideoNodeRtpSink * network
Definition: video_track_i.h:359
OPSParametersCollection ops_parameters
Definition: video_track_i.h:310
int QpAdjust
Definition: video_track_i.h:270
int largest_ref_distance
Definition: video_track_i.h:328
std::shared_ptr< webrtc::IFecMethodFactoryInterface > fec_method_factory
Definition: video_track_i.h:311
@ kVideoHwH264EncoderHighProfileAvailable
Definition: video_track_i.h:179
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:461
bool enable_two_bytes_extension
Definition: video_track_i.h:300
int vqcChangeResoType
Definition: video_track_i.h:281
Definition: video_config_i.h:25
bool enable_minor_stream_fec_outside_ratio
Definition: video_track_i.h:317
std::string unique_id_
Definition: video_track_i.h:431
std::vector< StateEvent< STATE_TYPE, REASON_TYPE > > StateEvents
Definition: track_stat_i.h:21
uint32_t dec_in_num
Definition: video_track_i.h:443
virtual void onRemoteFilterStatusChanged(std::string cid, uid_t uid, uint32_t ssrc, std::string filter_name, bool enabled)
Definition: video_track_i.h:241
LOCAL_VIDEO_STREAM_ERROR
Definition: AgoraBase.h:2774
virtual void onLocalFilterStatusChanged(int track_id, std::string filter_name, bool enabled)
Definition: video_track_i.h:239
virtual bool attach(const AttachInfo &info)=0
int lowBitrateCoeffForAutoResize
Definition: video_track_i.h:275
Definition: video_track_i.h:454
VideoModuleId
Definition: video_track_i.h:143
webrtc::ISmoothRender * smooth_render
Definition: video_track_i.h:465
VideoAvailabilityLevel level
Definition: video_track_i.h:193
virtual int32_t Height() const =0
virtual InternalVideoSourceType getInternalVideoSourceType()
Definition: video_track_i.h:410
@ TRACK_DESTROY
Definition: video_track_i.h:456
virtual int updateContentHint(VIDEO_CONTENT_HINT contentHint)
Definition: video_track_i.h:414
virtual uid_t getUserId()
Definition: video_track_i.h:380
virtual bool Enabled() const =0
CongestionControlType cc_type
Definition: video_track_i.h:298
Optional< uint32_t > av_enc_intra_key_interval
Definition: video_track_i.h:334
int hw_capture_delay
Definition: video_track_i.h:351
@ VideoModulePostprocess
Definition: video_track_i.h:149
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:474
virtual ~ILocalVideoTrackEx()
Definition: video_track_i.h:364
Definition: NGIAgoraVideoTrack.h:455
std::string switch_to_rq
Definition: video_track_i.h:323
DetachReason
Definition: video_track_i.h:456
VideoModuleId module
Definition: video_track_i.h:194
virtual bool detach(const DetachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
virtual void onLocalAddVideoFilter(int track_id, std::string filter_name, bool enabled)
Definition: video_track_i.h:238
int MinHoldtimeAutoResizeZoomout
Definition: video_track_i.h:269
@ kVideoProcessEventPreprocessCongested
Definition: video_track_i.h:173
bool support_higher_standard_bitrate
Definition: video_track_i.h:355
CongestionControlType
Definition: rtc_connection_i.h:78
virtual int clearVideoWatermarks()
Definition: video_track_i.h:404
Definition: AgoraBase.h:1987
@ kVideoHwH265EncoderAvailable
Definition: video_track_i.h:178
Definition: NGIAgoraVideoTrack.h:359
@ kVideoUplinkEventStaticFrames
Definition: video_track_i.h:162
int fec_method
Definition: video_track_i.h:320
Definition: video_track_i.h:292
virtual bool hasPublished()=0
bool recv_media_packet
Definition: video_track_i.h:463
virtual void OnSetRexferParams(bool fec_rexfer, float rexfer_alpha)
Definition: video_track_i.h:230
int highBitrateCoeffForAutoResize
Definition: video_track_i.h:276
virtual uint32_t getRemoteSsrc()=0
int max_packet_size
Definition: video_track_i.h:340
virtual bool getStatisticsEx(LocalVideoTrackStatsEx &statsEx)
Definition: video_track_i.h:398
bool screenShareDetail
Definition: video_track_i.h:263
int harq_version
Definition: video_track_i.h:313
@ VideoAvailabilityLevel3
Definition: video_track_i.h:157
LocalVideoTrackStats local_video_stats
Definition: video_track_i.h:245
std::string vqcVpxQpadjust
Definition: video_track_i.h:284
int code
Definition: video_track_i.h:195
uint32_t video_threshhold_ms
Definition: video_track_i.h:468
virtual int GetActiveStreamsCount()=0
bool remove(Observer *obs)
Definition: video_track_i.h:65
DetachReason
Definition: video_track_i.h:251
VideoNodeRtpSource * source
Definition: video_track_i.h:472
uint64_t stats_space
Definition: video_track_i.h:464
virtual void OnNotifyDepartedFrame(uid_t uid, int picture_id)
Definition: video_track_i.h:233
int highLoadEstimateThres
Definition: video_track_i.h:287
bool isHardwareCodec
Definition: video_track_i.h:440
Definition: video_track_i.h:261
VIDEO_CONTENT_HINT
Definition: AgoraBase.h:2612
virtual void onCameraFacingChanged(int facing)
Definition: video_track_i.h:228
uint32_t sync_peer_uid
Definition: video_track_i.h:352
unsigned int uid_t
Definition: AgoraMediaBase.h:29
bool pec_enabled
Definition: video_track_i.h:258
Definition: video_track_i.h:44
int screenShareDetailMinQP
Definition: video_track_i.h:266
@ VIDEO_DUMP_DECODED_YUV
Definition: video_track_i.h:188
bool enable_video_send_diagnose
Definition: video_track_i.h:339
uint32_t last_frame_max
Definition: video_track_i.h:442
virtual ~IRemoteVideoTrackEx()
Definition: video_track_i.h:479
Definition: video_track_i.h:200
VideoPipelineEvent
Definition: video_track_i.h:161
virtual int GetConfigExs(std::vector< VideoConfigurationEx > &configs)=0
uint64_t firstVideoFrameRendered
Definition: video_track_i.h:439
virtual void onCameraInfoListChanged(CameraInfoList cameraInfoList)
Definition: video_track_i.h:234
@ VIDEO_DUMP_DEFAULT
Definition: video_track_i.h:183
uint32_t loss_af_fec
Definition: video_track_i.h:447
int MinFramerate
Definition: video_track_i.h:267
VideoNodeRtpSink * network
Definition: video_track_i.h:295
std::vector< VideoAvailabilityIndicator > video_availability
Definition: video_track_i.h:451
int dm_wsize
Definition: video_track_i.h:321
ILocalVideoTrackEx()
Definition: video_track_i.h:363
virtual bool getStatisticsEx(RemoteVideoTrackStatsEx &statsex)
Definition: video_track_i.h:486
@ VIDEO_DUMP_ENCODED_STREAM
Definition: video_track_i.h:186
int32_t minimum_fec_level
Definition: video_track_i.h:326
virtual void onSendSideDelay(int id, int send_delay)
Definition: video_track_i.h:224
uint64_t qp_sum
Definition: video_track_i.h:450
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:391
Definition: video_node_i.h:25
virtual void onFirstVideoKeyFrameReceived(uid_t uid, uint64_t timestamp, const webrtc::FirstVideoFrameStreamInfo &streamInfo)
Definition: video_track_i.h:217
@ VideoModulePreprocess
Definition: video_track_i.h:145
bool enable_check_for_disable_fec
Definition: video_track_i.h:329
Optional< bool > hw_encoder_force_alignment
Definition: video_track_i.h:344
bool enable_minor_stream_intra_request
Definition: video_track_i.h:318
Definition: video_track_i.h:254
@ VideoModuleNetwork
Definition: video_track_i.h:147
Definition: NGIAgoraVideoTrack.h:154
virtual int updateScreenCaptureScenario(SCREEN_SCENARIO_TYPE screenScenario)
Definition: video_track_i.h:416
virtual bool detach(const DetachInfo &info)=0
@ VideoModuleCapture
Definition: video_track_i.h:144
DetachReason reason
Definition: video_track_i.h:474
Optional< uint32_t > hw_encoder_width_alignment
Definition: video_track_i.h:342
Definition: video_track_i.h:192
std::weak_ptr< webrtc::Call > WeakPipelineBuilder
Definition: common_defines.h:19