Media Foundation получает закодированный битрейт

Я пытаюсь получить закодированный битрейт аудиофайла (mp4, m4a, aac) с помощью Media Foundation.

Что я сделал, это:

PROPVARIANT prop;
IMFSourceReader* reader;

MFCreateSourceReaderFromURL(filePath, NULL, &reader);
reader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_AUDIO_ENCODING_BITRATE,
&prop);

Вторая строка заканчивается ошибкой и пустым PROPVARIAT.

Тем не менее, когда я делаю:

reader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, &prop);

Работает нормально.

Кто-нибудь знает, в чем проблема и / или есть ли другие способы получить закодированный битрейт звуковой дорожки?

0

Решение

Аудио битрейт является свойством дорожки, а не медиа-файла. Следовательно, вы обычно хотите выбрать конкретную дорожку (да, обычно это первая звуковая дорожка, даже если файл представляет собой файл, содержащий только одну звуковую дорожку) и запросить ее атрибуты.

Описание презентации даст вам такие атрибуты (я перечислю только несколько соответствующих):

  • ключ MF_MT_MAJOR_TYPE, vValue MFMediaType_Audio
  • ключ MF_MT_SUBTYPE, vValue MFAudioFormat_AAC
  • ключ MF_MT_AVG_BITRATE, значение 125601
  • ключ MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION, vValue 0
  • ключ MF_MT_AAC_PAYLOAD_TYPE, vValue 0

Если вам нужно только информационное значение, например, представленное оболочкой Windows:

введите описание изображения здесь

и в противном случае вам не нужен Media Foundation (то есть просто для доступа к значению), вы можете использовать обработчик свойства оболочки сделать эту работу за вас. Вы бы просто запросить PKEY_Audio_EncodingBitrate свойство и обработчик будут использовать Media Foundation, чтобы получить это для вас.

1

Другие решения

Других решений пока нет …