Skip to content

Commit c31dbc7

Browse files
committed
添加调试对讲8khz采样
Change-Id: I2e9ff0c8304403d0f92c92b885ce57cdcd7ed776
1 parent 24c0e10 commit c31dbc7

File tree

8 files changed

+53
-33
lines changed

8 files changed

+53
-33
lines changed

Source/LinkSDKDemo/Video/P2P/Controller/TIoTDemoPreviewDeviceVC.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ - (void)getDeviceStatusWithType:(NSString *)singleType qualityType:(NSString *)q
218218
// config.channelCount = 1;
219219
// config.sampleSize = 16;
220220
// config.sampleRate = 44100;
221+
222+
//设置会话 withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionAllowBluetooth
223+
// [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];
224+
// [[AVAudioSession sharedInstance] setActive:YES error:nil];
221225
[[TIoTCoreXP2PBridge sharedInstance] sendVoiceToServer:self.deviceName?:@"" channel:channel audioConfig:config];
222226
}
223227

Source/SDK/LinkVideo/AudioFLV/AWAACEncoder.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
#import <AudioToolbox/AudioToolbox.h>
66

77
@interface AWAACEncoder : NSObject
8+
@property (nonatomic,assign) NSInteger sample_rate;
89

910
@property (nonatomic) dispatch_queue_t encoderQueue;
1011
@property (nonatomic) dispatch_queue_t callbackQueue;
11-
@property (nonatomic, assign)Float64 sample_rate;
1212

1313
- (void) encodeSampleBuffer:(CMSampleBufferRef)sampleBuffer completionBlock:(void (^)(NSData *encodedData, NSError* error))completionBlock;
1414

15-
1615
@end

Source/SDK/LinkVideo/AudioFLV/AWAACEncoder.m

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22

33
#import "AWAACEncoder.h"
4-
54
@interface AWAACEncoder()
65
@property (nonatomic) AudioConverterRef audioConverter;
76
@property (nonatomic) uint8_t *aacBuffer;
@@ -39,15 +38,14 @@ - (id) init {
3938
*/
4039
- (void) setupEncoderFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
4140
AudioStreamBasicDescription inAudioStreamBasicDescription = *CMAudioFormatDescriptionGetStreamBasicDescription((CMAudioFormatDescriptionRef)CMSampleBufferGetFormatDescription(sampleBuffer));
42-
NSLog(@"pcm---samplerate-->%f, channel-->%d",inAudioStreamBasicDescription.mSampleRate, inAudioStreamBasicDescription.mChannelsPerFrame);
4341

44-
AudioStreamBasicDescription outAudioStreamBasicDescription = {0};
45-
outAudioStreamBasicDescription.mSampleRate = _sample_rate;
46-
outAudioStreamBasicDescription.mFormatID = kAudioFormatMPEG4AAC;
47-
outAudioStreamBasicDescription.mFormatFlags = kMPEG4Object_AAC_LC;
48-
outAudioStreamBasicDescription.mBytesPerPacket = 0;
49-
outAudioStreamBasicDescription.mFramesPerPacket = 1024;
50-
outAudioStreamBasicDescription.mBytesPerFrame = 0;
42+
AudioStreamBasicDescription outAudioStreamBasicDescription = {0}; // 初始化输出流的结构体描述为0. 很重要。
43+
outAudioStreamBasicDescription.mSampleRate = self.sample_rate;//inAudioStreamBasicDescription.mSampleRate; // 音频流,在正常播放情况下的帧率。如果是压缩的格式,这个属性表示解压缩后的帧率。帧率不能为0。
44+
outAudioStreamBasicDescription.mFormatID = kAudioFormatMPEG4AAC; // 设置编码格式
45+
outAudioStreamBasicDescription.mFormatFlags = kMPEG4Object_AAC_LC; // 无损编码 ,0表示没有
46+
outAudioStreamBasicDescription.mBytesPerPacket = 0; // 每一个packet的音频数据大小。如果的动态大小,设置为0。动态大小的格式,需要用AudioStreamPacketDescription 来确定每个packet的大小。
47+
outAudioStreamBasicDescription.mFramesPerPacket = 1024; // 每个packet的帧数。如果是未压缩的音频数据,值是1。动态码率格式,这个值是一个较大的固定数字,比如说AAC的1024。如果是动态大小帧数(比如Ogg格式)设置为0。
48+
outAudioStreamBasicDescription.mBytesPerFrame = 0; // 每帧的大小。每一帧的起始点到下一帧的起始点。如果是压缩格式,设置为0 。
5149
outAudioStreamBasicDescription.mChannelsPerFrame = 1; // 声道数
5250
outAudioStreamBasicDescription.mBitsPerChannel = 0; // 压缩格式设置为0
5351
outAudioStreamBasicDescription.mReserved = 0; // 8字节对齐,填0.
@@ -68,7 +66,9 @@ - (void) setupEncoderFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
6866
编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。这里指的变换既包括将 信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。编解码器经常用在视频会议和流媒体等应用中。
6967
* @return 指定编码器
7068
*/
71-
- (AudioClassDescription *)getAudioClassDescriptionWithType:(UInt32)type fromManufacturer:(UInt32)manufacturer {
69+
- (AudioClassDescription *)getAudioClassDescriptionWithType:(UInt32)type
70+
fromManufacturer:(UInt32)manufacturer
71+
{
7272
static AudioClassDescription desc;
7373

7474
UInt32 encoderSpecifier = type;
@@ -117,14 +117,14 @@ OSStatus inInputDataProc(AudioConverterRef inAudioConverter, UInt32 *ioNumberDat
117117
AWAACEncoder *encoder = (__bridge AWAACEncoder *)(inUserData);
118118
UInt32 requestedPackets = *ioNumberDataPackets;
119119

120+
// *ioNumberDataPackets = (int)encoder.pcmBufferSize/2;
120121
size_t copiedSamples = [encoder copyPCMSamplesIntoBuffer:ioData];
121122
if (copiedSamples < requestedPackets) {
122123
//PCM 缓冲区还没满
123124
*ioNumberDataPackets = 0;
124125
return -1;
125126
}
126127
*ioNumberDataPackets = 1;
127-
128128
return noErr;
129129
}
130130

@@ -176,6 +176,7 @@ - (void) encodeSampleBuffer:(CMSampleBufferRef)sampleBuffer completionBlock:(voi
176176
NSMutableData *fullData = [NSMutableData dataWithData:adtsHeader];
177177
[fullData appendData:rawAAC];
178178
data = fullData;
179+
// data = rawAAC;
179180
} else {
180181
error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil];
181182
}
@@ -189,21 +190,23 @@ - (void) encodeSampleBuffer:(CMSampleBufferRef)sampleBuffer completionBlock:(voi
189190
});
190191
}
191192

