Технические вопросы и ответы QA1663

Определение доступности аппаратного кодера AAC во время выполнения

Q: Как я могу определить доступность аппаратного кодера AAC во время выполнения?

A: Как я могу определить доступность аппаратного кодера AAC во время выполнения?

iOS 4.0 и более поздние поддержки, помогшие с аппаратными средствами, оффлайн кодируя использование Расширенного Аудиофайла и Аудио Преобразователя APIs.

Для проверки на availablility аппаратного кодера AAC получите Формат аудио kAudioFormatProperty_Encoders использование свойства kAudioFormatMPEG4AAC как спецификатор кодера, затем выдержите сравнение mSubType и mManufacturer поля возвращенных AudioClassDescription структуры для kAudioFormatMPEG4AAC и kAppleHardwareAudioCodecManufacturer, как показано в Перечислении 1.

Перечисление 1  Используя AudioFormat для проверения наличия аппаратного кодера AAC.

Boolean IsAACHardwareEncoderAvailable(void)
{
    Boolean isAvailable = false;
    OSStatus error;

    // get an array of AudioClassDescriptions for all installed encoders for the given format 
    // the specifier is the format that we are interested in - this is 'aac ' in our case
    UInt32 encoderSpecifier = kAudioFormatMPEG4AAC;
    UInt32 size;

    error = AudioFormatGetPropertyInfo(kAudioFormatProperty_Encoders, sizeof(encoderSpecifier),
                                         &encoderSpecifier, &size);
    if (error) { printf("AudioFormatGetPropertyInfo kAudioFormatProperty_Encoders
                          error %lu %4.4s\n", error, (char*)&error); return false; }

    UInt32 numEncoders = size / sizeof(AudioClassDescription);
    AudioClassDescription encoderDescriptions[numEncoders];

    error = AudioFormatGetProperty(kAudioFormatProperty_Encoders, sizeof(encoderSpecifier),
                                     &encoderSpecifier, &size, encoderDescriptions);
    if (error) { printf("AudioFormatGetProperty kAudioFormatProperty_Encoders error %lu %4.4s\n",
                          error, (char*)&error); return false; }

    for (UInt32 i=0; i < numEncoders; ++i) {
        if (encoderDescriptions[i].mSubType == kAudioFormatMPEG4AAC &&
            encoderDescriptions[i].mManufacturer == kAppleHardwareAudioCodecManufacturer) isAvailable = true;
    }

    return isAvailable;
}

Проверка, продемонстрированная выше, является только одним из многих шагов, которые должны быть выполнены при выполнении помогший с аппаратными средствами оффлайн кодирование. Для получения дополнительной информации относительно Аудио конфигурации Сеанса и Обработки Прерывания во время работы кодирования, обратитесь к Аудио Руководству по программированию Сеанса, iPhoneExtAudioFileConvertTest и iPhoneACFileConvertTest выборкам, доступным в Ссылочной Библиотеке iOS.



История версии документа


ДатаПримечания
23.12.2010

Обновленный для 4,1

08.09.2009

Новый документ, описывающий, как узнать, доступен ли аппаратный кодер AAC во время выполнения.