Я хочу передавать голос с одного iPhone на другой. Я установил соединение между двумя iPhone по протоколу TCP, и мне удалось записать голос на iPhone и воспроизвести его с помощью Audio Queue Services. Мне также удалось отправить данные между двумя iPhone. Я делаю это, отправляя пакеты NSData.
Мой следующий шаг - отправка аудиоданных на другой iPhone во время записи. Я считаю, что я должен сделать это в AudioInputCallback
. Мой AudioQueueBufferRef
называется inBuffer
, и кажется, что я хочу преобразовать inBuffer->mAudioData
в NSData, а затем отправить NSData на другое устройство и затем распаковать его.
Кто-нибудь знает, будет ли это способ сделать это и как я могу конвертировать inBuffer->mAudioData
в NSData? Другие подходы также приветствуются.
Это мой метод обратного вызова, в котором я считаю, что я должен «захватить» данные и отправить их на другой iPhone:
void AudioInputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, const AudioStreamPacketDescription *inPacketDescs)
{
RecordState *recordState = (RecordState *)inUserData;
if(!recordState->recording)
return;
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData);
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}