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 virtual void NotifyMicState(int state, int reason) = 0; // state: 0:open 1:close, reason: DEVICE_REASON_XXX only valid when mic closed
82 };
83
84
86 {
87 bool bEncode; /*
88 bEncode == false, external prep output PCM data.
89 bEncode == true, external prep output AAC encode data(only support aac encode)
90 */
91 int nSampleRate; //pcm capture or encode sample rate, if 0 use sdk inner sample rate..
92 int nChannel; //pcm capture or encode channels. if 0 use sdk inner channels.
93 int nSamples; /*
94 bEncode == false, if nSamples == 0. use sdk inner samples, push 10ms audio data to external prep module once.
95 else push nSamples(nSamples >= 160 AND nSamples <= 2048) audio data to external prep module once,
96 some audio processing algorithm may need length not 10ms.
97
98 bEncode == true, AAC encode one frame need samples(480/512/1024/1960/2048).
99 */
101 {
102 bEncode = false;
103 nSampleRate = 0;
104 nChannel = 0;
105 nSamples = 0;
106 }
107
108 };
109
110 const int MAX_SAMPLES_IN_FRAME = 3200;
111 typedef void(*OnVeAudioProcCallback)(void *callback_context, const AudioFrame& inFrame, AudioFrame& outFrame);
112 /*
113 const AudioFrame& inFrame:
114 caller fill the input data to handle,refer to struct AudioFrame:
115 AudioFrame.frameType = TYPE_PCM;
116 AudioFrame.timeStamp = 0;
117 AudioFrame.configLen = 0;
118 AudioFrame.bufLen = AudioFrame.samples * AudioFrame.channels * 2(bitDepthInByte);
119
120 AudioFrame& outFrame:
121 outFrame is used for receiving data after called handle.
122 caller(zego sdk)will allocate the outFrame.buffer and tell the outFrame.bufLen(allocated buffer length that store output data max length),
123 after the called handle. called will alert outFrame.configLen/outFrame.bufLen and write handled data in outFrame.buffer, needn't fill timeStamp.
124
125 if AACEncodeSet.bEncode = true, data after handling must be TYPE_AAC_STREAM:
126 outFrame.frameType = TYPE_AAC_STREAM;
127 outFrame.timeStamp = 0;
128
129 if AACEncodeSet.bEncode = false, data after handling must be TYPE_PCM:
130 outFrame.frameType = TYPE_PCM;
131 AudioFrame.timeStamp = 0;
132 AudioFrame.configLen = 0;
133 AudioFrame.bufLen = AudioFrame.samples * AudioFrame.channels * 2(bitDepthInByte);
134
135 PS:
136 Even without any treatment, you need copy data from inFrame to outFrame,else the outFrame.buffer is empty data(all zeros/000000....0000);
137 */
138
139 //SetExternalAudioPreProcCallback
140 /* for audio prep-process */
143
144 //SetExternalAudioPostProcCallback
145 /* for audio post-process only support now:
146 ExtPostpSet.bEncode = false; */
148 typedef void(*OnVePostpCallback)(void *callback_context, const char* streamId, const AudioFrame& inFrame, AudioFrame& outFrame);
149
150 //SetExternalAudioProcCallbackAfterLoopback
151 /* for audio process after loopback in encdoer module only support now:
152 ExtPostpSet.bEncode = false; */
153
155 {
156 public:
157 virtual int Process(const unsigned char *in, int inLen, int inSampleRate, int inChannels,
158 unsigned char *out, int *outLen, int outSampleRate, int outChannels) = 0;
159 };
160
162 {
163 public:
164 const static int MAX_INSTANCE_CAPACITY = 2;
165 enum
166 {
170 };
171
172 enum
173 {
176 };
177
178 virtual void EnablePushAudioFrame(bool enable) = 0;
179 virtual bool OnPushAudioFrame(const AudioFrame& audioFrame) = 0;
180
182 {
183 public:
184 virtual int OnPullAudioFrame(AudioFrame& audioFrame) = 0;
185 };
186
187 virtual int SetPullCallback(PullCallback* callback) = 0;
188 virtual int EnableAEC(int status) = 0;
189 virtual void StartCapture() = 0;
190 virtual void StopCapture() = 0;
191 virtual void SetVolume(int volume) = 0;
192 virtual void SetExtFlags(int flags) = 0;
193 virtual int GetExtFlags() = 0;
194 virtual void MuteMic(bool bMute) = 0;
195 };
196}
197
198#endif
Definition: audio_in_output.h:155
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 NotifyMicState(int state, int reason)=0
virtual void stopRender()=0
virtual bool onPlaybackAudioFrame(AudioFrame &audioFrame)=0
Definition: audio_in_output.h:182
virtual int OnPullAudioFrame(AudioFrame &audioFrame)=0
Definition: audio_in_output.h:162
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:164
@ EXT_FLAGS_IOS_KEEP_ALIVE
Definition: audio_in_output.h:175
@ EXT_FLAGS_NONE
Definition: audio_in_output.h:174
virtual int EnableAEC(int status)=0
virtual void MuteMic(bool bMute)=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:169
@ USAGE_NONE
Definition: audio_in_output.h:167
@ USAGE_CAP
Definition: audio_in_output.h:168
Definition: audio_capture.h:4
void(* OnVePostpCallback)(void *callback_context, const char *streamId, const AudioFrame &inFrame, AudioFrame &outFrame)
Definition: audio_in_output.h:148
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
const int MAX_SAMPLES_IN_FRAME
Definition: audio_in_output.h:110
void(* OnVeAudioProcCallback)(void *callback_context, const AudioFrame &inFrame, AudioFrame &outFrame)
Definition: audio_in_output.h:111
OnVeAudioProcCallback OnPrepCallback
Definition: audio_in_output.h:142
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:86
ExtAudioProcSet()
Definition: audio_in_output.h:100
int nChannel
Definition: audio_in_output.h:92
int nSamples
Definition: audio_in_output.h:93
int nSampleRate
Definition: audio_in_output.h:91
bool bEncode
Definition: audio_in_output.h:87