我有一个mp4文件,其中有1个视频和2个音频流。我想解码音频流(在选择其中之一)使用媒体基金会。下面是我的代码(我从MFAudio示例的MediaFoundation SDK示例中获得)。
为了简单起见,省略了错误检查。
// Set up the source reader for the file.
MFCreateSourceResolver(&pSourceResolver);
pSourceResolver->CreateObjectFromURL(
L"C:\\Users\\vahagng\\Desktop\\a.mp4", // URL of the source.
MF_RESOLUTION_MEDIASOURCE, // Create a source object.
NULL, // Optional property store.
&ObjectType, // Receives the created object type.
&uSource // Receives a pointer to the media source.
);
uSource->QueryInterface(IID_PPV_ARGS(&mediaFileSource));
MFCreateSourceReaderFromMediaSource(mediaFileSource, NULL, &pSourceReader);
// Deselect all streams, we only want the first
pSourceReader->SetStreamSelection(MF_SOURCE_READER_ALL_STREAMS, false);
pSourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true);
MFCreateMediaType(&pAudioOutType);
pAudioOutType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
CHECK_HR(pAudioOutType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
pSourceReader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, pAudioOutType);上面的代码在最后一行(pSourceReader->SetCurrentMediaType())上失败,错误代码0xc00d36b4 : The data specified for the media type is invalid, inconsistent, or not supported by this object.用于包含2个音频流但对1个音频流文件工作良好的媒体文件。
我正在测试的文件有两个AAC音频流,这是绝对支持的MediaFoundation。
MediaFoundation支持多音频流的解码文件吗?
发布于 2017-11-27 19:02:19
Microsoft AAC音频解码器MFT似乎不支持这种AAC跟踪/编码风格。
MF_MT_MAJOR_TYPE, vValue {73647561-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFMediaType_Audio, FourCC auds)
MF_MT_SUBTYPE, vValue {00001610-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFAudioFormat_AAC, FourCC 0x00001610)
MF_MT_AM_FORMAT_TYPE, vValue {05589F81-C356-11CE-BF01-00AA0055595A} (Type VT_CLSID, FORMAT_WaveFormatEx)
MF_MT_ALL_SAMPLES_INDEPENDENT, vValue 1 (Type VT_UI4)
MF_MT_FIXED_SIZE_SAMPLES, vValue 1 (Type VT_UI4)
MF_MT_SAMPLE_SIZE, vValue 1 (Type VT_UI4)
MF_MT_AVG_BITRATE, vValue 111360 (Type VT_UI4)
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION, vValue 254 (Type VT_UI4)
MF_MT_AAC_PAYLOAD_TYPE, vValue 0 (Type VT_UI4)
MF_MT_AUDIO_AVG_BYTES_PER_SECOND, vValue 13920 (Type VT_UI4)
MF_MT_AUDIO_BITS_PER_SAMPLE, vValue 16 (Type VT_UI4)
MF_MT_AUDIO_BLOCK_ALIGNMENT, vValue 1 (Type VT_UI4)
MF_MT_AUDIO_NUM_CHANNELS, vValue 2 (Type VT_UI4)
MF_MT_AUDIO_PREFER_WAVEFORMATEX, vValue 1 (Type VT_UI4)
MF_MT_AUDIO_SAMPLES_PER_SECOND, vValue 48000 (Type VT_UI4)
MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY, vValue 0 (Type VT_UI4)
MF_MT_MPEG4_SAMPLE_DESCRIPTION, vValue 00 00 00 5B 73 74 73 64 00 00 00 00 00 00 00 01 00 00 00 4B 6D 70 34 61 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 02 00 10 00 00 00 00 BB 80 00 00 00 00 00 27 65 73 64 73 00 00 00 00 03 19 00 00 00 04 11 67 15 00 01 82 00 01 DF 60 00 01 B3 00 05 02 09 90 06 01 02 (Type VT_VECTOR | VT_UI1)
MF_MT_USER_DATA, vValue 00 00 FE 00 00 00 00 00 00 00 00 00 09 90 (Type VT_VECTOR | VT_UI1)由于解码器无法处理媒体类型,因此媒体福迪无法解码流,因此:
SetCurrentMediaType那样应用解码器。音频有效载荷很可能是好的,但轨道描述符在某些部分可能是不准确的,解码器在这个问题上绊倒了--尽管问题很小,而不是致命的--并拒绝文件。
具体来说,它看不出问题是由文件中的多个音频轨道造成的。这个问题与AAC的航迹有关。
https://stackoverflow.com/questions/47514080
复制相似问题