Я пытаюсь получить закодированный битрейт аудиофайла (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);
Работает нормально.
Кто-нибудь знает, в чем проблема и / или есть ли другие способы получить закодированный битрейт звуковой дорожки?
Аудио битрейт является свойством дорожки, а не медиа-файла. Следовательно, вы обычно хотите выбрать конкретную дорожку (да, обычно это первая звуковая дорожка, даже если файл представляет собой файл, содержащий только одну звуковую дорожку) и запросить ее атрибуты.
Описание презентации даст вам такие атрибуты (я перечислю только несколько соответствующих):
MF_MT_MAJOR_TYPE
, vValue MFMediaType_Audio
MF_MT_SUBTYPE
, vValue MFAudioFormat_AAC
MF_MT_AVG_BITRATE
, значение 125601MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION
, vValue 0MF_MT_AAC_PAYLOAD_TYPE
, vValue 0Если вам нужно только информационное значение, например, представленное оболочкой Windows:
и в противном случае вам не нужен Media Foundation (то есть просто для доступа к значению), вы можете использовать обработчик свойства оболочки сделать эту работу за вас. Вы бы просто запросить PKEY_Audio_EncodingBitrate
свойство и обработчик будут использовать Media Foundation, чтобы получить это для вас.
Других решений пока нет …