193+
194+
195+
#pragma mark - HEADER
192196
- (NSData*) adtsDataForPacketLength:(NSUInteger)packetLength {
193197
int adtsLength = 7;
194198
char *packet = malloc(sizeof(char) * adtsLength);
195199
// Variables Recycled by addADTStoPacket
196200
int profile = 2; //AAC LC
197201
//39=MediaCodecInfo.CodecProfileLevel.AACObjectELD;
198202
int freqIdx = 4; //44.1KHz
199-
// if (_sample_rate == 44100) {
200-
// freqIdx = 4;
201-
// }else if (_sample_rate == 16000) {
202-
// freqIdx = 8;
203-
// }else if (_sample_rate == 8000) {
204-
// freqIdx = 11;
205-
// }
206-
// int freqIdx = 11; //44.1KHz
203+
if (_sample_rate == 44100) {
204+
freqIdx = 4;
205+
}else if (_sample_rate == 16000) {
206+
freqIdx = 8;
207+
}else if (_sample_rate == 8000) {
208+
freqIdx = 11;
209+
}
207210
/* 其中,samplingFreguencyIndex 对应关系如下:
208211
0 - 96000
209212
1 - 88200

Source/SDK/LinkVideo/AudioFLV/AWAVCapture.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
static aw_data *s_output_buf = NULL;
66
__weak static AWAVCapture *sAWAVCapture = nil;
7+
NSFileHandle *flvAudioFileHandle;
78

89
@interface AWAVCapture()
910
//编码队列,发送队列
@@ -92,6 +93,11 @@ -(void) updateFps:(NSInteger) fps{
9293
}
9394

9495
-(BOOL) startCapture {
96+
NSString *audioFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"abcde.flv"];
97+
[[NSFileManager defaultManager] removeItemAtPath:audioFile error:nil];
98+
[[NSFileManager defaultManager] createFileAtPath:audioFile contents:nil attributes:nil];
99+
flvAudioFileHandle = [NSFileHandle fileHandleForWritingAtPath:audioFile];
100+
95101
if (!self.audioConfig) {
96102
NSLog(@"one of videoConfig and audioConfig must be NON-NULL");
97103
return NO;
@@ -120,6 +126,9 @@ -(void) stopCapture{
120126
[self.sendSampleOpQueue cancelAllOperations];
121127
[self.sendSampleOpQueue waitUntilAllOperationsAreFinished];
122128
});
129+
130+
[flvAudioFileHandle closeFile];
131+
flvAudioFileHandle = NULL;
123132
}
124133

125134
-(void) switchCamera{}
@@ -265,6 +274,8 @@ extern void aw_write_audio_header(){
265274
aw_data *ttt_output_buf = NULL;
266275
aw_write_flv_header(&ttt_output_buf);
267276

277+
NSData *rawFLV = [NSData dataWithBytes:ttt_output_buf->data length:ttt_output_buf->size];
278+
[flvAudioFileHandle writeData:rawFLV];
268279
//send flv header
269280
[sAWAVCapture.delegate capture:ttt_output_buf->data len:ttt_output_buf->size];
270281
// ttt_output_buf
@@ -304,6 +315,9 @@ static void aw_streamer_send_flv_tag_to_rtmp(aw_flv_common_tag *common_tag){
304315
}
305316
}
306317

318+
NSData *rawFLV = [NSData dataWithBytes:s_output_buf->data length:s_output_buf->size];
319+
[flvAudioFileHandle writeData:rawFLV];
320+
307321
//TODO send FLVBody
308322
[sAWAVCapture.delegate capture:s_output_buf->data len:s_output_buf->size];
309323

Source/SDK/LinkVideo/AudioFLV/AWAVConfig.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@interface AWAudioConfig : NSObject<NSCopying>
66
@property (nonatomic, unsafe_unretained) NSInteger bitrate;//可自由设置
77
@property (nonatomic, unsafe_unretained) NSInteger channelCount;//可选 1 2
8-
@property (nonatomic, unsafe_unretained) NSInteger sampleRate;//可选 44100 22050 11025 5500
8+
@property (nonatomic, unsafe_unretained) NSInteger sampleRate;//可选 44100 16000 8000
99
@property (nonatomic, unsafe_unretained) NSInteger sampleSize;//可选 16 8
1010

1111
@property (nonatomic, readonly, unsafe_unretained) aw_faac_config faacConfig;

Source/SDK/LinkVideo/AudioFLV/AWHWAACEncoder.m

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ -(aw_flv_audio_tag *)createAudioSpecificConfigFlvTag{
7676
}else if (self.audioConfig.sampleRate == 8000) {
7777
sampleRate = 11;
7878
}
79-
// uint8_t sampleRate = 11; //44.1KHz
80-
/* 其中,samplingFreguencyIndex 对应关系如下:
79+
/* 其中,samplingFreguencyIndex 对应关系如下:
8180
0 - 96000
8281
1 - 88200
8382
2 - 64000
@@ -111,6 +110,8 @@ -(aw_flv_audio_tag *)createAudioSpecificConfigFlvTag{
111110
}
112111

113112
-(void)open{
113+
_faacConfig = self.audioConfig.faacConfig;
114+
/*
114115
//创建audio encode converter
115116
AudioStreamBasicDescription inputAudioDes = {
116117
.mFormatID = kAudioFormatLinearPCM,
@@ -149,14 +150,16 @@ -(void)open{
149150
self.aMaxOutputFrameSize = aMaxOutput;
150151
if (aMaxOutput == 0) {
151152
[self onErrorWithCode:AWEncoderErrorCodeAudioConverterGetMaxFrameSizeFailed des:@"AAC 获取最大frame size失败"];
152-
}
153+
}*/
153154
}
154155

