Я кодирую программу воспроизведения аудио в реальном времени на iOS.Звук отключен после воспроизведения звука с аудио-очередью на iOS некоторое время
Он получает звуковые пакеты RTP от однорангового узла и помещает их в очередь аудио для воспроизведения.
Когда вы начинаете играть, звук в порядке. Но через 1 или 2 минуты звук отключен, и об ошибке от AudioQueue API нет. Функция обратного вызова продолжает вызываться нормально, ничего ненормального.
Но это просто приглушено.
Моя функция обратного вызова:
1: Loop, пока не будет достаточно данных, могут быть скопированы в буфер аудио очереди
do
{
read_bytes_enabled = g_audio_playback_buf.GetReadByteLen();
if (read_bytes_enabled >= kAudioQueueBufferLength)
{
break;
}
usleep(10*1000);
}
while (true);
2: Скопировать в буфер звуковых сообщений и епдиеие его. Эта функция обратного вызова работает нормально и без ошибок.
//copy to audio queue buffer
read_bytes = kAudioQueueBufferLength;
g_audio_playback_buf.Read((unsigned char *)inBuffer->mAudioData, read_bytes);
WriteLog(LOG_PHONE_DEBUG, "AudioQueueBuffer(Play): copy [%d] bytes to AudioQueue buffer! Total len = %d", read_bytes, read_bytes_enabled);
inBuffer->mAudioDataByteSize = read_bytes;
UInt32 nPackets = read_bytes/g_audio_periodsize; // mono
inBuffer->mPacketDescriptionCount = nPackets;
// re-enqueue this buffer
AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);