如何从一个iPhone麦克风向另一个iPhone扬声器发送和接收实时音频



我已经设法使用Bonjour从一部iPhone发送和接收NSData到另一部iPhone。我已经编写了使用音频队列录制音频的回调,并在发送端使用以下回调发送了 NSData:

    void AudioInputCallback(void * inUserData,
                    AudioQueueRef inAQ,
                    AudioQueueBufferRef inBuffer,
                    const AudioTimeStamp * inStartTime,
                    UInt32 inNumberPacketDescriptions,
                    const AudioStreamPacketDescription * inPacketDescs)
{
RecordState * recordState = (RecordState*)inUserData;
if (!recordState->recording)
{
    printf("Not recording, returningn");
}
// if (inNumberPacketDescriptions == 0 && recordState->dataFormat.mBytesPerPacket != 0)
// {
//     inNumberPacketDescriptions = inBuffer->mAudioDataByteSize / recordState->dataFormat.mBytesPerPacket;
// }
printf("Writing buffer %lldn", recordState->currentPacket);
OSStatus status = AudioFileWritePackets(recordState->audioFile,
                                        false,
                                        inBuffer->mAudioDataByteSize,
                                        inPacketDescs,
                                        recordState->currentPacket,
                                        &inNumberPacketDescriptions,
                                        inBuffer->mAudioData);
NSLog(@"DATA = %@",[NSData dataWithBytes:inBuffer->mAudioData length:inBuffer->mAudioDataByteSize]);
[[NSNotificationCenter defaultCenter] postNotificationName:@"Recording" object:[NSData dataWithBytes:inBuffer->mAudioData length:inBuffer->mAudioDataByteSize]];
if (status == 0)
{
    recordState->currentPacket += inNumberPacketDescriptions;
}
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}

在上面的代码中,我设法发送转换为NSData的inBuffer->mAudioData并将其发送到另一部iPhone上。我也在接收器iPhone上收到了相同的数据。

但是现在我不知道如何阅读这个 NSData。如何将此数据转换为音频格式并在扬声器上收听此音频。我是否需要在接收器端使用音频队列,还是使用简单的 AVPlayer 来收听声音。如果有人可以帮助解决,那将是一个很大的帮助。

要使用 NSData,只需使用 NSData writeToFile:atomally: 方法。传入 NSTemporary() 路径并附加一个路径组件,如 "temp.mp4"。此时,您有一个包含有效数据的 filePath,可用于加载音频资产。AVAudioPlayer 可以支持从 URL 加载。

或与 iOS 7.0+ 一起使用

您可以直接使用 NSData 对象初始化 AVAudioPlayer。

init(data data: NSData, fileTypeHint utiString: String?) 抛出

等...

最新更新