Agora Java API Reference for Android
NGIAgoraVideoTrack.h
1 // Copyright (c) 2019 Agora.io. All rights reserved
2 
3 // This program is confidential and proprietary to Agora.io.
4 // And may not be copied, reproduced, modified, disclosed to others, published
5 // or used, in whole or in part, without the express prior written permission
6 // of Agora.io.
7 
8 #pragma once // NOLINT(build/header_guard)
9 
10 #include "AgoraBase.h"
11 #include <api/aosl_ref.h>
12 
13 #ifndef OPTIONAL_OVERRIDE
14 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
15 #define OPTIONAL_OVERRIDE override
16 #else
17 #define OPTIONAL_OVERRIDE
18 #endif
19 #endif
20 
21 namespace agora {
22 namespace rtc {
23 class IVideoFilter;
24 class IVideoEncodedFrameObserver;
25 class IMediaPacketReceiver;
26 class IVideoSinkBase;
27 
28 enum StreamLayerIndexInternal {
29  STREAM_LAYER_1 = 1,
30  STREAM_LAYER_2 = 2,
31  STREAM_LAYER_3 = 3,
32  STREAM_LAYER_4 = 4,
33  STREAM_LAYER_5 = 5,
34  STREAM_LAYER_6 = 6,
35  STREAM_LOW = 7,
36  STREAM_LAYER_COUNT_MAX = 8
37  };
38 
40  VideoDimensions dimensions;
41  int framerate;
42  int bitrate_kbps;
43  bool enable;
44  StreamLayerConfigInternal() : dimensions(0, 0), framerate(0), bitrate_kbps(STANDARD_BITRATE), enable(false) {}
45  StreamLayerConfigInternal(const StreamLayerConfigInternal& other) : dimensions(other.dimensions), framerate(other.framerate), bitrate_kbps(other.bitrate_kbps), enable(other.enable) {}
46  bool operator==(const StreamLayerConfigInternal& rhs) const {
47  return dimensions == rhs.dimensions && bitrate_kbps == rhs.bitrate_kbps && framerate == rhs.framerate && enable == rhs.enable;
48  }
49 
51  dimensions = slc.dimensions;
52  framerate = slc.framerate;
53  enable = slc.enable;
54  return *this;
55  }
56 
57  void reset() {
58  dimensions.width = 0;
59  dimensions.height = 0;
60  framerate = 0;
61  bitrate_kbps = STANDARD_BITRATE;
62  enable = false;
63  }
64 };
65 
67  StreamLayerConfigInternal simulcastlayerConfigs[STREAM_LAYER_COUNT_MAX];
68 
69  bool publish_fallback_enable;
70  bool publish_on_demand;
71 
72  void reset() {
73  for (int i = STREAM_LAYER_1; i < STREAM_LAYER_COUNT_MAX; i++) {
74  simulcastlayerConfigs[i].reset();
75  }
76  }
77 
78  bool operator==(const SimulcastConfigInternal& rhs) const {
79  for (int i = 0; i < STREAM_LAYER_COUNT_MAX; i++) {
80  if (simulcastlayerConfigs[i] == rhs.simulcastlayerConfigs[i]) {
81  continue;
82  }
83  return false;
84  }
85  return publish_fallback_enable == rhs.publish_fallback_enable &&
86  publish_on_demand == rhs.publish_on_demand;
87  }
88 
89  SimulcastConfigInternal(): publish_fallback_enable(false), publish_on_demand(true) {}
90 };
91 
92 enum VideoTrackType {
93  LOCAL_VIDEO_TRACK,
94  REMOTE_VIDEO_TRACK,
95  REMOTE_VIDEO_IMAGE_TRACK,
96 };
97 
102  public:
120  virtual bool addVideoFilter(
121  agora_refptr<IVideoFilter> filter, media::base::VIDEO_MODULE_POSITION position = media::base::POSITION_POST_CAPTURER,
122  const char* id = NULL, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
123 
134  virtual bool removeVideoFilter(
135  agora_refptr<IVideoFilter> filter, media::base::VIDEO_MODULE_POSITION position = media::base::POSITION_POST_CAPTURER,
136  const char* id = NULL, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
137 
145  virtual bool hasVideoFilter(const char* id, media::base::VIDEO_MODULE_POSITION position = media::base::POSITION_POST_CAPTURER) = 0;
146 
161  virtual bool addRenderer(agora_refptr<IVideoSinkBase> videoRenderer, media::base::VIDEO_MODULE_POSITION position, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
171  virtual bool removeRenderer(agora_refptr<IVideoSinkBase> videoRenderer, media::base::VIDEO_MODULE_POSITION position, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
177  virtual VideoTrackType getType() = 0;
178 
187  virtual int enableVideoFilter(const char* id, bool enable, aosl_ref_t ares = AOSL_REF_INVALID) { return -1; }
188 
198  virtual int setFilterProperty(const char* id, const char* key, const char* json_value, aosl_ref_t ares = AOSL_REF_INVALID) { return -1; }
199 
209  virtual int getFilterProperty(const char* id, const char* key, char* json_value, size_t buf_size, aosl_ref_t ares = AOSL_REF_INVALID) { return -1; }
210 
223  virtual int registerVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver* encodedObserver, aosl_ref_t ares = AOSL_REF_INVALID) {return -1;};
232 
233  protected:
234  ~IVideoTrack() {}
235 };
236 
238  int width;
239  int height;
240  int framerate;
241  int bitrate;
242 };
262  uint32_t frames_encoded;
302  int total_bitrate_bps; // Include FEC
322  int width;
326  int height;
327  uint32_t encoder_type;
328  uint32_t hw_encoder_accelerating;
329  uint32_t encoder_frame_depth;
330  /*
331  * encoder vender id, VideoCodecVenderId
332  */
333  uint32_t encoder_vender_id;
341  QUALITY_ADAPT_INDICATION quality_adapt_indication;
345  unsigned short txPacketLossRate;
346 
349  CAPTURE_BRIGHTNESS_LEVEL_TYPE capture_brightness_level;
350 
351  SimulcastStreamProfile simulcast_stream_profile[STREAM_LAYER_COUNT_MAX];
352 
356  frames_encoded(0),
361  input_frame_rate(0),
367  capture_width(0),
368  capture_height(0),
371  width(0),
372  height(0),
373  encoder_type(0),
374  hw_encoder_accelerating(0),
375  encoder_frame_depth(8),
376  encoder_vender_id(0),
378  quality_adapt_indication(ADAPT_NONE),
379  txPacketLossRate(0),
380  capture_brightness_level(CAPTURE_BRIGHTNESS_LEVEL_INVALID) {}
381 };
382 
395  public:
405  virtual int setEnabled(bool enable, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
406 
423  virtual int setVideoEncoderConfiguration(const VideoEncoderConfiguration& config, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
424 
434  virtual int setSimulcastStreamMode(SIMULCAST_STREAM_MODE mode, const SimulcastConfigInternal& config, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
435 
441  virtual LOCAL_VIDEO_STREAM_STATE getState() = 0;
442 
451  virtual bool getStatistics(LocalVideoTrackStats& stats) = 0;
452 
453  virtual VideoTrackType getType() OPTIONAL_OVERRIDE { return LOCAL_VIDEO_TRACK; }
454 
455  protected:
456  ~ILocalVideoTrack() {}
457 };
465  uid_t uid;
469  int delay;
473  int e2eDelay;
477  int width;
481  int height;
504  VIDEO_STREAM_TYPE rxStreamType;
518  uint32_t received_bytes;
541  uint64_t totalActiveTime;
545  uint64_t publishDuration;
549  int vqa_mos;
561  uint32_t decoder_type;
562 
563  RemoteVideoTrackStats() : uid(0), delay(0), width(0), height(0),
565  frameLossRate(0), packetLossRate(0), rxStreamType(VIDEO_STREAM_HIGH),
569 };
570 
575  public:
583  virtual bool getStatistics(RemoteVideoTrackStats& stats) = 0;
588  virtual REMOTE_VIDEO_STATE getState() = 0;
596  virtual bool getTrackInfo(VideoTrackInfo& info) = 0;
597 
610  virtual int registerMediaPacketReceiver(IMediaPacketReceiver* videoReceiver, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
618  virtual int unregisterMediaPacketReceiver(IMediaPacketReceiver* videoReceiver) = 0;
619 
620  virtual VideoTrackType getType() OPTIONAL_OVERRIDE { return REMOTE_VIDEO_TRACK; }
621 
622  protected:
623  ~IRemoteVideoTrack() {}
624 };
625 
626 } // namespace rtc
627 } // namespace agora
agora::rtc::LocalVideoTrackStats::frames_encoded
uint32_t frames_encoded
Definition: NGIAgoraVideoTrack.h:262
agora::rtc::RemoteVideoTrackStats::decoder_type
uint32_t decoder_type
Definition: NGIAgoraVideoTrack.h:561
agora::rtc::RemoteVideoTrackStats::avSyncTimeMs
int avSyncTimeMs
Definition: NGIAgoraVideoTrack.h:527
agora::rtc::RemoteVideoTrackStats::totalFrozenTime
int totalFrozenTime
Definition: NGIAgoraVideoTrack.h:510
agora::rtc::IRemoteVideoTrack::getTrackInfo
virtual bool getTrackInfo(VideoTrackInfo &info)=0
agora::rtc::ILocalVideoTrack::getState
virtual LOCAL_VIDEO_STREAM_STATE getState()=0
agora::rtc::RemoteVideoTrackStats::frameLossRate
int frameLossRate
Definition: NGIAgoraVideoTrack.h:497
agora::rtc::RemoteVideoTrackStats::packetLossRate
int packetLossRate
Definition: NGIAgoraVideoTrack.h:500
agora::rtc::RemoteVideoTrackStats::totalDecodedFrames
uint32_t totalDecodedFrames
Definition: NGIAgoraVideoTrack.h:522
agora::rtc::RemoteVideoTrackStats::decoderInputFrameRate
int decoderInputFrameRate
Definition: NGIAgoraVideoTrack.h:488
agora::rtc::StreamLayerConfigInternal
Definition: NGIAgoraVideoTrack.h:39
agora::rtc::IVideoTrack
Definition: NGIAgoraVideoTrack.h:101
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::SimulcastStreamProfile
Definition: NGIAgoraVideoTrack.h:237
agora::rtc::LocalVideoTrackStats::bytes_minor_stream
uint64_t bytes_minor_stream
Definition: NGIAgoraVideoTrack.h:258
agora::rtc::RemoteVideoTrackStats::totalActiveTime
uint64_t totalActiveTime
Definition: NGIAgoraVideoTrack.h:541
agora::rtc::VideoDimensions::height
int height
Definition: AgoraBase.h:1147
agora::rtc::LocalVideoTrackStats::width
int width
Definition: NGIAgoraVideoTrack.h:322
agora::rtc::LocalVideoTrackStats::media_bitrate_bps
int media_bitrate_bps
Definition: NGIAgoraVideoTrack.h:298
agora::rtc::ILocalVideoTrack::getType
virtual VideoTrackType getType() OPTIONAL_OVERRIDE
Definition: NGIAgoraVideoTrack.h:453
agora::rtc::RemoteVideoTrackStats::vqa_avg_cost_ms
int vqa_avg_cost_ms
Definition: NGIAgoraVideoTrack.h:553
agora::rtc::LocalVideoTrackStats::capture_brightness_level
CAPTURE_BRIGHTNESS_LEVEL_TYPE capture_brightness_level
Definition: NGIAgoraVideoTrack.h:349
agora::rtc::RemoteVideoTrackStats::uid
uid_t uid
Definition: NGIAgoraVideoTrack.h:465
agora::rtc::IVideoTrack::getType
virtual VideoTrackType getType()=0
agora::rtc::VideoEncoderConfiguration
Definition: AgoraBase.h:1960
agora::rtc::LocalVideoTrackStats::number_of_streams
uint64_t number_of_streams
Definition: NGIAgoraVideoTrack.h:250
agora::rtc::SimulcastConfig::StreamLayerConfig::framerate
int framerate
Definition: AgoraBase.h:2249
agora::rtc::IVideoTrack::addRenderer
virtual bool addRenderer(agora_refptr< IVideoSinkBase > videoRenderer, media::base::VIDEO_MODULE_POSITION position, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::IRemoteVideoTrack::getStatistics
virtual bool getStatistics(RemoteVideoTrackStats &stats)=0
agora::rtc::RemoteVideoTrackStats::rxStreamType
VIDEO_STREAM_TYPE rxStreamType
Definition: NGIAgoraVideoTrack.h:504
agora::rtc::IVideoTrack::getFilterProperty
virtual int getFilterProperty(const char *id, const char *key, char *json_value, size_t buf_size, aosl_ref_t ares=AOSL_REF_INVALID)
Definition: NGIAgoraVideoTrack.h:209
agora::rtc::IRemoteVideoTrack::unregisterMediaPacketReceiver
virtual int unregisterMediaPacketReceiver(IMediaPacketReceiver *videoReceiver)=0
agora::rtc::IRemoteVideoTrack::registerMediaPacketReceiver
virtual int registerMediaPacketReceiver(IMediaPacketReceiver *videoReceiver, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::RemoteVideoTrackStats::frame_render_delay_ms
uint32_t frame_render_delay_ms
Definition: NGIAgoraVideoTrack.h:536
agora::rtc::LocalVideoTrackStats::regulated_capture_width
int regulated_capture_width
Definition: NGIAgoraVideoTrack.h:314
agora::rtc::RemoteVideoTrackStats::height
int height
Definition: NGIAgoraVideoTrack.h:481
agora::rtc::ILocalVideoTrack::setVideoEncoderConfiguration
virtual int setVideoEncoderConfiguration(const VideoEncoderConfiguration &config, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::LocalVideoTrackStats::total_bitrate_bps
int total_bitrate_bps
Definition: NGIAgoraVideoTrack.h:302
agora::rtc::LocalVideoTrackStats::ssrc_major_stream
uint32_t ssrc_major_stream
Definition: NGIAgoraVideoTrack.h:266
agora::rtc::LocalVideoTrackStats::txPacketLossRate
unsigned short txPacketLossRate
Definition: NGIAgoraVideoTrack.h:345
agora::rtc::RemoteVideoTrackStats::decoder_vender_id
uint32_t decoder_vender_id
Definition: NGIAgoraVideoTrack.h:557
agora::rtc::ILocalVideoTrack::setSimulcastStreamMode
virtual int setSimulcastStreamMode(SIMULCAST_STREAM_MODE mode, const SimulcastConfigInternal &config, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::RemoteVideoTrackStats::e2eDelay
int e2eDelay
Definition: NGIAgoraVideoTrack.h:473
agora::rtc::LocalVideoTrackStats::input_frame_rate
int input_frame_rate
Definition: NGIAgoraVideoTrack.h:282
agora::rtc::ILocalVideoTrack
Definition: NGIAgoraVideoTrack.h:394
agora::rtc::LocalVideoTrackStats::capture_width
int capture_width
Definition: NGIAgoraVideoTrack.h:306
agora::rtc::ILocalVideoTrack::getStatistics
virtual bool getStatistics(LocalVideoTrackStats &stats)=0
agora::rtc::SimulcastConfig::StreamLayerConfig
Definition: AgoraBase.h:2241
agora::rtc::RemoteVideoTrackStats::rendererOutputFrameRate
int rendererOutputFrameRate
Definition: NGIAgoraVideoTrack.h:494
agora::rtc::RemoteVideoTrackStats::delay
int delay
Definition: NGIAgoraVideoTrack.h:469
agora::rtc::IRemoteVideoTrack::getType
virtual VideoTrackType getType() OPTIONAL_OVERRIDE
Definition: NGIAgoraVideoTrack.h:620
agora::rtc::IMediaPacketReceiver
Definition: NGIAgoraMediaNode.h:318
agora::rtc::IVideoTrack::removeRenderer
virtual bool removeRenderer(agora_refptr< IVideoSinkBase > videoRenderer, media::base::VIDEO_MODULE_POSITION position, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::IVideoTrack::setFilterProperty
virtual int setFilterProperty(const char *id, const char *key, const char *json_value, aosl_ref_t ares=AOSL_REF_INVALID)
Definition: NGIAgoraVideoTrack.h:198
agora::rtc::LocalVideoTrackStats::ssrc_minor_stream
uint32_t ssrc_minor_stream
Definition: NGIAgoraVideoTrack.h:270
agora::rtc::SimulcastConfigInternal
Definition: NGIAgoraVideoTrack.h:66
agora::rtc::RemoteVideoTrackStats::frozenRate
int frozenRate
Definition: NGIAgoraVideoTrack.h:514
agora::rtc::VideoDimensions::width
int width
Definition: AgoraBase.h:1143
agora::rtc::IVideoTrack::enableVideoFilter
virtual int enableVideoFilter(const char *id, bool enable, aosl_ref_t ares=AOSL_REF_INVALID)
Definition: NGIAgoraVideoTrack.h:187
agora::rtc::IRemoteVideoTrack
Definition: NGIAgoraVideoTrack.h:574
agora::rtc::LocalVideoTrackStats::render_frame_rate
int render_frame_rate
Definition: NGIAgoraVideoTrack.h:290
agora::rtc::RemoteVideoTrackStats
Definition: NGIAgoraVideoTrack.h:461
agora::rtc::RemoteVideoTrackStats::downlink_process_time_ms
uint32_t downlink_process_time_ms
Definition: NGIAgoraVideoTrack.h:532
agora::rtc::IVideoTrack::unregisterVideoEncodedFrameObserver
virtual int unregisterVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver *encodedObserver)
Definition: NGIAgoraVideoTrack.h:231
agora::rtc::IVideoTrack::addVideoFilter
virtual bool addVideoFilter(agora_refptr< IVideoFilter > filter, media::base::VIDEO_MODULE_POSITION position=media::base::POSITION_POST_CAPTURER, const char *id=NULL, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::ILocalVideoTrack::setEnabled
virtual int setEnabled(bool enable, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::rtc::LocalVideoTrackStats::capture_frame_rate
int capture_frame_rate
Definition: NGIAgoraVideoTrack.h:274
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::IVideoTrack::hasVideoFilter
virtual bool hasVideoFilter(const char *id, media::base::VIDEO_MODULE_POSITION position=media::base::POSITION_POST_CAPTURER)=0
agora::rtc::RemoteVideoTrackStats::publishDuration
uint64_t publishDuration
Definition: NGIAgoraVideoTrack.h:545
agora::rtc::LocalVideoTrackStats::regulated_capture_height
int regulated_capture_height
Definition: NGIAgoraVideoTrack.h:318
agora::rtc::IRemoteVideoTrack::getState
virtual REMOTE_VIDEO_STATE getState()=0
agora::rtc::RemoteVideoTrackStats::receivedBitrate
int receivedBitrate
Definition: NGIAgoraVideoTrack.h:485
agora::rtc::LocalVideoTrackStats::capture_height
int capture_height
Definition: NGIAgoraVideoTrack.h:310
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1139
agora::rtc::IVideoTrack::removeVideoFilter
virtual bool removeVideoFilter(agora_refptr< IVideoFilter > filter, media::base::VIDEO_MODULE_POSITION position=media::base::POSITION_POST_CAPTURER, const char *id=NULL, aosl_ref_t ares=AOSL_REF_INVALID)=0
agora::media::IVideoEncodedFrameObserver
Definition: AgoraMediaBase.h:1642
agora::rtc::RemoteVideoTrackStats::decoderOutputFrameRate
int decoderOutputFrameRate
Definition: NGIAgoraVideoTrack.h:491
agora::rtc::VideoTrackInfo
Definition: AgoraBase.h:3694
agora::rtc::SimulcastConfig::StreamLayerConfig::dimensions
VideoDimensions dimensions
Definition: AgoraBase.h:2245
agora::rtc::RemoteVideoTrackStats::width
int width
Definition: NGIAgoraVideoTrack.h:477
agora::rtc::LocalVideoTrackStats::target_media_bitrate_bps
int target_media_bitrate_bps
Definition: NGIAgoraVideoTrack.h:294
agora::rtc::LocalVideoTrackStats::quality_adapt_indication
QUALITY_ADAPT_INDICATION quality_adapt_indication
Definition: NGIAgoraVideoTrack.h:341
agora::rtc::LocalVideoTrackStats::regulated_capture_frame_rate
int regulated_capture_frame_rate
Definition: NGIAgoraVideoTrack.h:278
agora::rtc::LocalVideoTrackStats::encode_frame_rate
int encode_frame_rate
Definition: NGIAgoraVideoTrack.h:286
agora::rtc::LocalVideoTrackStats::bytes_major_stream
uint64_t bytes_major_stream
Definition: NGIAgoraVideoTrack.h:254
agora::rtc::LocalVideoTrackStats::uplink_cost_time_ms
uint32_t uplink_cost_time_ms
Definition: NGIAgoraVideoTrack.h:337
agora::rtc::IVideoTrack::registerVideoEncodedFrameObserver
virtual int registerVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver *encodedObserver, aosl_ref_t ares=AOSL_REF_INVALID)
Definition: NGIAgoraVideoTrack.h:223
agora::rtc::RemoteVideoTrackStats::vqa_mos
int vqa_mos
Definition: NGIAgoraVideoTrack.h:549
agora::rtc::LocalVideoTrackStats::height
int height
Definition: NGIAgoraVideoTrack.h:326
agora::rtc::LocalVideoTrackStats
Definition: NGIAgoraVideoTrack.h:246
agora::rtc::RemoteVideoTrackStats::received_bytes
uint32_t received_bytes
Definition: NGIAgoraVideoTrack.h:518
agora::rtc::SimulcastConfig::StreamLayerConfig::enable
bool enable
Definition: AgoraBase.h:2255