首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >媒体基础多音频流文件解码错误

媒体基础多音频流文件解码错误
EN

Stack Overflow用户
提问于 2017-11-27 15:08:28
回答 1查看 911关注 0票数 1

我有一个mp4文件,其中有1个视频和2个音频流。我想解码音频流(在选择其中之一)使用媒体基金会。下面是我的代码(我从MFAudio示例的MediaFoundation SDK示例中获得)。

为了简单起见,省略了错误检查。

代码语言:javascript
复制
// 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支持多音频流的解码文件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-27 19:02:19

Microsoft AAC音频解码器MFT似乎不支持这种AAC跟踪/编码风格。

代码语言:javascript
复制
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那样应用解码器。
  • TopoEdit无法呈现该文件。
  • 可以播放掉回DirectShow的文件,条件是有相应的多路复用器、解码器可用
  • 电影和电视播放器只播放视频,并保持沉默。

音频有效载荷很可能是好的,但轨道描述符在某些部分可能是不准确的,解码器在这个问题上绊倒了--尽管问题很小,而不是致命的--并拒绝文件。

具体来说,它看不出问题是由文件中的多个音频轨道造成的。这个问题与AAC的航迹有关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47514080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档