输入环缓冲区返回0x400帧的静音错误

时间:2016-01-20 08:56:29

标签: ios audio audioqueue audioqueueservices

我正在开发一个应用程序,用于在两个iOS设备之间传输音频数据。

目前我正在使用NSInputStream接收传入的音频和数据到队列中(AudioQueueNewInput)。

AudioQueue的回调是

void TDAudioQueueInputCallback(
                           void* inUserData,
                           AudioQueueRef inAudioQueue,
                           AudioQueueBufferRef inBuffer,
                           const AudioTimeStamp* inStartTime,
                           UInt32 inNumPackets,
                           const AudioStreamPacketDescription* inPacketDesc)
{
    NSLog(@"recordCallback %u", (unsigned int)inBuffer->mAudioDataByteSize);


    TDAudioQueue *audioQueue = (__bridge TDAudioQueue *)inUserData;

    AudioBufferList *audioBufferList = [audioQueue getBufferListFromQueueBuffer:inBuffer];

    [audioQueue sendAudioBufferToRecord:audioBufferList];


    [audioQueue didFreeAudioQueueBuffer:inBuffer];

}

getBufferListFromQueueBuffer方法

-(AudioBufferList *) getBufferListFromQueueBuffer: (AudioQueueBufferRef ) data
{


    if (data->mAudioDataByteSize > 0)
    {
        NSUInteger len = data->mAudioDataByteSize;
        //I guess you can use Byte*, void* or Float32*. I am not sure if that makes any difference.
        Byte * byteData = (Byte*) malloc (len);
        memcpy (byteData, data->mAudioData, len);
        if (byteData)
        {
            AudioBufferList * theDataBuffer =(AudioBufferList*)malloc(sizeof(AudioBufferList) * 1);
            theDataBuffer->mNumberBuffers = 1;
            theDataBuffer->mBuffers[0].mDataByteSize = len;
            theDataBuffer->mBuffers[0].mNumberChannels = 1;
            theDataBuffer->mBuffers[0].mData = byteData;
            // Read the data into an AudioBufferList
            return theDataBuffer;
        }
    }
    return nil;
}

在此之后我将音频保存到文件中。

问题是我可以听到前2或3秒,但后来我开始收到此警告,我的音频文件变得沉默。

警告是:

  

[AQConverterThread]> aq> 995:输入环缓冲区返回0x400帧静默

0 个答案:

没有答案
相关问题