Возможно, вам не хватает некоторых важных спецификаций в структуре AudioStreamBasicDescription: я не знаю о ffmpeg, но указание нулевых байтов на кадр и нулевых байтов на пакет не сработает;)
Вот как я заполнил бы структуру, учитывая частота дискретизации , аудиоформат , количество каналов и бит на выборку :
iAqc.mDataFormat.mSampleRate = iSampleRate;
iAqc.mDataFormat.mFormatID = kAudioFormatLinearPCM;
iAqc.mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
iAqc.mDataFormat.mBytesPerPacket = (iBitsPerSample >> 3) * iNumChannels;
iAqc.mDataFormat.mFramesPerPacket = 1;
iAqc.mDataFormat.mBytesPerFrame = (iBitsPerSample >> 3) * iNumChannels;
iAqc.mDataFormat.mChannelsPerFrame = iNumChannels;
iAqc.mDataFormat.mBitsPerChannel = iBitsPerSample;
Я предполагаю, что вы записываете сэмплы PCM на аудиоустройство.
Пока вы знаете аудиоформат, с которым вы работаете, не должно быть проблем с его адаптацией: важно помнить, что все это значит.
Здесь я работаю с одним образцом кадра на пакет, поэтому число байтов на пакет совпадает с количеством байтов на кадр.
Большинство проблем возникает из-за того, что многие слова неправильно используются, например, «сэмплы», «кадры сэмплов» в неправильном контексте и т. Д.: Кадр сэмплов можно рассматривать как элементарную единицу аудиоданных который охватывает все доступные каналы, выборка относится к единому подразделу данных, составляющему кадр выборки.
Например, у вас есть аудиопоток из 2 каналов с разрешением 16 бит на семпл: семпл будет иметь размер 2 байта (16 бит / с / 8 или 16 >> 3), кадр семпла также будет принимать число каналы, поэтому он будет иметь размер 4 байта (2 байта x 2 канала).
ВАЖНО
Теория, лежащая в основе этого, применима не только к iPhone, но и к кодированию звука в целом!
Просто случается, что AudioQueues запрашивает у вас четко определенные спецификации вашего аудиопотока, и это хорошо, но вместо этого вас могут попросить указать байты, поэтому выражение размеров аудиоданных в виде аудиокадров всегда хорошо, вы всегда можете преобразовать размеры данных и будь уверен в этом.