Agora Server Gateway SDK C++ API Reference
Loading...
Searching...
No Matches
AgoraMediaBase.h
Go to the documentation of this file.
1//
2// Agora Engine SDK
3//
4// Created by Sting Feng in 2017-11.
5// Copyright (c) 2017 Agora.io. All rights reserved.
6
7#pragma once // NOLINT(build/header_guard)
8
9#include <cstring>
10#include <stdint.h>
11#include <limits>
12#include <stddef.h>
13
14#ifndef OPTIONAL_ENUM_SIZE_T
15#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
16#define OPTIONAL_ENUM_SIZE_T enum : size_t
17#else
18#define OPTIONAL_ENUM_SIZE_T enum
19#endif
20#endif
21
22namespace agora {
23namespace rtc {
24
25typedef unsigned int uid_t;
26typedef unsigned int track_id_t;
27typedef unsigned int conn_id_t;
28
29static const unsigned int DEFAULT_CONNECTION_ID = 0;
30static const unsigned int DUMMY_CONNECTION_ID = (std::numeric_limits<unsigned int>::max)();
31
32
34
44
55
69
126
129 public:
148 struct Metadata {
150 const char* channelId;
152 unsigned int uid;
154 unsigned int size;
156 unsigned char* buffer;
158 long long timeStampMs;
159 Metadata() : channelId(NULL), uid(0), size(0), buffer(NULL), timeStampMs(0) {}
160 };
174 virtual bool onReadyToSendMetadata(Metadata& metadata, VIDEO_SOURCE_TYPE source_type) = 0;
180 virtual void onMetadataReceived(const Metadata& metadata) = 0;
181};
182
183} // namespace rtc
184
186namespace media {
190enum MEDIA_SOURCE_TYPE {
194 AUDIO_PLAYOUT_SOURCE = 0,
198 AUDIO_RECORDING_SOURCE = 1,
202 PRIMARY_CAMERA_SOURCE = 2,
206 SECONDARY_CAMERA_SOURCE = 3,
210 PRIMARY_SCREEN_SOURCE = 4,
214 SECONDARY_SCREEN_SOURCE = 5,
218 CUSTOM_VIDEO_SOURCE = 6,
222 MEDIA_PLAYER_SOURCE = 7,
226 RTC_IMAGE_PNG_SOURCE = 8,
230 RTC_IMAGE_JPEG_SOURCE = 9,
234 RTC_IMAGE_GIF_SOURCE = 10,
238 REMOTE_VIDEO_SOURCE = 11,
242 TRANSCODED_VIDEO_SOURCE = 12,
246 UNKNOWN_MEDIA_SOURCE = 100
247};
248namespace base {
249
250typedef void* view_t;
251
252typedef const char* user_id_t;
253
254static const uint8_t kMaxCodecNameLength = 50;
256
258
261enum MAX_METADATA_SIZE_TYPE {
262 MAX_METADATA_SIZE_IN_BYTE = 1024
263};
264
269struct PacketOptions {
273 uint32_t timestamp;
274 // Audio level indication.
275 uint8_t audioLevelIndication;
276 PacketOptions()
277 : timestamp(0),
278 audioLevelIndication(127) {}
279};
281
290 // Stereo, 32 kHz, 60 ms (2 * 32 * 60)
297 kMaxDataSizeSamples = 3840,
299 kMaxDataSizeBytes = kMaxDataSizeSamples * sizeof(int16_t),
300 };
301
318 int16_t data_[kMaxDataSizeSamples];
319
321 if(this == &src) {
322 return *this;
323 }
324
325 this->capture_timestamp = src.capture_timestamp;
326 this->samples_per_channel_ = src.samples_per_channel_;
327 this->sample_rate_hz_ = src.sample_rate_hz_;
328 this->bytes_per_sample = src.bytes_per_sample;
329 this->num_channels_ = src.num_channels_;
330
331 size_t length = src.samples_per_channel_ * src.num_channels_;
332 if (length > kMaxDataSizeSamples) {
333 length = kMaxDataSizeSamples;
334 }
335
336 memcpy(this->data_, src.data_, length * sizeof(int16_t));
337
338 return *this;
339 }
340
342 : capture_timestamp(0),
343 samples_per_channel_(0),
344 sample_rate_hz_(0),
345 num_channels_(0),
346 bytes_per_sample(rtc::TWO_BYTES_PER_SAMPLE) {
347 memset(data_, 0, sizeof(data_));
348 }
349
351 : capture_timestamp(src.capture_timestamp),
352 samples_per_channel_(src.samples_per_channel_),
353 sample_rate_hz_(src.sample_rate_hz_),
354 num_channels_(src.num_channels_),
355 bytes_per_sample(src.bytes_per_sample) {
356 size_t length = src.samples_per_channel_ * src.num_channels_;
357 if (length > kMaxDataSizeSamples) {
358 length = kMaxDataSizeSamples;
359 }
360
361 memcpy(this->data_, src.data_, length * sizeof(int16_t));
362 }
363};
364
366
368enum AUDIO_DUAL_MONO_MODE {
370 AUDIO_DUAL_MONO_STEREO = 0,
372 AUDIO_DUAL_MONO_L = 1,
374 AUDIO_DUAL_MONO_R = 2,
376 AUDIO_DUAL_MONO_MIX = 3
377};
379
382 public:
391 virtual void onFrame(AudioPcmFrame* frame) = 0;
392 virtual ~IAudioFrameObserver() {}
393};
395
437
439
442enum RENDER_MODE_TYPE {
447 RENDER_MODE_HIDDEN = 1,
453 RENDER_MODE_FIT = 2,
458 RENDER_MODE_ADAPTIVE = 3,
459};
461
467 : type(VIDEO_BUFFER_RAW_DATA),
468 format(VIDEO_PIXEL_UNKNOWN),
469 buffer(NULL),
470 stride(0),
471 height(0),
472 cropLeft(0),
473 cropTop(0),
474 cropRight(0),
475 cropBottom(0),
476 rotation(0),
477 timestamp(0),
478 eglContext(NULL),
479 eglType(EGL_CONTEXT10),
480 textureId(0),
481 metadata_buffer(NULL),
482 metadata_size(0),
483 alphaBuffer(NULL){}
484
486
489 enum EGL_CONTEXT_TYPE {
493 EGL_CONTEXT10 = 0,
497 EGL_CONTEXT14 = 1,
498 };
500
507 VIDEO_BUFFER_RAW_DATA = 1,
511 VIDEO_BUFFER_ARRAY = 2,
515 VIDEO_BUFFER_TEXTURE = 3,
516 };
517
529 void* buffer;
568 long long timestamp;
570
575 void *eglContext;
579 EGL_CONTEXT_TYPE eglType;
583 int textureId;
587 float matrix[16];
592 uint8_t* metadata_buffer;
597 int metadata_size;
599
611 uint8_t* alphaBuffer;
612};
613
620 width(0),
621 height(0),
622 yStride(0),
623 uStride(0),
624 vStride(0),
625 yBuffer(NULL),
626 uBuffer(NULL),
627 vBuffer(NULL),
628 rotation(0),
629 renderTimeMs(0),
630 avsync_type(0),
631 metadata_buffer(NULL),
632 metadata_size(0),
633 sharedContext(0),
634 textureId(0),
635 alphaBuffer(NULL){}
636
644 int width;
664 uint8_t* yBuffer;
668 uint8_t* uBuffer;
672 uint8_t* vBuffer;
689
693 uint8_t* metadata_buffer;
698 int metadata_size;
702 void* sharedContext;
706 int textureId;
710 float matrix[16];
716 uint8_t* alphaBuffer;
718};
719
722 public:
730 virtual void onFrame(const VideoFrame* frame) = 0;
731 virtual ~IVideoFrameObserver() {}
732 virtual bool isExternal() { return true; }
733 virtual VIDEO_PIXEL_FORMAT getVideoPixelFormatPreference() { return VIDEO_PIXEL_UNKNOWN; }
734};
735
736enum MEDIA_PLAYER_SOURCE_TYPE {
742 MEDIA_PLAYER_SOURCE_DEFAULT,
748 MEDIA_PLAYER_SOURCE_FULL_FEATURED,
753 MEDIA_PLAYER_SOURCE_SIMPLE,
754};
756
763
764} // namespace base
765
770 public:
778 FRAME_TYPE_PCM16 = 0,
779 };
783 struct AudioFrame {
807 void* buffer;
817
818 AudioFrame() : type(FRAME_TYPE_PCM16),
819 samplesPerChannel(0),
820 bytesPerSample(rtc::TWO_BYTES_PER_SAMPLE),
821 channels(0),
822 samplesPerSec(0),
823 buffer(NULL),
824 renderTimeMs(0),
825 avsync_type(0) {}
826 };
827
828 public:
830
839 virtual bool onRecordAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
848 virtual bool onPlaybackAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
857 virtual bool onMixedAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
867 virtual bool onPlaybackAudioFrameBeforeMixing(const char* channelId, base::user_id_t userId, AudioFrame& audioFrame) {
868 (void) channelId;
869 (void) userId;
870 (void) audioFrame;
871 return true;
872 }
873};
874
879 public:
890 virtual bool onPlaybackAudioFrameBeforeMixing(const char* channelId, rtc::uid_t uid, AudioFrame& audioFrame) = 0;
891};
892
897 public:
908 virtual bool OnEncodedVideoFrame(rtc::uid_t uid, const uint8_t* imageBuffer, size_t length,
909 const rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
910
912};
913
918 public:
919 typedef media::base::VideoFrame VideoFrame;
920
922 PROCESS_MODE_READ_ONLY, // Observer works as a pure renderer and will not modify the original frame.
923 PROCESS_MODE_READ_WRITE, // Observer works as a filter that will process the video frame and affect the following frame processing in SDK.
924 };
925
926 public:
928
930
948 virtual bool onCaptureVideoFrame(VideoFrame& videoFrame) = 0;
950
968 virtual bool onPreEncodeVideoFrame(VideoFrame& videoFrame) = 0;
969
971 virtual bool onSecondaryCameraCaptureVideoFrame(VideoFrame& videoFrame) = 0;
972
990 virtual bool onSecondaryPreEncodeCameraVideoFrame(VideoFrame& videoFrame) = 0;
993
1008 virtual bool onScreenCaptureVideoFrame(VideoFrame& videoFrame) = 0;
1009
1010 virtual bool onPreEncodeScreenVideoFrame(VideoFrame& videoFrame) = 0;
1011
1028 virtual bool onMediaPlayerVideoFrame(VideoFrame& videoFrame, int mediaPlayerId) = 0;
1029
1030 virtual bool onSecondaryScreenCaptureVideoFrame(VideoFrame& videoFrame) = 0;
1031
1032 virtual bool onSecondaryPreEncodeScreenVideoFrame(VideoFrame& videoFrame) = 0;
1050 virtual bool onRenderVideoFrame(const char* channelId, rtc::uid_t remoteUid, VideoFrame& videoFrame) = 0;
1051
1052 virtual bool onTranscodedVideoFrame(VideoFrame& videoFrame) = 0;
1053
1058 virtual VIDEO_FRAME_PROCESS_MODE getVideoFrameProcessMode() {
1059 return PROCESS_MODE_READ_ONLY;
1060 }
1061
1062 /*
1063 * Occurs each time needs to get preference video frame type.
1064 *
1065 * @return preference video pixel format.
1066 */
1067 virtual base::VIDEO_PIXEL_FORMAT getVideoPixelFormatPreference() { return base::VIDEO_PIXEL_I420; }
1068
1076 virtual bool getRotationApplied() { return false; }
1078
1086 virtual bool getMirrorApplied() { return false; }
1087
1089
1106 virtual uint32_t getObservedFramePosition() {
1107 return base::POSITION_POST_CAPTURER | base::POSITION_PRE_RENDERER;
1108 }
1109
1117 virtual bool isExternal() { return true; }
1118};
1120
1122
1124#define MAX_CONTENT_INSPECT_MODULE_COUNT 32
1125enum CONTENT_INSPECT_RESULT {
1126 CONTENT_INSPECT_NEUTRAL = 1,
1127 CONTENT_INSPECT_SEXY = 2,
1128 CONTENT_INSPECT_PORN = 3,
1129};
1130enum CONTENT_INSPECT_DEVICE_TYPE{
1131 CONTENT_INSPECT_DEVICE_INVALID = 0,
1132 CONTENT_INSPECT_DEVICE_AGORA = 1,
1133 CONTENT_INSPECT_DEVICE_HIVE = 2,
1134 CONTENT_INSPECT_DEVICE_TUPU = 3
1135};
1136enum CONTENT_INSPECT_TYPE {
1140CONTENT_INSPECT_INVALIDE = 0,
1144CONTENT_INSPECT_MODERATION = 1,
1148CONTENT_INSPECT_SUPERVISE = 2
1149};
1150struct ContentInspectModule {
1154 CONTENT_INSPECT_TYPE type;
1158 unsigned int frequency;
1159};
1163enum EXTERNAL_VIDEO_SOURCE_TYPE {
1167 VIDEO_FRAME = 0,
1171 ENCODED_VIDEO_FRAME,
1172};
1174
1175} // namespace media
1176} // namespace agora
#define OPTIONAL_ENUM_SIZE_T
Definition AgoraMediaBase.h:18
Definition AgoraMediaBase.h:769
virtual bool onPlaybackAudioFrameBeforeMixing(const char *channelId, base::user_id_t userId, AudioFrame &audioFrame)
Definition AgoraMediaBase.h:867
virtual ~IAudioFrameObserverBase()
Definition AgoraMediaBase.h:829
virtual bool onRecordAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
virtual bool onMixedAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
AUDIO_FRAME_TYPE
Definition AgoraMediaBase.h:774
virtual bool onPlaybackAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
Definition AgoraMediaBase.h:878
virtual bool onPlaybackAudioFrameBeforeMixing(const char *channelId, rtc::uid_t uid, AudioFrame &audioFrame)=0
Definition AgoraMediaBase.h:896
virtual bool OnEncodedVideoFrame(rtc::uid_t uid, const uint8_t *imageBuffer, size_t length, const rtc::EncodedVideoFrameInfo &videoEncodedFrameInfo)=0
virtual ~IVideoEncodedFrameObserver()
Definition AgoraMediaBase.h:911
Definition AgoraMediaBase.h:917
media::base::VideoFrame VideoFrame
Definition AgoraMediaBase.h:919
VIDEO_FRAME_PROCESS_MODE
Definition AgoraMediaBase.h:921
@ PROCESS_MODE_READ_WRITE
Definition AgoraMediaBase.h:923
@ PROCESS_MODE_READ_ONLY
Definition AgoraMediaBase.h:922
virtual bool onPreEncodeVideoFrame(VideoFrame &videoFrame)=0
virtual bool getMirrorApplied()
Definition AgoraMediaBase.h:1086
virtual ~IVideoFrameObserver()
Definition AgoraMediaBase.h:927
Definition AgoraMediaBase.h:128
METADATA_TYPE
Definition AgoraMediaBase.h:132
@ UNKNOWN_METADATA
Definition AgoraMediaBase.h:134
@ VIDEO_METADATA
Definition AgoraMediaBase.h:136
virtual ~IMetadataObserver()
Definition AgoraMediaBase.h:130
virtual void onMetadataReceived(const Metadata &metadata)=0
virtual int getMaxMetadataSize()
Definition AgoraMediaBase.h:165
MAX_METADATA_SIZE_TYPE
Definition AgoraMediaBase.h:139
@ MAX_METADATA_SIZE_IN_BYTE
Definition AgoraMediaBase.h:145
@ DEFAULT_METADATA_SIZE_IN_BYTE
Definition AgoraMediaBase.h:143
@ INVALID_METADATA_SIZE_IN_BYTE
Definition AgoraMediaBase.h:141
virtual bool onReadyToSendMetadata(Metadata &metadata, VIDEO_SOURCE_TYPE source_type)=0
unsigned int track_id_t
Definition AgoraMediaBase.h:26
BYTES_PER_SAMPLE
Definition AgoraMediaBase.h:38
@ TWO_BYTES_PER_SAMPLE
Definition AgoraMediaBase.h:42
unsigned int uid_t
Definition AgoraMediaBase.h:25
unsigned int conn_id_t
Definition AgoraMediaBase.h:27
static const unsigned int DUMMY_CONNECTION_ID
Definition AgoraMediaBase.h:30
VIDEO_SOURCE_TYPE
Definition AgoraMediaBase.h:71
@ VIDEO_SOURCE_CAMERA_PRIMARY
Definition AgoraMediaBase.h:74
@ VIDEO_SOURCE_RTC_IMAGE_JPEG
Definition AgoraMediaBase.h:97
@ VIDEO_SOURCE_CUSTOM
Definition AgoraMediaBase.h:88
@ VIDEO_SOURCE_RTC_IMAGE_GIF
Definition AgoraMediaBase.h:100
@ VIDEO_SOURCE_CAMERA_THIRD
Definition AgoraMediaBase.h:110
@ VIDEO_SOURCE_SCREEN_THIRD
Definition AgoraMediaBase.h:116
@ VIDEO_SOURCE_CAMERA
Definition AgoraMediaBase.h:75
@ VIDEO_SOURCE_SCREEN_PRIMARY
Definition AgoraMediaBase.h:81
@ VIDEO_SOURCE_REMOTE
Definition AgoraMediaBase.h:103
@ VIDEO_SOURCE_SCREEN_FOURTH
Definition AgoraMediaBase.h:119
@ VIDEO_SOURCE_CAMERA_FOURTH
Definition AgoraMediaBase.h:113
@ VIDEO_SOURCE_SPEECH_DRIVEN
Definition AgoraMediaBase.h:122
@ VIDEO_SOURCE_CAMERA_SECONDARY
Definition AgoraMediaBase.h:78
@ VIDEO_SOURCE_SCREEN_SECONDARY
Definition AgoraMediaBase.h:85
@ VIDEO_SOURCE_UNKNOWN
Definition AgoraMediaBase.h:124
@ VIDEO_SOURCE_MEDIA_PLAYER
Definition AgoraMediaBase.h:91
@ VIDEO_SOURCE_SCREEN
Definition AgoraMediaBase.h:82
@ VIDEO_SOURCE_TRANSCODED
Definition AgoraMediaBase.h:106
@ VIDEO_SOURCE_RTC_IMAGE_PNG
Definition AgoraMediaBase.h:94
RAW_AUDIO_FRAME_OP_MODE_TYPE
Definition AgoraMediaBase.h:56
@ RAW_AUDIO_FRAME_OP_MODE_READ_WRITE
Definition AgoraMediaBase.h:67
@ RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
Definition AgoraMediaBase.h:61
static const unsigned int DEFAULT_CONNECTION_ID
Definition AgoraMediaBase.h:29
Definition AgoraBase.h:86
VIDEO_PIXEL_FORMAT
Definition AgoraMediaBase.h:399
@ VIDEO_PIXEL_BGRA
Definition AgoraMediaBase.h:411
@ VIDEO_PIXEL_UNKNOWN
Definition AgoraMediaBase.h:403
@ VIDEO_PIXEL_NV21
Definition AgoraMediaBase.h:415
@ VIDEO_PIXEL_I420
Definition AgoraMediaBase.h:407
@ VIDEO_TEXTURE_2D
Definition AgoraMediaBase.h:427
@ VIDEO_TEXTURE_OES
Definition AgoraMediaBase.h:431
@ VIDEO_PIXEL_RGBA
Definition AgoraMediaBase.h:419
@ VIDEO_PIXEL_NV12
Definition AgoraMediaBase.h:423
@ VIDEO_PIXEL_I422
Definition AgoraMediaBase.h:435
VIDEO_MODULE_POSITION
Definition AgoraMediaBase.h:757
@ POSITION_PRE_ENCODER
Definition AgoraMediaBase.h:760
@ POSITION_POST_CAPTURER
Definition AgoraMediaBase.h:758
@ POSITION_PRE_RENDERER
Definition AgoraMediaBase.h:759
@ POSITION_POST_FILTERS
Definition AgoraMediaBase.h:761
Definition AgoraMediaBase.h:783
agora::rtc::BYTES_PER_SAMPLE bytesPerSample
Definition AgoraMediaBase.h:795
int samplesPerChannel
Definition AgoraMediaBase.h:791
void * buffer
Definition AgoraMediaBase.h:807
AUDIO_FRAME_TYPE type
Definition AgoraMediaBase.h:787
int samplesPerSec
Definition AgoraMediaBase.h:803
int avsync_type
Definition AgoraMediaBase.h:816
int64_t renderTimeMs
Definition AgoraMediaBase.h:815
int channels
Definition AgoraMediaBase.h:799
AudioFrame()
Definition AgoraMediaBase.h:818
Definition AgoraMediaBase.h:285
AudioPcmFrame()
Definition AgoraMediaBase.h:341
uint32_t capture_timestamp
Definition AgoraMediaBase.h:304
size_t num_channels_
Definition AgoraMediaBase.h:313
int16_t data_[kMaxDataSizeSamples]
Definition AgoraMediaBase.h:318
int sample_rate_hz_
Definition AgoraMediaBase.h:310
AudioPcmFrame & operator=(const AudioPcmFrame &src)
Definition AgoraMediaBase.h:320
AudioPcmFrame(const AudioPcmFrame &src)
Definition AgoraMediaBase.h:350
rtc::BYTES_PER_SAMPLE bytes_per_sample
Definition AgoraMediaBase.h:316
size_t samples_per_channel_
Definition AgoraMediaBase.h:307
Definition AgoraMediaBase.h:465
void * buffer
Definition AgoraMediaBase.h:529
VIDEO_BUFFER_TYPE
Definition AgoraMediaBase.h:503
uint8_t * alphaBuffer
Definition AgoraMediaBase.h:611
ExternalVideoFrame()
Definition AgoraMediaBase.h:466
int rotation
Definition AgoraMediaBase.h:563
int cropLeft
Definition AgoraMediaBase.h:543
int cropBottom
Definition AgoraMediaBase.h:558
int height
Definition AgoraMediaBase.h:538
int stride
Definition AgoraMediaBase.h:534
int cropRight
Definition AgoraMediaBase.h:553
long long timestamp
Definition AgoraMediaBase.h:568
VIDEO_BUFFER_TYPE type
Definition AgoraMediaBase.h:521
VIDEO_PIXEL_FORMAT format
Definition AgoraMediaBase.h:525
int cropTop
Definition AgoraMediaBase.h:548
Definition AgoraMediaBase.h:617
int uStride
Definition AgoraMediaBase.h:656
VIDEO_PIXEL_FORMAT type
Definition AgoraMediaBase.h:640
uint8_t * yBuffer
Definition AgoraMediaBase.h:664
int width
Definition AgoraMediaBase.h:644
int yStride
Definition AgoraMediaBase.h:652
uint8_t * uBuffer
Definition AgoraMediaBase.h:668
int rotation
Definition AgoraMediaBase.h:676
int64_t renderTimeMs
Definition AgoraMediaBase.h:683
int vStride
Definition AgoraMediaBase.h:660
uint8_t * vBuffer
Definition AgoraMediaBase.h:672
VideoFrame()
Definition AgoraMediaBase.h:618
int avsync_type
Definition AgoraMediaBase.h:687
int height
Definition AgoraMediaBase.h:648
Definition AgoraMediaBase.h:45
size_t channels
Definition AgoraMediaBase.h:47
int sample_rate
Definition AgoraMediaBase.h:46
AudioParameters()
Definition AgoraMediaBase.h:50
size_t frames_per_buffer
Definition AgoraMediaBase.h:48
Definition AgoraBase.h:1880
Definition AgoraMediaBase.h:148
long long timeStampMs
Definition AgoraMediaBase.h:158
unsigned int size
Definition AgoraMediaBase.h:154
unsigned int uid
Definition AgoraMediaBase.h:152
Metadata()
Definition AgoraMediaBase.h:159
const char * channelId
Definition AgoraMediaBase.h:150
unsigned char * buffer
Definition AgoraMediaBase.h:156