Iphone 使用音频队列服务录制的音频数据
我想把声音从一台iPhone传送到另一台。我已经使用TCP在两台iPhone之间建立了连接,并且我已经成功地在iPhone上录制语音,并使用音频队列服务播放语音。我还设法在两部iPhone之间发送数据。我通过发送NSData包来实现这一点 我的下一步是在录制时将音频数据发送到另一部iPhone。我相信我应该在Iphone 使用音频队列服务录制的音频数据,iphone,audio,nsdata,recording,audioqueueservices,Iphone,Audio,Nsdata,Recording,Audioqueueservices,我想把声音从一台iPhone传送到另一台。我已经使用TCP在两台iPhone之间建立了连接,并且我已经成功地在iPhone上录制语音,并使用音频队列服务播放语音。我还设法在两部iPhone之间发送数据。我通过发送NSData包来实现这一点 我的下一步是在录制时将音频数据发送到另一部iPhone。我相信我应该在AudioInputCallback中这样做。我的AudioQueueBufferRef名为inBuffer,似乎我想将inBuffer->mAudioData转换为NSData,然后将NS
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);
}
您可能想考虑保存音频数据(您的示例显示音频样本指针和字节计数),从音频回调到另一个队列或FIFO,然后有一个单独的网络线程从音频字节创建NSATDATA并发送它。我不知道为什么我应该使用另一个队列。你能详细说明一下吗?您没有将数据转换为NSData的示例代码吗?