在一台设备上录制音频,并使用UDP在另一台设备上播放

时间:2012-04-11 03:03:13

标签: avaudioplayer cmsamplebufferref

我想从一台iOS设备录制音频,然后同时发送并播放到另一台设备。

我尝试使用AVCaptureAudioDataOutput并在两端正确发送/接收CMSampleBufferRef,但是当我在接收设备上播放时,我得到:Error Domain = NSOSStatusError Domain Code = 1954115647。

我使用以下代码将收到的CMSampleBufferRef转换为发件人设备上的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;
}

以及在接收器设备上播放音频的代码:

audioPlayer = [[AVAudioPlayer alloc] initWithData:audioData error:&error];
audioPlayer.numberOfLoops = -1;
audioPlayer.volume = 1.0;
if (audioPlayer == nil)
    NSLog(@"%@", [error description]);
else
    [audioPlayer play];

它似乎无法识别收到的字节为正确的音频格式。

请帮我收到这个问题。

感谢。

0 个答案:

没有答案