ZegoLiveRoom
audio_in_output.h
Go to the documentation of this file.
1//
2// ZegoAudioInOutput.h
3// zegoavkit
4//
5// Copyright © 2017 Zego. All rights reserved.
6//
7#ifndef ZEGOAudioInOutput_h
8#define ZEGOAudioInOutput_h
9
10namespace AVE
11{
13 {
14 TYPE_PCM = 0x1001, //PCM
15 TYPE_PCM_TS_10MS = 0x1002, //PCM with ts and every frame is 10ms pcm data.
16 TYPE_PCM_10MS = 0x1003, //PCM without ts and every frame is 10ms pcm data.//engine inner use
17 TYPE_AAC_STREAM = 0x100A, //AAC encode data
18 TYPE_OPUS_STREAM = 0x100B, //opus encode data
19 };
20
21 /*
22 TYPE_PCM: Buffer data only contail pcm data.
23
24 |-----------------------------------------buffer data(bufLen)-----------------------------------|
25 |-----------------------------------------pcm data(pcmLen)--------------------------------------|
26
27 configLen = 0.
28 pcmLen = bufLen = 2 * samples * channels. (only need correct fill samples and channels, inner will calculate bufLen).
29
30
31 TYPE_AAC_STREAM: Buffer data is made up of specail config and encode data.
32
33 |-----------------------------------------buffer data(bufLen)-----------------------------------|
34 |----special config(configLen)------|-----------------encode data(encodeLen)--------------------|
35
36 encodeLen = bufLen - configLen.
37 if configLen == 0: indicate this frame only contain aac encode data.
38 if configLen == bufLen: indicate this frame only contain aac special config(encodeLen = bufLen - configLen = 0).
39 if (config != 0) && (configLen < bufLen): indicate this frame contain special config and encode data.
40 */
42 {
44 {
45 frameType = 0;
46 samples = 0;
48 channels = 0;
49 sampleRate = 0;
50 timeStamp = 0.0;
51 configLen = 0;
52 bufLen = 0;
53 buffer = 0;
54 }
55
56 int frameType; //refer to enum FrameType
57 int samples; //PCM:capture pcm samples at this input. AAC:aac encode one frame need samples
58 int bytesPerSample; //bytes per sample = 2 * channels, current bit depth only support 16bit(2 bytes).
59 int channels; //channels, 1 or 2.
60 int sampleRate; //PCM: capture sample rate; AAC: encode sample rate. supported [16k/32k/44.1k/48k]
61 double timeStamp; //time stamp, PCM: 0; AAC: 0 or encode timeStamp, if buffer data only contain special config fill 0.
62 //pre process callback: capture timestamp(ms);
63 //post process callback: signle stream: play timestamp(ms), mutil stream: ignore this value
64 int configLen; //aac special config Len, PCM: 0; AAC: range [0-64]. 0 indicate this frame not contain spcial config.
65 int bufLen; /*buffer Length, PCM bufLen = 2 * samples * channels(only need correct fill samples and channels,
66 not use filed bufLen). AAC encode data len = bufLen - configLen.*/
67 unsigned char* buffer; //data buffer, the caller is responsible for buffer allocate and release
68 };
69
71 {
72 public:
73 virtual void startCapture() = 0;
74 virtual void stopCapture() = 0;
75 virtual void startRender() = 0;
76 virtual void stopRender() = 0;
77 virtual bool onRecordAudioFrame(const AudioFrame& audioFrame) = 0;
78 virtual bool onPlaybackAudioFrame(AudioFrame& audioFrame) = 0;
79 virtual void onRefFrame(const AudioFrame& audioFrame) = 0;
80 virtual void SetAudioRoute(int route) = 0;
81 };
82
83
85 {
86 bool bEncode; /*
87 bEncode == false, external prep output PCM data.
88 bEncode == true, external prep output AAC encode data(only support aac encode)
89 */
90 int nSampleRate; //pcm capture or encode sample rate, if 0 use sdk inner sample rate..
91 int nChannel; //pcm capture or encode channels. if 0 use sdk inner channels.
92 int nSamples; /*
93 bEncode == false, if nSamples == 0. use sdk inner samples, push 10ms audio data to external prep module once.
94 else push nSamples(nSamples >= 160 AND nSamples <= 2048) audio data to external prep module once,
95 some audio processing algorithm may need length not 10ms.
96
97 bEncode == true, AAC encode one frame need samples(480/512/1024/1960/2048).
98 */
100 {
101 bEncode = false;
102 nSampleRate = 0;
103 nChannel = 0;
104 nSamples = 0;
105 }
106
107 };
108
109 const int MAX_SAMPLES_IN_FRAME = 3200;
110 typedef void(*OnAudioProcCallback)(const AudioFrame& inFrame, AudioFrame& outFrame);
111 /*
112 const AudioFrame& inFrame:
113 caller fill the input data to handle,refer to struct AudioFrame:
114 AudioFrame.frameType = TYPE_PCM;
115 AudioFrame.timeStamp = 0;
116 AudioFrame.configLen = 0;
117 AudioFrame.bufLen = AudioFrame.samples * AudioFrame.channels * 2(bitDepthInByte);
118
119 AudioFrame& outFrame:
120 outFrame is used for receiving data after called handle.
121 caller(zego sdk)will allocate the outFrame.buffer and tell the outFrame.bufLen(allocated buffer length that store output data max length),
122 after the called handle. called will alert outFrame.configLen/outFrame.bufLen and write handled data in outFrame.buffer, needn't fill timeStamp.
123
124 if AACEncodeSet.bEncode = true, data after handling must be TYPE_AAC_STREAM:
125 outFrame.frameType = TYPE_AAC_STREAM;
126 outFrame.timeStamp = 0;
127
128 if AACEncodeSet.bEncode = false, data after handling must be TYPE_PCM:
129 outFrame.frameType = TYPE_PCM;
130 AudioFrame.timeStamp = 0;
131 AudioFrame.configLen = 0;
132 AudioFrame.bufLen = AudioFrame.samples * AudioFrame.channels * 2(bitDepthInByte);
133
134 PS:
135 Even without any treatment, you need copy data from inFrame to outFrame,else the outFrame.buffer is empty data(all zeros/000000....0000);
136 */
137
138 //SetExternalAudioPreProcCallback
139 /* for audio prep-process */
142
143 //SetExternalAudioPostProcCallback
144 /* for audio post-process only support now:
145 ExtPostpSet.bEncode = false; */
147 typedef void(*OnPostpCallback)(const char* streamId, const AudioFrame& inFrame, AudioFrame& outFrame);
148
149 //SetExternalAudioProcCallbackAfterLoopback
150 /* for audio process after loopback in encdoer module only support now:
151 ExtPostpSet.bEncode = false; */
152
154 {
155 public:
156 virtual int Process(const unsigned char *in, int inLen, int inSampleRate, int inChannels,
157 unsigned char *out, int *outLen, int outSampleRate, int outChannels) = 0;
158 };
159
161 {
162 public:
163 const static int MAX_INSTANCE_CAPACITY = 2;
164 enum
165 {
169 };
170
171 enum
172 {
175 };
176
177 virtual void EnablePushAudioFrame(bool enable) = 0;
178 virtual bool OnPushAudioFrame(const AudioFrame& audioFrame) = 0;
179
181 {
182 public:
183 virtual int OnPullAudioFrame(AudioFrame& audioFrame) = 0;
184 };
185
186 virtual int SetPullCallback(PullCallback* callback) = 0;
187 virtual int EnableAEC(int status) = 0;
188 virtual void StartCapture() = 0;
189 virtual void StopCapture() = 0;
190 virtual void SetVolume(int volume) = 0;
191 virtual void SetExtFlags(int flags) = 0;
192 virtual int GetExtFlags() = 0;
193 };
194}
195
196#endif
Definition: audio_in_output.h:154
virtual int Process(const unsigned char *in, int inLen, int inSampleRate, int inChannels, unsigned char *out, int *outLen, int outSampleRate, int outChannels)=0
Definition: audio_in_output.h:71
virtual void startCapture()=0
virtual bool onRecordAudioFrame(const AudioFrame &audioFrame)=0
virtual void SetAudioRoute(int route)=0
virtual void startRender()=0
virtual void onRefFrame(const AudioFrame &audioFrame)=0
virtual void stopCapture()=0
virtual void stopRender()=0
virtual bool onPlaybackAudioFrame(AudioFrame &audioFrame)=0
Definition: audio_in_output.h:181
virtual int OnPullAudioFrame(AudioFrame &audioFrame)=0
Definition: audio_in_output.h:161
virtual void StartCapture()=0
virtual void SetVolume(int volume)=0
virtual void EnablePushAudioFrame(bool enable)=0
virtual void SetExtFlags(int flags)=0
static const int MAX_INSTANCE_CAPACITY
Definition: audio_in_output.h:163
@ EXT_FLAGS_IOS_KEEP_ALIVE
Definition: audio_in_output.h:174
@ EXT_FLAGS_NONE
Definition: audio_in_output.h:173
virtual int EnableAEC(int status)=0
virtual int GetExtFlags()=0
virtual void StopCapture()=0
virtual int SetPullCallback(PullCallback *callback)=0
virtual bool OnPushAudioFrame(const AudioFrame &audioFrame)=0
@ USAGE_AUX
Definition: audio_in_output.h:168
@ USAGE_NONE
Definition: audio_in_output.h:166
@ USAGE_CAP
Definition: audio_in_output.h:167
Definition: audio_capture.h:4
OnAudioProcCallback OnPrepCallback
Definition: audio_in_output.h:141
FrameType
Definition: audio_in_output.h:13
@ TYPE_AAC_STREAM
Definition: audio_in_output.h:17
@ TYPE_OPUS_STREAM
Definition: audio_in_output.h:18
@ TYPE_PCM_10MS
Definition: audio_in_output.h:16
@ TYPE_PCM_TS_10MS
Definition: audio_in_output.h:15
@ TYPE_PCM
Definition: audio_in_output.h:14
void(* OnPostpCallback)(const char *streamId, const AudioFrame &inFrame, AudioFrame &outFrame)
Definition: audio_in_output.h:147
void(* OnAudioProcCallback)(const AudioFrame &inFrame, AudioFrame &outFrame)
Definition: audio_in_output.h:110
const int MAX_SAMPLES_IN_FRAME
Definition: audio_in_output.h:109
Definition: audio_in_output.h:42
int frameType
Definition: audio_in_output.h:56
int bufLen
Definition: audio_in_output.h:65
int bytesPerSample
Definition: audio_in_output.h:58
int sampleRate
Definition: audio_in_output.h:60
unsigned char * buffer
Definition: audio_in_output.h:67
int configLen
Definition: audio_in_output.h:64
double timeStamp
Definition: audio_in_output.h:61
int channels
Definition: audio_in_output.h:59
AudioFrame()
Definition: audio_in_output.h:43
int samples
Definition: audio_in_output.h:57
Definition: audio_in_output.h:85
ExtAudioProcSet()
Definition: audio_in_output.h:99
int nChannel
Definition: audio_in_output.h:91
int nSamples
Definition: audio_in_output.h:92
int nSampleRate
Definition: audio_in_output.h:90
bool bEncode
Definition: audio_in_output.h:86