3

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 を使用してサウンドを聞く必要がありますか? 誰かがそれを解決するのを助けることができれば、それは大きな助けになるでしょう.

4

1 に答える 1

0

NSData を使用するには、NSData の writeToFile:atomically: メソッドを使用します。NSTemporary() パスを渡し、「temp.mp4」のようなパス コンポーネントを追加します。その時点で、オーディオ アセットの読み込みに使用できる有効なデータを含む filePath が作成されます。AVAudioPlayer は、URL からの読み込みをサポートできます。

またはiOS 7.0以降

NSData オブジェクトを使用して AVAudioPlayer を直接初期化できます。

init(data data: NSData, fileTypeHint utiString: String?) スロー

ら。アル...

于 2015-12-06T19:41:52.057 に答える