Bonjourを使用して、あるiPhoneから別のiPhoneにNSDataを送受信できました。Audio Queue を使用してオーディオを録音するためのコールバックを作成し、送信側で次のコールバックを使用して 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, returning\n");
}
// if (inNumberPacketDescriptions == 0 && recordState->dataFormat.mBytesPerPacket != 0)
// {
// inNumberPacketDescriptions = inBuffer->mAudioDataByteSize / recordState->dataFormat.mBytesPerPacket;
// }
printf("Writing buffer %lld\n", 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 の読み方がわかりません。このデータをオーディオ形式に変換し、このオーディオをスピーカーで聞く方法。レシーバー側で Audio Queues を使用する必要がありますか、それとも単純な AVPlayer を使用してサウンドを聞く必要がありますか? 誰かがそれを解決するのを助けることができれば、それは大きな助けになるでしょう.