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 
32 namespace rtc {
33 
37  public:
41  enum AVDATA_TYPE {
51  };
52 
53  enum CODEC_VIDEO {
63  };
64 
65  enum CODEC_AUDIO {
75  };
76 
77  struct VDataInfo {
78  unsigned int codec;
79  unsigned int width;
80  unsigned int height;
81  int frameType;
82  int rotation;
83  bool equal(const VDataInfo& vinfo) const {
84  return codec == vinfo.codec && width == vinfo.width && height == vinfo.height &&
85  rotation == vinfo.rotation;
86  }
87  };
88 
89  struct ADataInfo {
90  unsigned int codec;
91  unsigned int bitwidth;
92  unsigned int sample_rate;
93  unsigned int channel;
94  unsigned int sample_size;
95 
96  bool equal(const ADataInfo& ainfo) const {
97  return codec == ainfo.codec && bitwidth == ainfo.bitwidth &&
98  sample_rate == ainfo.sample_rate && channel == ainfo.channel;
99  };
100  };
101 
102  struct AVData {
106  unsigned int uid;
110  enum AVDATA_TYPE type;
113  unsigned int size;
116  unsigned char* buffer;
119  unsigned int timestamp;
128  };
129 
130  virtual ~IAVDataObserver(){};
131 
136  virtual bool onAVDataReady(const AVData& avdata) = 0;
137 };
138 
140  public:
141 
142  virtual int startRecording(const media::MediaRecorderConfiguration& config) = 0;
143 
144  virtual int stopRecording() = 0;
145 
146  virtual void release() = 0;
147 
149 
150  virtual void setSysVersion(int sys_version) = 0;
151 
152  bool onRecordAudioFrame(const char* channelId, AudioFrame& audioFrame) override {
153  AVData avdata;
154  avdata.type = AVDATA_AUDIO;
155  avdata.ainfo.sample_size = audioFrame.samplesPerChannel * audioFrame.channels;
156  avdata.size = avdata.ainfo.sample_size * audioFrame.bytesPerSample;
157  avdata.buffer = static_cast<unsigned char*>(audioFrame.buffer);
158  avdata.timestamp = audioFrame.renderTimeMs;
159  avdata.ainfo.codec = CODEC_AUDIO_PCM;
160  avdata.ainfo.bitwidth = audioFrame.bytesPerSample * 8;
161  avdata.ainfo.sample_rate = audioFrame.samplesPerSec;
162  avdata.ainfo.channel = audioFrame.channels;
163  return onAVDataReady(avdata);
164  }
165  bool onPlaybackAudioFrame(const char* channelId, AudioFrame& audioFrame) override{return true;}
166  bool onMixedAudioFrame(const char* channelId, AudioFrame& audioFrame) override{return true;}
167  bool onEarMonitoringAudioFrame(AudioFrame& audioFrame) override { return true; }
168  bool onPlaybackAudioFrameBeforeMixing(const char* channelId, user_id_t userId, AudioFrame& audioFrame) override {
169  return true;
170  }
171 
174  }
175 
177 
179 
180  AudioParams getMixedAudioParams() override { return AudioParams(); }
181 
183 
184  virtual bool onEncodedVideoFrameReceived(rtc::uid_t uid, const uint8_t* imageBuffer, size_t length,
185  const rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo) override {
187  avData.type = AVDATA_VIDEO;
188  avData.size = length;
189  avData.buffer = (unsigned char *)imageBuffer;
190  avData.vinfo.codec = videoEncodedFrameInfo.codecType;
191  avData.vinfo.width = videoEncodedFrameInfo.width;
192  avData.vinfo.height = videoEncodedFrameInfo.height;
193  avData.vinfo.frameType = videoEncodedFrameInfo.frameType;
194  avData.vinfo.rotation = videoEncodedFrameInfo.rotation;
195  return onAVDataReady(avData);
196  }
197 };
198 
199 } // namespace rtc
200 } // 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:56
agora::rtc::IAVDataObserver::AVData
Definition: media_recorder_i.h:102
agora::rtc::IAVDataObserver::VDataInfo::codec
unsigned int codec
Definition: media_recorder_i.h:78
agora::rtc::IMediaRecorderEX::getRecordAudioParams
AudioParams getRecordAudioParams() override
Definition: media_recorder_i.h:178
agora::rtc::EncodedVideoFrameInfo::rotation
VIDEO_ORIENTATION rotation
Definition: AgoraBase.h:1593
agora::media::IMediaRecorderObserver
Definition: AgoraMediaBase.h:1582
agora::media::IAudioFrameObserverBase
Definition: AgoraMediaBase.h:790
agora::rtc::IAVDataObserver::ADataInfo
Definition: media_recorder_i.h:89
agora::rtc::IAVDataObserver::AVDATA_VIDEO
@ AVDATA_VIDEO
Definition: media_recorder_i.h:47
agora::media::IAudioFrameObserverBase::AudioFrame::renderTimeMs
int64_t renderTimeMs
Definition: AgoraMediaBase.h:842
agora::rtc::IMediaRecorderEX::onMixedAudioFrame
bool onMixedAudioFrame(const char *channelId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:166
agora::rtc::IMediaRecorderEX::getMixedAudioParams
AudioParams getMixedAudioParams() override
Definition: media_recorder_i.h:180
agora::media::IAudioFrameObserverBase::AudioFrame::channels
int channels
Definition: AgoraMediaBase.h:823
agora::rtc::EncodedVideoFrameInfo
Definition: AgoraBase.h:1526
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:90
agora::media::IAudioFrameObserverBase::AudioFrame
Definition: AgoraMediaBase.h:805
agora::user_id_t
const char * user_id_t
Definition: AgoraBase.h:798
agora::rtc::IAVDataObserver::ADataInfo::channel
unsigned int channel
Definition: media_recorder_i.h:93
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::IAVDataObserver::AVData::timestamp
unsigned int timestamp
Definition: media_recorder_i.h:119
agora::media::IAudioFrameObserverBase::AudioFrame::samplesPerSec
int samplesPerSec
Definition: AgoraMediaBase.h:827
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:96
agora::media::IAudioFrameObserverBase::AudioFrame::buffer
void * buffer
Definition: AgoraMediaBase.h:834
agora::rtc::IAVDataObserver::CODEC_VIDEO_VP8
@ CODEC_VIDEO_VP8
Definition: media_recorder_i.h:62
agora::rtc::IAVDataObserver::AVData::uid
unsigned int uid
Definition: media_recorder_i.h:106
agora::rtc::EncodedVideoFrameInfo::codecType
VIDEO_CODEC_TYPE codecType
Definition: AgoraBase.h:1571
agora::rtc::IAVDataObserver::ADataInfo::bitwidth
unsigned int bitwidth
Definition: media_recorder_i.h:91
agora::rtc::IMediaRecorderEX::getPlaybackAudioParams
AudioParams getPlaybackAudioParams() override
Definition: media_recorder_i.h:176
agora::rtc::IAVDataObserver::AVData::size
unsigned int size
Definition: media_recorder_i.h:113
agora::rtc::IMediaRecorderEX
Definition: media_recorder_i.h:139
agora::rtc::IAVDataObserver::ADataInfo::sample_rate
unsigned int sample_rate
Definition: media_recorder_i.h:92
agora::rtc::EncodedVideoFrameInfo::width
int width
Definition: AgoraBase.h:1575
agora::rtc::IAVDataObserver::AVData::buffer
unsigned char * buffer
Definition: media_recorder_i.h:116
agora::rtc::IAVDataObserver::AVDATA_UNKNOWN
@ AVDATA_UNKNOWN
Definition: media_recorder_i.h:44
agora::rtc::IAVDataObserver::AVData::vinfo
VDataInfo vinfo
Definition: media_recorder_i.h:123
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:184
agora::rtc::IAVDataObserver::~IAVDataObserver
virtual ~IAVDataObserver()
Definition: media_recorder_i.h:130
agora::rtc::IMediaRecorderEX::release
virtual void release()=0
agora::rtc::IAVDataObserver::VDataInfo
Definition: media_recorder_i.h:77
agora::rtc::RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
@ RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
Definition: AgoraMediaBase.h:119
agora::rtc::IAVDataObserver::VDataInfo::height
unsigned int height
Definition: media_recorder_i.h:80
agora::rtc::IAVDataObserver
Definition: media_recorder_i.h:36
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:165
agora::rtc::EncodedVideoFrameInfo::frameType
VIDEO_FRAME_TYPE frameType
Definition: AgoraBase.h:1589
agora::rtc::IMediaRecorderEX::getObservedAudioFramePosition
int getObservedAudioFramePosition() override
Definition: media_recorder_i.h:172
agora::media::IAudioFrameObserverBase::AudioParams
Definition: AgoraMediaBase.h:877
agora::media::MediaRecorderConfiguration
Definition: AgoraMediaBase.h:1525
agora::rtc::IAVDataObserver::VDataInfo::width
unsigned int width
Definition: media_recorder_i.h:79
agora::rtc::IAVDataObserver::CODEC_AUDIO
CODEC_AUDIO
Definition: media_recorder_i.h:65
agora::rtc::IAVDataObserver::AVData::ainfo
ADataInfo ainfo
Definition: media_recorder_i.h:127
agora::media::IAudioFrameObserverBase::AudioFrame::bytesPerSample
agora::rtc::BYTES_PER_SAMPLE bytesPerSample
Definition: AgoraMediaBase.h:817
agora::rtc::IAVDataObserver::CODEC_VIDEO_HEVC
@ CODEC_VIDEO_HEVC
Definition: media_recorder_i.h:59
agora::rtc::IMediaRecorderEX::getEarMonitoringAudioParams
AudioParams getEarMonitoringAudioParams() override
Definition: media_recorder_i.h:182
agora::media::IVideoEncodedFrameObserver
Definition: AgoraMediaBase.h:1121
agora::media::IAudioFrameObserverBase::AudioFrame::samplesPerChannel
int samplesPerChannel
Definition: AgoraMediaBase.h:813
agora::rtc::IAVDataObserver::AVDATA_TYPE
AVDATA_TYPE
Definition: media_recorder_i.h:41
agora::rtc::IAVDataObserver::VDataInfo::frameType
int frameType
Definition: media_recorder_i.h:81
agora::media::IAudioFrameObserverBase::AUDIO_FRAME_POSITION_RECORD
@ AUDIO_FRAME_POSITION_RECORD
Definition: AgoraMediaBase.h:865
agora::rtc::IAVDataObserver::CODEC_AUDIO_AAC
@ CODEC_AUDIO_AAC
Definition: media_recorder_i.h:71
agora::rtc::IAVDataObserver::CODEC_AUDIO_PCM
@ CODEC_AUDIO_PCM
Definition: media_recorder_i.h:68
agora::rtc::IAVDataObserver::VDataInfo::equal
bool equal(const VDataInfo &vinfo) const
Definition: media_recorder_i.h:83
agora::rtc::IMediaRecorderEX::onPlaybackAudioFrameBeforeMixing
bool onPlaybackAudioFrameBeforeMixing(const char *channelId, user_id_t userId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:168
agora::rtc::IMediaRecorderEX::setMediaRecorderObserver
virtual void setMediaRecorderObserver(media::IMediaRecorderObserver *observer)=0
agora::rtc::uid_t
unsigned int uid_t
Definition: AgoraMediaBase.h:29
agora::rtc::IAVDataObserver::AVDATA_AUDIO
@ AVDATA_AUDIO
Definition: media_recorder_i.h:50
agora::rtc::IAVDataObserver::AVData::type
enum AVDATA_TYPE type
Definition: media_recorder_i.h:110
agora::rtc::IAVDataObserver::CODEC_AUDIO_G722
@ CODEC_AUDIO_G722
Definition: media_recorder_i.h:74
agora::rtc::IAVDataObserver::VDataInfo::rotation
int rotation
Definition: media_recorder_i.h:82
agora::rtc::IAVDataObserver::CODEC_VIDEO
CODEC_VIDEO
Definition: media_recorder_i.h:53
agora::rtc::EncodedVideoFrameInfo::height
int height
Definition: AgoraBase.h:1579
agora::rtc::IMediaRecorderEX::onEarMonitoringAudioFrame
bool onEarMonitoringAudioFrame(AudioFrame &audioFrame) override
Definition: media_recorder_i.h:167
rtc
Definition: video_node_i.h:25
agora::rtc::IAVDataObserver::ADataInfo::sample_size
unsigned int sample_size
Definition: media_recorder_i.h:94
agora::rtc::IMediaRecorderEX::onRecordAudioFrame
bool onRecordAudioFrame(const char *channelId, AudioFrame &audioFrame) override
Definition: media_recorder_i.h:152