Agora C++ API Reference for All Platforms
media_recorder_i.h
1 //
2 // media_recorder.hpp
3 //
4 // Created by zexiong qin on 2019-06.
5 // Copyright © 2018 Agora. All rights reserved.
6 //
7 
8 #pragma once
9 
10 #include <stdint.h>
11 
12 #include "IAgoraRtcEngine.h"
13 #include "IAgoraMediaEngine.h"
14 
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 typedef void AyseMuxerContext;
21 
22 #define AYSE_IO_FLAG_READ 0x1
23 #define AYSE_IO_FLAG_WRITE 0x2
24 #define AYSE_IO_FLAG_ODIRECT 0x4
25 
26 #ifdef __cplusplus
27 }
28 #endif
29 
30 namespace agora {
31 namespace media {
33  public:
45  virtual void onRecorderStateChanged(RecorderState state, RecorderErrorCode error) = 0;
58  virtual void onRecorderInfoUpdated(const RecorderInfo& info) = 0;
60 };
61 }
62 namespace rtc {
63 
67  public:
71  enum AVDATA_TYPE {
84  };
85 
86  enum CODEC_VIDEO {
96  };
97 
98  enum CODEC_AUDIO {
108  };
109 
110  struct VDataInfo {
111  unsigned int codec;
112  unsigned int width;
113  unsigned int height;
115  int rotation;
116  bool equal(const VDataInfo& vinfo) const {
117  return codec == vinfo.codec && width == vinfo.width && height == vinfo.height &&
118  rotation == vinfo.rotation;
119  }
120  };
121 
122  struct ADataInfo {
123  unsigned int codec;
124  unsigned int bitwidth;
125  unsigned int sample_rate;
126  unsigned int channel;
127  unsigned int sample_size;
128 
129  bool equal(const ADataInfo& ainfo) const {
130  return codec == ainfo.codec && bitwidth == ainfo.bitwidth &&
131  sample_rate == ainfo.sample_rate && channel == ainfo.channel;
132  };
133  };
134 
135  struct AVData {
139  unsigned int uid;
143  enum AVDATA_TYPE type;
146  unsigned int size;
149  unsigned char* buffer;
152  unsigned int timestamp;
161  };
162 
163  virtual ~IAVDataObserver(){};
164 
169  virtual bool onAVDataReady(const AVData& avdata) = 0;
170 };
171 
173  public:
174 
175  virtual int startRecording(const media::MediaRecorderConfiguration& config) = 0;
176 
177  virtual int stopRecording() = 0;
178 
179  virtual void release() = 0;
180 
182 
183  virtual void setSysVersion(int sys_version) = 0;
184 
185  virtual void setRemoteUid(uid_t uid) = 0;
186 
187  bool onPlaybackAudioFrame(const char* channelId, AudioFrame& audioFrame) override{return true;}
188  bool onMixedAudioFrame(const char* channelId, AudioFrame& audioFrame) override{return true;}
189  bool onEarMonitoringAudioFrame(AudioFrame& audioFrame) override { return true; }
190  bool onPlaybackAudioFrameBeforeMixing(const char* channelId, user_id_t userId, AudioFrame& audioFrame) override {
191  return true;
192  }
193  bool onPlaybackAudioFrameBeforeMixing(const char* channelId, rtc::uid_t uid, AudioFrame& audioFrame) override {
194  return true;
195  }
196 
198 
200 
202 
204 
205  virtual bool onEncodedVideoFrameReceived(rtc::uid_t uid, const uint8_t* imageBuffer, size_t length,
206  const rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo) override {
208  avData.type = AVDATA_VIDEO;
209  avData.size = length;
210  avData.buffer = (unsigned char *)imageBuffer;
211  avData.vinfo.codec = videoEncodedFrameInfo.codecType;
212  avData.vinfo.width = videoEncodedFrameInfo.width;
213  avData.vinfo.height = videoEncodedFrameInfo.height;
214  avData.vinfo.frameType = videoEncodedFrameInfo.frameType;
215  avData.vinfo.rotation = videoEncodedFrameInfo.rotation;
216  return onAVDataReady(avData);
217  }
218 };
219 
220 } // namespace rtc
221 } // namespace agora
agora::rtc::IAVDataObserver::onAVDataReady
virtual bool onAVDataReady(const AVData &avdata)=0
agora::rtc::IAVDataObserver::CODEC_VIDEO_AVC
@ CODEC_VIDEO_AVC
Definition: media_recorder_i.h:89
agora::rtc::IAVDataObserver::AVData
Definition: media_recorder_i.h:135
agora::rtc::IAVDataObserver::VDataInfo::codec
unsigned int codec
Definition: media_recorder_i.h:111
agora::rtc::IMediaRecorderEX::getRecordAudioParams
AudioParams getRecordAudioParams() override
Definition: media_recorder_i.h:199
agora::media::IMediaRecorderObserverEx
Definition: media_recorder_i.h:32
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1610
agora::rtc::IAVDataObserver::ADataInfo
Definition: media_recorder_i.h:122
agora::rtc::IAVDataObserver::AVDATA_VIDEO
@ AVDATA_VIDEO
Definition: media_recorder_i.h:77
agora::rtc::IMediaRecorderEX::onMixedAudioFrame
bool onMixedAudioFrame(const char *channelId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:188
agora::rtc::IMediaRecorderEX::getMixedAudioParams
AudioParams getMixedAudioParams() override
Definition: media_recorder_i.h:201
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1543
agora::rtc::IMediaRecorderEX::startRecording
virtual int startRecording(const media::MediaRecorderConfiguration &config)=0
agora::rtc::IAVDataObserver::ADataInfo::codec
unsigned int codec
Definition: media_recorder_i.h:123
agora::media::IAudioFrameObserverBase::AudioFrame
Definition: AgoraMediaBase.h:877
agora::media::IAudioFrameObserver
Definition: AgoraMediaBase.h:1113
agora::user_id_t
const char * user_id_t
Definition: AgoraBase.h:790
agora::rtc::IAVDataObserver::AVDATA_AUDIO_MUTE
@ AVDATA_AUDIO_MUTE
Definition: media_recorder_i.h:83
agora::rtc::IAVDataObserver::ADataInfo::channel
unsigned int channel
Definition: media_recorder_i.h:126
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::IAVDataObserver::AVData::timestamp
unsigned int timestamp
Definition: media_recorder_i.h:152
agora::rtc::IMediaRecorderEX::setSysVersion
virtual void setSysVersion(int sys_version)=0
agora::rtc::IAVDataObserver::ADataInfo::equal
bool equal(const ADataInfo &ainfo) const
Definition: media_recorder_i.h:129
agora::media::RecorderErrorCode
RecorderErrorCode
Definition: AgoraMediaBase.h:1495
agora::rtc::IAVDataObserver::CODEC_VIDEO_VP8
@ CODEC_VIDEO_VP8
Definition: media_recorder_i.h:95
agora::rtc::IMediaRecorderEX::onPlaybackAudioFrameBeforeMixing
bool onPlaybackAudioFrameBeforeMixing(const char *channelId, rtc::uid_t uid, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:193
agora::rtc::IAVDataObserver::AVData::uid
unsigned int uid
Definition: media_recorder_i.h:139
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1588
agora::rtc::IAVDataObserver::ADataInfo::bitwidth
unsigned int bitwidth
Definition: media_recorder_i.h:124
agora::rtc::IMediaRecorderEX::getPlaybackAudioParams
AudioParams getPlaybackAudioParams() override
Definition: media_recorder_i.h:197
agora::rtc::IAVDataObserver::AVData::size
unsigned int size
Definition: media_recorder_i.h:146
agora::rtc::IMediaRecorderEX
Definition: media_recorder_i.h:172
agora::media::RecorderInfo
Definition: AgoraMediaBase.h:1560
agora::rtc::IAVDataObserver::ADataInfo::sample_rate
unsigned int sample_rate
Definition: media_recorder_i.h:125
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1592
agora::rtc::IAVDataObserver::AVData::buffer
unsigned char * buffer
Definition: media_recorder_i.h:149
agora::rtc::IAVDataObserver::AVDATA_UNKNOWN
@ AVDATA_UNKNOWN
Definition: media_recorder_i.h:74
agora::media::IMediaRecorderObserverEx::~IMediaRecorderObserverEx
virtual ~IMediaRecorderObserverEx()
Definition: media_recorder_i.h:59
agora::media::RecorderState
RecorderState
Definition: AgoraMediaBase.h:1476
agora::rtc::IAVDataObserver::AVData::vinfo
VDataInfo vinfo
Definition: media_recorder_i.h:156
agora::rtc::IMediaRecorderEX::onEncodedVideoFrameReceived
virtual bool onEncodedVideoFrameReceived(rtc::uid_t uid, const uint8_t *imageBuffer, size_t length, const rtc::EncodedVideoFrameInfo &videoEncodedFrameInfo) override
Definition: media_recorder_i.h:205
agora::rtc::IAVDataObserver::~IAVDataObserver
virtual ~IAVDataObserver()
Definition: media_recorder_i.h:163
agora::rtc::IMediaRecorderEX::release
virtual void release()=0
agora::rtc::IAVDataObserver::VDataInfo
Definition: media_recorder_i.h:110
agora::rtc::RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
@ RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
Definition: AgoraMediaBase.h:177
agora::rtc::IAVDataObserver::VDataInfo::height
unsigned int height
Definition: media_recorder_i.h:113
agora::rtc::IMediaRecorderEX::setMediaRecorderObserver
virtual void setMediaRecorderObserver(media::IMediaRecorderObserverEx *observer)=0
agora::rtc::IAVDataObserver
Definition: media_recorder_i.h:66
agora::rtc::IMediaRecorderEX::stopRecording
virtual int stopRecording()=0
agora::rtc::IMediaRecorderEX::onPlaybackAudioFrame
bool onPlaybackAudioFrame(const char *channelId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:187
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1606
agora::media::IMediaRecorderObserverEx::onRecorderInfoUpdated
virtual void onRecorderInfoUpdated(const RecorderInfo &info)=0
agora::media::IMediaRecorderObserverEx::onRecorderStateChanged
virtual void onRecorderStateChanged(RecorderState state, RecorderErrorCode error)=0
agora::media::IAudioFrameObserverBase::AudioParams
Definition: AgoraMediaBase.h:958
agora::media::MediaRecorderConfiguration
Definition: AgoraMediaBase.h:1522
agora::rtc::IAVDataObserver::VDataInfo::width
unsigned int width
Definition: media_recorder_i.h:112
agora::rtc::IAVDataObserver::CODEC_AUDIO
CODEC_AUDIO
Definition: media_recorder_i.h:98
agora::rtc::IAVDataObserver::AVData::ainfo
ADataInfo ainfo
Definition: media_recorder_i.h:160
agora::rtc::IAVDataObserver::CODEC_VIDEO_HEVC
@ CODEC_VIDEO_HEVC
Definition: media_recorder_i.h:92
agora::rtc::IMediaRecorderEX::getEarMonitoringAudioParams
AudioParams getEarMonitoringAudioParams() override
Definition: media_recorder_i.h:203
agora::media::IVideoEncodedFrameObserver
Definition: AgoraMediaBase.h:1202
agora::rtc::IAVDataObserver::AVDATA_TYPE
AVDATA_TYPE
Definition: media_recorder_i.h:71
agora::rtc::IAVDataObserver::VDataInfo::frameType
int frameType
Definition: media_recorder_i.h:114
agora::rtc::IAVDataObserver::CODEC_AUDIO_AAC
@ CODEC_AUDIO_AAC
Definition: media_recorder_i.h:104
agora::rtc::IAVDataObserver::CODEC_AUDIO_PCM
@ CODEC_AUDIO_PCM
Definition: media_recorder_i.h:101
agora::rtc::IAVDataObserver::VDataInfo::equal
bool equal(const VDataInfo &vinfo) const
Definition: media_recorder_i.h:116
agora::rtc::IMediaRecorderEX::onPlaybackAudioFrameBeforeMixing
bool onPlaybackAudioFrameBeforeMixing(const char *channelId, user_id_t userId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:190
agora::rtc::uid_t
unsigned int uid_t
Definition: AgoraMediaBase.h:29
agora::rtc::IAVDataObserver::AVDATA_AUDIO
@ AVDATA_AUDIO
Definition: media_recorder_i.h:80
agora::rtc::IAVDataObserver::AVData::type
enum AVDATA_TYPE type
Definition: media_recorder_i.h:143
agora::rtc::IAVDataObserver::CODEC_AUDIO_G722
@ CODEC_AUDIO_G722
Definition: media_recorder_i.h:107
agora::rtc::IAVDataObserver::VDataInfo::rotation
int rotation
Definition: media_recorder_i.h:115
agora::rtc::IAVDataObserver::CODEC_VIDEO
CODEC_VIDEO
Definition: media_recorder_i.h:86
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1596
agora::rtc::IMediaRecorderEX::onEarMonitoringAudioFrame
bool onEarMonitoringAudioFrame(AudioFrame &audioFrame) override
Definition: media_recorder_i.h:189
agora::rtc::IMediaRecorderEX::setRemoteUid
virtual void setRemoteUid(uid_t uid)=0
rtc
Definition: video_node_i.h:26
agora::rtc::IAVDataObserver::ADataInfo::sample_size
unsigned int sample_size
Definition: media_recorder_i.h:127