2013-09-09 4 views
3

Мне удалось отправить и получить NSData с одного iPhone на другой, используя Bonjour. Я написал обратные вызовы для записи звука с помощью аудио очереди и послал NSData используя следующую функцию обратного вызова на стороне отправителя:Как отправлять и получать Live-аудио с одного iPhone-микрофона на другой iPhone-динамик?

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); 
} 

В приведенном выше коде я сумел отправить inBuffer-> mAudioData преобразуется в NSData и отправить его на другом iPhone. Я также получил те же данные на приемнике iPhone.

Но теперь я не знаю, как читать эти NSData. Как преобразовать эти данные в аудиоформат и прослушать этот звук на динамике. Нужно ли использовать звуковые очереди на стороне приемника или использовать простой AVPlayer для прослушивания звука. Если кто-то может помочь решить проблему, это будет большой помощью.

+0

Я нахожусь на треке worng, есть ли другой способ достичь этого? – Geekoder

+0

Вам удалось воспроизвести данные? Если да, напишите несколько советов. Я столкнулся с подобной проблемой. – moenad

+0

Нет, я застрял здесь и не смог ничего сделать перед этим. – Geekoder

ответ

0

Для использования NSData просто используйте метод NSData writeToFile: atomically:. Перейдите в путь NSTemporary() и добавьте компонент пути, например, temp.mp4. В этот момент у вас есть файлпат с действительными данными, которые можно использовать для загрузки аудиоактивности. AVAudioPlayer может поддерживать загрузку с URL-адреса.

ИЛИ с прошивкой 7.0+

Вы можете инициализировать AVAudioPlayer непосредственно с объектом NSData.

инициализации (данные данные: NSData, fileTypeHint utiString: String) бросает

эт. al ...

 Смежные вопросы

  • Нет связанных вопросов^_^