我想从一台 iOS 设备录制音频并同时发送和播放到另一台设备。
我尝试在两端正确使用 AVCaptureAudioDataOutput 和发送/接收 CMSampleBufferRef 但是当我在接收器设备上播放它时,我得到:错误域 = NSOSStatusError 域代码 = 1954115647。
我正在使用以下代码将收到的 CMSampleBufferRef 转换为 Sender Device 上的 NSData :
if (captureOutput == audioOutput) {
AudioBufferList audioBufferList;
NSMutableData *data=[[NSMutableData alloc] init];
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &audioBufferList,
sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
for( int y=0; y<audioBufferList.mNumberBuffers; y++ )
{
AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
Float32 *frame = (Float32*)audioBuffer.mData;
[data appendBytes:frame length:audioBuffer.mDataByteSize];
}
[self performSelectorOnMainThread:@selector(sendAudio:) withObject:data waitUntilDone:NO];
CFRelease(blockBuffer);
blockBuffer=NULL;
}
和以下代码在 Receiver Device 上播放音频:
audioPlayer = [[AVAudioPlayer alloc] initWithData:audioData error:&error];
audioPlayer.numberOfLoops = -1;
audioPlayer.volume = 1.0;
if (audioPlayer == nil)
NSLog(@"%@", [error description]);
else
[audioPlayer play];
它似乎无法将接收到的字节识别为正确的音频格式。
请帮我接收这个问题。
谢谢。