Размер пакета (mBytesPerPacket) или битрейт для файлов AAC в Core Audio

Я хочу настроить AudioStreamBasicDescription с постоянной скоростью передачи данных типа AAC.

AudioStreamBasicDescription clientFormat = {0};
clientFormat.mSampleRate         = 44100.0;
clientFormat.mFormatID           = kAudioFormatMPEG4AAC;
clientFormat.mFormatFlags        = kMPEG4Object_AAC_Main;
clientFormat.mChannelsPerFrame   = 2;
clientFormat.mBytesPerPacket     = 0;
clientFormat.mBytesPerFrame      = 0;
clientFormat.mFramesPerPacket    = 1024;
clientFormat.mBitsPerChannel     = 0;
clientFormat.mReserved           = 0;

Для mBytesPerPacketдокументация Apple говорит:

Количество байтов в пакете аудиоданных. Чтобы указать переменный размер пакета, установите в этом поле значение 0. Для формата, в котором используется переменный размер пакета, укажите размер каждого пакета с помощью структуры AudioStreamPacketDescription.

Я хочу иметь его как константу, поэтому я должен вставить туда ненулевое значение (нужный размер), но все, кроме 0, не работает.

Любая помощь в этом?


person mbaros    schedule 17.01.2017    source источник
comment
Как это не удается? Оставьте mBytesPerPacket равным 0. AAC действительно имеет переменные размеры пакетов.   -  person Rhythmic Fistman    schedule 18.01.2017
comment
Ты прав @RhythmicFistman. Это я был виноват   -  person mbaros    schedule 23.01.2017


Ответы (1)


Оказывается, мы можем задать свойства кодека прямо на AudioConverter.

Так я и сделал:

AudioConverterSetProperty(acRef, kAudioCodecPropertyBitRateControlMode,
                                                  sizeof(control_mode), &control_mode);

AudioConverterSetProperty(acRef, kAudioCodecPropertyCurrentTargetBitRate,
                                                  sizeof(_bitRate), &_bitRate);
person mbaros    schedule 23.01.2017