155156
-(void)close{
157+
/*
156158
AudioConverterDispose(_aConverter);
157159
_aConverter = nil;
158160
self.curFramePcmData = nil;
159161
self.aMaxOutputFrameSize = 0;
162+
*/
160163
}
161164

162165
@end

Source/SDK/LinkVideo/AudioFLV/AWSystemAVCapture.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ -(void) createCaptureSession{
6262
}
6363

6464
-(BOOL) startCapture {
65-
// NSString *audioFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"abc.aac"];
66-
// [[NSFileManager defaultManager] removeItemAtPath:audioFile error:nil];
67-
// [[NSFileManager defaultManager] createFileAtPath:audioFile contents:nil attributes:nil];
68-
// audioFileHandle = [NSFileHandle fileHandleForWritingAtPath:audioFile];
65+
NSString *audioFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"abcde.aac"];
66+
[[NSFileManager defaultManager] removeItemAtPath:audioFile error:nil];
67+
[[NSFileManager defaultManager] createFileAtPath:audioFile contents:nil attributes:nil];
68+
audioFileHandle = [NSFileHandle fileHandleForWritingAtPath:audioFile];
6969

7070
[self.captureSession startRunning];
7171
return [super startCapture];
@@ -99,7 +99,7 @@ -(void) createOutput{
9999
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
100100
if (self.isCapturing) {
101101
[self.mAudioEncoder encodeSampleBuffer:sampleBuffer completionBlock:^(NSData *encodedData, NSError *error) {
102-
// [self->audioFileHandle writeData:encodedData];
102+
[self->audioFileHandle writeData:encodedData];
103103
[self sendAudioAACData:encodedData];
104104
}];
105105
}

Source/SDK/LinkVideo/TIoTCoreXP2PBridge.mm

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,6 @@ - (void)sendVoiceToServer:(NSString *)dev_name channel:(NSString *)channel_numbe
173173
}
174174

175175
- (void)sendVoiceToServer:(NSString *)dev_name channel:(NSString *)channel_number audioConfig:(AWAudioConfig *)audio_onfig{
176-
//设置码率
177-
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionAllowBluetooth error:nil];
178-
[[AVAudioSession sharedInstance] setActive:YES error:nil];
179176

180177
self.isSending = YES;
181178

0 commit comments

Comments
 (0)