Agora C++ API Reference for All Platforms
video_track_i.h
1 //
2 // Agora Media SDK
3 //
4 // Created by Rao Qi in 2019.
5 // Copyright (c) 2019 Agora IO. All rights reserved.
6 //
7 #pragma once
8 
9 #include <atomic>
10 #include <memory>
11 #include <mutex>
12 #include <unordered_map>
13 #include <vector>
14 
15 #include "AgoraBase.h"
16 #include "NGIAgoraVideoTrack.h"
17 #include "api/transport/network_types.h"
18 #include "call/rtp_config.h"
19 
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"
26 
27 namespace webrtc {
28  class IFecMethodFactoryInterface;
29  class IRsfecCodecFactoryInterface;
30 }
31 
32 namespace agora {
33 namespace utils {
34 
36  // configurations for debugging, which can overwrite anything
37  // usually used by dev/lab tuning
39  // configurations from device capability detection
41  // configurations for emergency, this will overwrite user configuration.
42  // for cases like "close XXX feature immediately otherwise terrible things happen"
43  // do not use this priority level unless review board approved
45  // configurations from lua script
47  // configurations from user setting
49  // configurations from "config service".
51  // configurations from internal (usually it's default value)
54 };
55 
56 template <typename Observer>
58  public:
59  WeakObservers() = default;
60  ~WeakObservers() = default;
61 
62  bool add(std::shared_ptr<Observer> obs) {
63  if (!obs) {
64  return false;
65  }
66 
67  std::lock_guard<std::mutex> _(obs_mutex_);
68  observer_map_[obs.get()] = obs;
69  return true;
70  }
71 
72  int size() {
73  std::lock_guard<std::mutex> _(obs_mutex_);
74  return observer_map_.size();
75  }
76 
77  // better to remove by raw pointer since we may unregister() -> remove() in DTOR
78  bool remove(Observer* obs) {
79  if (!obs) {
80  return false;
81  }
82 
83  std::lock_guard<std::mutex> _(obs_mutex_);
84  if (observer_map_.find(obs) == observer_map_.end()) {
85  return false;
86  }
87 
88  observer_map_.erase(obs);
89  return true;
90  }
91 
92  void notify(std::function<void (std::shared_ptr<Observer>)>&& notify) {
93  std::vector<std::shared_ptr<Observer>> obs_copy;
94 
95  {
96  std::lock_guard<std::mutex> _(obs_mutex_);
97 
98  for (auto it = observer_map_.begin(); it != observer_map_.end();) {
99  auto obs_shared = it->second.lock();
100  if (!obs_shared) {
101  it = observer_map_.erase(it);
102  continue;
103  }
104 
105  obs_copy.push_back(obs_shared);
106  ++it;
107  }
108  }
109 
110  for (auto obs : obs_copy) {
111  notify(obs);
112  }
113  }
114 
115  private:
116  std::mutex obs_mutex_;
117  std::unordered_map<Observer*, std::weak_ptr<Observer>> observer_map_;
118 };
119 
120 } // namespace utils
121 
122 namespace rtc {
123 
124 class VideoNodeRtpSink;
125 class VideoNodeRtpSource;
126 class VideoTrackConfigurator;
127 
128 enum class InternalVideoSourceType : unsigned {
129  None = 0,
130  Camera = 1,
131  // Not used in NG SDK
132  Custom = 2,
133  Screen = 3,
134  CustomYuvSource = 4,
136  CustomPacketSource = 6,
137  MixedSource = 7,
138  TranscodedSource = 8,
139 };
140 
141 class IVideoTrackObserver : public std::enable_shared_from_this<IVideoTrackObserver> {
142  public:
143  virtual ~IVideoTrackObserver() = default;
144  virtual void onLocalVideoStateChanged(int id,
146  LOCAL_VIDEO_STREAM_ERROR errorCode,
147  int timestamp_ms) {}
148 
150  REMOTE_VIDEO_STATE state,
152  int timestamp_ms) {}
153 
154  virtual void onFirstVideoFrameRendered(uid_t uid, int width, int height, int timestamp_ms) {}
155 
156  virtual void onFirstVideoFrameDecoded(uid_t uid, int width, int height, int timestamp_ms) {}
157 
158  virtual void onSourceVideoSizeChanged(uid_t uid,
159  int width, int height,
160  int rotation, int timestamp_ms) {}
161  virtual void onSendSideDelay(int id, int send_delay) {}
162  virtual void onRecvSideDelay(uid_t uid, int recv_delay) {}
163  virtual void onRecvSideFps(uid_t uid, int fps) {}
164  virtual void onEncoderConfigurationChanged(int width, int height, int fps, int framerate) {}
165  virtual void onCameraFacingChanged(int facing) {}
166 };
167 
171 };
172 
174  public:
176 
177  // keep the same as webrtc::RsfecConfig
178  struct RsfecConfig {
179  std::vector<int> fec_protection_factor;
180  std::vector<std::vector<int>> fec_ratioLevel;
181  std::vector<int> fec_rttThreshold;
183  };
184 
190  int QpAdjust;
192  };
193 
194  struct AttachInfo {
195  uint32_t uid;
196  uint32_t cid;
197  VideoNodeRtpSink* network;
199  uint64_t stats_space;
201  webrtc::CongestionControllerConfig cc_config;
203  webrtc::FecConfig fec_config;
204 
205  //hardware encoder related
206  std::string enable_hw_encoder;
207  std::string hw_encoder_provider;
208 
209  //video config
211 
213  int dm_wsize;
216  absl::optional<uint32_t> hw_encoder_width_alignment;
217  absl::optional<uint32_t> hw_encoder_height_alignment;
218  absl::optional<bool> hw_encoder_force_alignment;
219  };
220 
221  struct DetachInfo {
222  VideoNodeRtpSink* network;
224  };
225 
226  ILocalVideoTrackEx() : id_(id_generator_++) {}
227  virtual ~ILocalVideoTrackEx() {}
228 
229  virtual bool hasPublished() = 0;
230 
232 
233  virtual int GetConfigExs(std::vector<VideoConfigurationEx>& configs) = 0;
234 
235  virtual int setUserId(uid_t uid) { user_id_ = uid; return 0; }
236 
237  virtual uid_t getUserId() { return user_id_; }
238 
239  virtual int getObserverSize() { return track_observers_.size(); }
240 
241  virtual int GetActiveStreamsCount() = 0;
242 
243  virtual int prepareNodes() = 0;
244 
245  virtual bool attach(const AttachInfo& info) = 0;
246  virtual bool detach(const DetachInfo& info) = 0;
247 
248  virtual bool registerTrackObserver(std::shared_ptr<IVideoTrackObserver> observer) {
249  return false;
250  }
252  return false;
253  }
254 
255  virtual bool getStatisticsEx(LocalVideoTrackStatsEx& statsEx) = 0;
256 
257  virtual int32_t Width() const = 0;
258  virtual int32_t Height() const = 0;
259  virtual bool Enabled() const = 0;
260  // TODO(Qingyou Pan): Need refine code to remove this interface.
261  virtual int addVideoWatermark(const char* watermarkUrl, const WatermarkOptions& options) { return -ERR_NOT_SUPPORTED; };
262  virtual int clearVideoWatermarks() { return -ERR_NOT_SUPPORTED; }
263 
264  virtual VideoTrackConfigurator* GetVideoTrackConfigurator() {
265  return nullptr;
266  }
267 
269 
270  int TrackId() const { return id_; }
271 
272  void setUniqueId(const std::string& unique_id) { unique_id_ = unique_id; }
273 
274  public:
275  static void resetIdGenerator();
276 
277  protected:
278  int id_;
281  std::string unique_id_;
282 
283  private:
284  static std::atomic<int> id_generator_;
285 };
286 
290  bool isHardwareCodec = false;
291 };
292 
294  public:
297 
298  struct AttachInfo {
299  VideoNodeRtpSource* source;
300  VideoNodeRtpSink* rtcp_sender;
302  bool recv_media_packet = false;
303  uint64_t stats_space = 0;
304  std::shared_ptr<webrtc::IRsfecCodecFactoryInterface> rsfec_codec_factory;
305  };
306 
307  struct DetachInfo {
308  VideoNodeRtpSource* source;
309  VideoNodeRtpSink* rtcp_sender;
311  };
312 
313  IRemoteVideoTrackEx() = default;
314 
315  virtual ~IRemoteVideoTrackEx() {}
316 
317  virtual uint32_t getRemoteSsrc() = 0;
318 
319  virtual bool attach(const AttachInfo& info, REMOTE_VIDEO_STATE_REASON reason) = 0;
320  virtual bool detach(const DetachInfo& info, REMOTE_VIDEO_STATE_REASON reason) = 0;
321 
322  virtual bool getStatisticsEx(RemoteVideoTrackStatsEx& statsex) { return false; }
323 
324  virtual bool registerTrackObserver(std::shared_ptr<IVideoTrackObserver> observer) {
325  return false;
326  }
328  return false;
329  }
330 
331  protected:
333 };
334 
335 } // namespace rtc
336 } // namespace agora
agora::rtc::IRemoteVideoTrackEx::DetachInfo::rtcp_sender
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:309
agora::utils::WeakObservers::size
int size()
Definition: video_track_i.h:72
agora::rtc::ILocalVideoTrackEx::AttachInfo::fec_config
webrtc::FecConfig fec_config
Definition: video_track_i.h:203
agora::utils::CONFIG_PRIORITY_USER
@ CONFIG_PRIORITY_USER
Definition: video_track_i.h:48
agora::rtc::InternalVideoSourceType
InternalVideoSourceType
Definition: video_track_i.h:128
agora::rtc::LOCAL_VIDEO_STREAM_STATE
LOCAL_VIDEO_STREAM_STATE
Definition: AgoraBase.h:2543
agora::rtc::ILocalVideoTrackEx::Width
virtual int32_t Width() const =0
agora::rtc::ILocalVideoTrackEx::SetVideoConfigEx
virtual int SetVideoConfigEx(const VideoConfigurationEx &configEx, utils::ConfigPriority priority=utils::CONFIG_PRIORITY_USER)=0
agora::rtc::InternalVideoSourceType::MixedSource
@ MixedSource
agora::rtc::RemoteVideoTrackStatsEx::firstDecodingTimeTickMs
uint64_t firstDecodingTimeTickMs
Definition: video_track_i.h:288
agora::rtc::ILocalVideoTrackEx::TRACK_DESTROY
@ TRACK_DESTROY
Definition: video_track_i.h:175
agora::rtc::ILocalVideoTrackEx::track_observers_
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:279
agora::rtc::ILocalVideoTrackEx::getStatisticsEx
virtual bool getStatisticsEx(LocalVideoTrackStatsEx &statsEx)=0
agora::rtc::IRemoteVideoTrackEx::NETWORK_DESTROY
@ NETWORK_DESTROY
Definition: video_track_i.h:295
agora::rtc::LocalVideoTrackStatsEx
Definition: video_track_i.h:168
agora::utils::CONFIG_PRIORITY_DEBUG
@ CONFIG_PRIORITY_DEBUG
Definition: video_track_i.h:38
webrtc
Definition: common_defines.h:11
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::MinHoldtimeAutoResizeZoomout
int MinHoldtimeAutoResizeZoomout
Definition: video_track_i.h:189
agora::rtc::ILocalVideoTrackEx::TrackId
int TrackId() const
Definition: video_track_i.h:270
agora::rtc::ILocalVideoTrackEx::MANUAL
@ MANUAL
Definition: video_track_i.h:175
agora::rtc::ILocalVideoTrackEx::addVideoWatermark
virtual int addVideoWatermark(const char *watermarkUrl, const WatermarkOptions &options)
Definition: video_track_i.h:261
agora::rtc::IRemoteVideoTrackEx::AttachInfo::builder
WeakPipelineBuilder builder
Definition: video_track_i.h:301
agora::rtc::IVideoTrackObserver::onSourceVideoSizeChanged
virtual void onSourceVideoSizeChanged(uid_t uid, int width, int height, int rotation, int timestamp_ms)
Definition: video_track_i.h:158
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection
Definition: video_track_i.h:185
agora::rtc::IRemoteVideoTrackEx::attach
virtual bool attach(const AttachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
agora::rtc::ILocalVideoTrackEx::AttachInfo::vqc_parameters
VQCParametersCollection vqc_parameters
Definition: video_track_i.h:210
agora::rtc::IVideoTrackObserver::onFirstVideoFrameRendered
virtual void onFirstVideoFrameRendered(uid_t uid, int width, int height, int timestamp_ms)
Definition: video_track_i.h:154
agora::rtc::LocalVideoTrackStatsEx::sent_loss_ratio
int sent_loss_ratio
Definition: video_track_i.h:170
agora::rtc::ILocalVideoTrackEx::AttachInfo::cc_config
webrtc::CongestionControllerConfig cc_config
Definition: video_track_i.h:201
agora::rtc::IRemoteVideoTrackEx::IRemoteVideoTrackEx
IRemoteVideoTrackEx()=default
agora::utils::WeakObservers::notify
void notify(std::function< void(std::shared_ptr< Observer >)> &&notify)
Definition: video_track_i.h:92
agora::rtc::ILocalVideoTrackEx::RsfecConfig::fec_protection_factor
std::vector< int > fec_protection_factor
Definition: video_track_i.h:179
agora::rtc::InternalVideoSourceType::Screen
@ Screen
agora::rtc::IRemoteVideoTrackEx::RemoteVideoEvents
StateEvents< REMOTE_VIDEO_STATE, REMOTE_VIDEO_STATE_REASON > RemoteVideoEvents
Definition: video_track_i.h:296
agora::rtc::ILocalVideoTrackEx::AttachInfo::hw_encoder_width_alignment
absl::optional< uint32_t > hw_encoder_width_alignment
Definition: video_track_i.h:216
agora::rtc::IVideoTrackObserver::onFirstVideoFrameDecoded
virtual void onFirstVideoFrameDecoded(uid_t uid, int width, int height, int timestamp_ms)
Definition: video_track_i.h:156
agora::rtc::REMOTE_VIDEO_STATE_REASON
REMOTE_VIDEO_STATE_REASON
Definition: AgoraBase.h:2693
agora::rtc::IVideoTrackObserver::onRemoteVideoStateChanged
virtual void onRemoteVideoStateChanged(uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int timestamp_ms)
Definition: video_track_i.h:149
agora::rtc::IVideoTrackObserver::onRecvSideDelay
virtual void onRecvSideDelay(uid_t uid, int recv_delay)
Definition: video_track_i.h:162
agora::utils::WeakObservers::~WeakObservers
~WeakObservers()=default
agora::rtc::ILocalVideoTrackEx::GetVideoTrackConfigurator
virtual VideoTrackConfigurator * GetVideoTrackConfigurator()
Definition: video_track_i.h:264
agora::rtc::IRemoteVideoTrackEx::registerTrackObserver
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:324
agora::rtc::ILocalVideoTrackEx::RsfecConfig::fec_ratioLevel
std::vector< std::vector< int > > fec_ratioLevel
Definition: video_track_i.h:180
agora::rtc::IRemoteVideoTrackEx::track_observers_
utils::WeakObservers< IVideoTrackObserver > track_observers_
Definition: video_track_i.h:332
agora::rtc::ILocalVideoTrackEx::getObserverSize
virtual int getObserverSize()
Definition: video_track_i.h:239
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::ILocalVideoTrackEx::user_id_
uid_t user_id_
Definition: video_track_i.h:280
agora::rtc::ILocalVideoTrackEx::AttachInfo::hw_encoder_provider
std::string hw_encoder_provider
Definition: video_track_i.h:207
agora::rtc::InternalVideoSourceType::CustomEncodedImageSource
@ CustomEncodedImageSource
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::MinFramerate
int MinFramerate
Definition: video_track_i.h:187
agora::rtc::REMOTE_VIDEO_STATE
REMOTE_VIDEO_STATE
Definition: AgoraBase.h:2665
agora::rtc::IVideoTrackObserver::onEncoderConfigurationChanged
virtual void onEncoderConfigurationChanged(int width, int height, int fps, int framerate)
Definition: video_track_i.h:164
agora::rtc::RemoteVideoTrackStatsEx
Definition: video_track_i.h:287
agora::rtc::ILocalVideoTrackEx::unregisterTrackObserver
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:251
agora::rtc::ILocalVideoTrackEx
Definition: video_track_i.h:173
agora::rtc::IRemoteVideoTrackEx::DetachInfo
Definition: video_track_i.h:307
agora::rtc::IRemoteVideoTrackEx::AttachInfo::source
VideoNodeRtpSource * source
Definition: video_track_i.h:299
agora::rtc::ILocalVideoTrackEx::AttachInfo::uid
uint32_t uid
Definition: video_track_i.h:195
agora::rtc::ILocalVideoTrackEx::AttachInfo::cid
uint32_t cid
Definition: video_track_i.h:196
agora::rtc::ILocalVideoTrackEx::RsfecConfig::fec_rttThreshold
std::vector< int > fec_rttThreshold
Definition: video_track_i.h:181
agora::rtc::IVideoTrackObserver::onLocalVideoStateChanged
virtual void onLocalVideoStateChanged(int id, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_ERROR errorCode, int timestamp_ms)
Definition: video_track_i.h:144
agora::rtc::IVideoTrackObserver::~IVideoTrackObserver
virtual ~IVideoTrackObserver()=default
agora::rtc::ILocalVideoTrackEx::AttachInfo::stats_space
uint64_t stats_space
Definition: video_track_i.h:199
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::IosH265Adjust
int IosH265Adjust
Definition: video_track_i.h:191
agora::rtc::IVideoTrackObserver::onRecvSideFps
virtual void onRecvSideFps(uid_t uid, int fps)
Definition: video_track_i.h:163
agora::rtc::IRemoteVideoTrackEx::AttachInfo
Definition: video_track_i.h:298
agora::utils::WeakObservers::add
bool add(std::shared_ptr< Observer > obs)
Definition: video_track_i.h:62
agora::rtc::ILocalVideoTrackEx::DetachInfo
Definition: video_track_i.h:221
agora::rtc::IRemoteVideoTrackEx::MANUAL
@ MANUAL
Definition: video_track_i.h:295
agora::rtc::ILocalVideoTrackEx::DetachInfo::reason
DetachReason reason
Definition: video_track_i.h:223
agora::rtc::ILocalVideoTrack
Definition: NGIAgoraVideoTrack.h:245
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::MinHoldtimeAutoResizeZoomin
int MinHoldtimeAutoResizeZoomin
Definition: video_track_i.h:188
agora::rtc::ILocalVideoTrackEx::AttachInfo::builder
WeakPipelineBuilder builder
Definition: video_track_i.h:198
agora::rtc::ILocalVideoTrackEx::NETWORK_DESTROY
@ NETWORK_DESTROY
Definition: video_track_i.h:175
agora::rtc::ILocalVideoTrackEx::setUniqueId
void setUniqueId(const std::string &unique_id)
Definition: video_track_i.h:272
agora::rtc::ILocalVideoTrackEx::AttachInfo::enable_hw_encoder
std::string enable_hw_encoder
Definition: video_track_i.h:206
agora::rtc::IRemoteVideoTrackEx::AttachInfo::rsfec_codec_factory
std::shared_ptr< webrtc::IRsfecCodecFactoryInterface > rsfec_codec_factory
Definition: video_track_i.h:304
agora::rtc::ILocalVideoTrackEx::setUserId
virtual int setUserId(uid_t uid)
Definition: video_track_i.h:235
agora::rtc::IRemoteVideoTrackEx::unregisterTrackObserver
virtual bool unregisterTrackObserver(IVideoTrackObserver *observer)
Definition: video_track_i.h:327
agora::utils::CONFIG_PRIORITY_NORMAL_FROM_SERVER
@ CONFIG_PRIORITY_NORMAL_FROM_SERVER
Definition: video_track_i.h:50
agora::rtc::ILocalVideoTrackEx::DetachInfo::network
VideoNodeRtpSink * network
Definition: video_track_i.h:222
agora::utils::CONFIG_PRIORITY_DEVICE
@ CONFIG_PRIORITY_DEVICE
Definition: video_track_i.h:40
agora::rtc::InternalVideoSourceType::None
@ None
agora::rtc::ILocalVideoTrackEx::AttachInfo::largest_ref_distance
int largest_ref_distance
Definition: video_track_i.h:215
agora::rtc::IRemoteVideoTrackEx::AttachInfo::rtcp_sender
VideoNodeRtpSink * rtcp_sender
Definition: video_track_i.h:300
agora::rtc::ILocalVideoTrackEx::AttachInfo::enable_two_bytes_extension
bool enable_two_bytes_extension
Definition: video_track_i.h:202
agora::utils::CONFIG_PRIORITY_HIGH_FROM_SERVER
@ CONFIG_PRIORITY_HIGH_FROM_SERVER
Definition: video_track_i.h:44
agora::rtc::VideoConfigurationEx
Definition: video_config_i.h:25
agora::rtc::ILocalVideoTrackEx::unique_id_
std::string unique_id_
Definition: video_track_i.h:281
agora::rtc::StateEvents
std::vector< StateEvent< STATE_TYPE, REASON_TYPE > > StateEvents
Definition: track_stat_i.h:21
agora::rtc::LOCAL_VIDEO_STREAM_ERROR
LOCAL_VIDEO_STREAM_ERROR
Definition: AgoraBase.h:2565
agora::rtc::ILocalVideoTrackEx::attach
virtual bool attach(const AttachInfo &info)=0
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::QuickAdaptNetwork
bool QuickAdaptNetwork
Definition: video_track_i.h:186
agora::rtc::IRemoteVideoTrackEx
Definition: video_track_i.h:293
agora::rtc::ILocalVideoTrackEx::Height
virtual int32_t Height() const =0
agora::rtc::ILocalVideoTrackEx::getInternalVideoSourceType
virtual InternalVideoSourceType getInternalVideoSourceType()
Definition: video_track_i.h:268
agora::utils::ConfigPriority
ConfigPriority
Definition: video_track_i.h:35
agora::rtc::IRemoteVideoTrackEx::TRACK_DESTROY
@ TRACK_DESTROY
Definition: video_track_i.h:295
agora::rtc::ILocalVideoTrackEx::getUserId
virtual uid_t getUserId()
Definition: video_track_i.h:237
agora::rtc::ILocalVideoTrackEx::Enabled
virtual bool Enabled() const =0
agora::rtc::ILocalVideoTrackEx::AttachInfo::cc_type
CongestionControlType cc_type
Definition: video_track_i.h:200
agora::rtc::ILocalVideoTrackEx::AttachInfo::hw_encoder_force_alignment
absl::optional< bool > hw_encoder_force_alignment
Definition: video_track_i.h:218
agora::ERR_NOT_SUPPORTED
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:496
agora::rtc::ILocalVideoTrackEx::~ILocalVideoTrackEx
virtual ~ILocalVideoTrackEx()
Definition: video_track_i.h:227
agora::rtc::IRemoteVideoTrack
Definition: NGIAgoraVideoTrack.h:401
agora::rtc::InternalVideoSourceType::TranscodedSource
@ TranscodedSource
agora::rtc::IRemoteVideoTrackEx::DetachReason
DetachReason
Definition: video_track_i.h:295
agora::rtc::IRemoteVideoTrackEx::detach
virtual bool detach(const DetachInfo &info, REMOTE_VIDEO_STATE_REASON reason)=0
agora::rtc::CongestionControlType
CongestionControlType
Definition: rtc_connection_i.h:75
agora::utils::CONFIG_PRIORITY_MAX
@ CONFIG_PRIORITY_MAX
Definition: video_track_i.h:53
agora::rtc::ILocalVideoTrackEx::clearVideoWatermarks
virtual int clearVideoWatermarks()
Definition: video_track_i.h:262
agora::rtc::WatermarkOptions
Definition: AgoraBase.h:2013
agora::rtc::RemoteVideoTrackStats
Definition: NGIAgoraVideoTrack.h:325
agora::utils::CONFIG_PRIORITY_LUA
@ CONFIG_PRIORITY_LUA
Definition: video_track_i.h:46
agora::rtc::ILocalVideoTrackEx::AttachInfo::fec_method
int fec_method
Definition: video_track_i.h:212
agora::rtc::ILocalVideoTrackEx::AttachInfo
Definition: video_track_i.h:194
agora::rtc::ILocalVideoTrackEx::hasPublished
virtual bool hasPublished()=0
agora::rtc::ILocalVideoTrackEx::prepareNodes
virtual int prepareNodes()=0
agora::rtc::IRemoteVideoTrackEx::AttachInfo::recv_media_packet
bool recv_media_packet
Definition: video_track_i.h:302
agora::rtc::IRemoteVideoTrackEx::getRemoteSsrc
virtual uint32_t getRemoteSsrc()=0
agora::rtc::InternalVideoSourceType::Custom
@ Custom
agora::rtc::ILocalVideoTrackEx::AttachInfo::hw_encoder_height_alignment
absl::optional< uint32_t > hw_encoder_height_alignment
Definition: video_track_i.h:217
agora::rtc::ILocalVideoTrackEx::AttachInfo::dmfec_minimum_level
int32_t dmfec_minimum_level
Definition: video_track_i.h:214
agora::rtc::LocalVideoTrackStatsEx::local_video_stats
LocalVideoTrackStats local_video_stats
Definition: video_track_i.h:169
agora::rtc::InternalVideoSourceType::CustomPacketSource
@ CustomPacketSource
agora::rtc::ILocalVideoTrackEx::GetActiveStreamsCount
virtual int GetActiveStreamsCount()=0
agora::rtc::ILocalVideoTrackEx::resetIdGenerator
static void resetIdGenerator()
agora::utils::WeakObservers::remove
bool remove(Observer *obs)
Definition: video_track_i.h:78
agora::rtc::ILocalVideoTrackEx::DetachReason
DetachReason
Definition: video_track_i.h:175
agora::rtc::IRemoteVideoTrackEx::DetachInfo::source
VideoNodeRtpSource * source
Definition: video_track_i.h:308
agora::rtc::IRemoteVideoTrackEx::AttachInfo::stats_space
uint64_t stats_space
Definition: video_track_i.h:303
agora::rtc::RemoteVideoTrackStatsEx::isHardwareCodec
bool isHardwareCodec
Definition: video_track_i.h:290
agora::utils::CONFIG_PRIORITY_INTERNAL
@ CONFIG_PRIORITY_INTERNAL
Definition: video_track_i.h:52
agora::rtc::IVideoTrackObserver::onCameraFacingChanged
virtual void onCameraFacingChanged(int facing)
Definition: video_track_i.h:165
agora::rtc::uid_t
unsigned int uid_t
Definition: AgoraMediaBase.h:25
agora::rtc::ILocalVideoTrackEx::RsfecConfig::pec_enabled
bool pec_enabled
Definition: video_track_i.h:182
agora::utils::WeakObservers
Definition: video_track_i.h:57
agora::rtc::IRemoteVideoTrackEx::~IRemoteVideoTrackEx
virtual ~IRemoteVideoTrackEx()
Definition: video_track_i.h:315
agora::rtc::IVideoTrackObserver
Definition: video_track_i.h:141
agora::utils::WeakObservers::WeakObservers
WeakObservers()=default
agora::rtc::ILocalVideoTrackEx::GetConfigExs
virtual int GetConfigExs(std::vector< VideoConfigurationEx > &configs)=0
agora::rtc::RemoteVideoTrackStatsEx::firstVideoFrameRendered
uint64_t firstVideoFrameRendered
Definition: video_track_i.h:289
agora::rtc::InternalVideoSourceType::Camera
@ Camera
agora::rtc::ILocalVideoTrackEx::AttachInfo::network
VideoNodeRtpSink * network
Definition: video_track_i.h:197
agora::rtc::ILocalVideoTrackEx::AttachInfo::dm_wsize
int dm_wsize
Definition: video_track_i.h:213
agora::rtc::ILocalVideoTrackEx::ILocalVideoTrackEx
ILocalVideoTrackEx()
Definition: video_track_i.h:226
agora::rtc::IRemoteVideoTrackEx::getStatisticsEx
virtual bool getStatisticsEx(RemoteVideoTrackStatsEx &statsex)
Definition: video_track_i.h:322
agora::rtc::IVideoTrackObserver::onSendSideDelay
virtual void onSendSideDelay(int id, int send_delay)
Definition: video_track_i.h:161
agora::rtc::ILocalVideoTrackEx::registerTrackObserver
virtual bool registerTrackObserver(std::shared_ptr< IVideoTrackObserver > observer)
Definition: video_track_i.h:248
rtc
Definition: video_node_i.h:27
agora::rtc::ILocalVideoTrackEx::VQCParametersCollection::QpAdjust
int QpAdjust
Definition: video_track_i.h:190
agora::rtc::ILocalVideoTrackEx::id_
int id_
Definition: video_track_i.h:278
agora::rtc::ILocalVideoTrackEx::RsfecConfig
Definition: video_track_i.h:178
agora::rtc::InternalVideoSourceType::CustomYuvSource
@ CustomYuvSource
agora::rtc::LocalVideoTrackStats
Definition: NGIAgoraVideoTrack.h:153
agora::rtc::ILocalVideoTrackEx::detach
virtual bool detach(const DetachInfo &info)=0
agora::rtc::IRemoteVideoTrackEx::DetachInfo::reason
DetachReason reason
Definition: video_track_i.h:310
agora::rtc::WeakPipelineBuilder
std::weak_ptr< webrtc::Call > WeakPipelineBuilder
Definition: common_defines.h:19