C# 使用SharpDx或IMSourceReader从mp4文件读取第二个音频曲目流

C# 使用SharpDx或IMSourceReader从mp4文件读取第二个音频曲目流,c#,audio,sharpdx,ms-media-foundation,C#,Audio,Sharpdx,Ms Media Foundation,我在我的应用程序中有一个要求,我必须从mp4文件中读取所有可用的曲目流 Mp4文件用AAC格式的曲目数编码。我必须解码才能从文件中获得所有可用的曲目。目前我正在使用SharpDX和IMSourceReader(MediaFoundation DLL)来读取流。但是默认情况下,SourceReader只返回文件中的第一个音频流。我做得对吗?或者我必须使用任何其他第三方库来实现这一点?在配置时,您可以选择在读取样本时交付哪些流。通常情况下,您不希望选择流。例如,有额外音频流(西班牙语、法语或导演评论

我在我的应用程序中有一个要求,我必须从mp4文件中读取所有可用的曲目流

Mp4文件用AAC格式的曲目数编码。我必须解码才能从文件中获得所有可用的曲目。目前我正在使用SharpDX和IMSourceReader(MediaFoundation DLL)来读取流。但是默认情况下,SourceReader只返回文件中的第一个音频流。我做得对吗?或者我必须使用任何其他第三方库来实现这一点?

在配置时,您可以选择在读取样本时交付哪些流。通常情况下,您不希望选择流。例如,有额外音频流(西班牙语、法语或导演评论)的电影。因此,大多数时间流选择如下所示:

// error checking omitted for brevity
hr = reader->SetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, nullptr, audioMediaType);
hr = reader->SetStreamSelection((DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, true);
但是,如果您查看,第一个参数要么采用上面使用的枚举,要么采用特定的流索引

// 0–0xFFFFFFFB  <-- The zero-based index of a stream.
//   0xFFFFFFFC  <-- MF_SOURCE_READER_FIRST_VIDEO_STREAM
//   0xFFFFFFFD  <-- MF_SOURCE_READER_FIRST_AUDIO_STREAM
//   0xFFFFFFFE  <-- MF_SOURCE_READER_ALL_STREAMS
//   0xFFFFFFFE  <-- MF_SOURCE_READER_ANY_STREAM
//   0xFFFFFFFF  <-- MF_SOURCE_READER_INVALID_STREAM_INDEX

<代码> // 0 -0xFFFFFFBFI尝试用SDK TopoEdvpApp打开多个音频轨道的MP4,我看到媒体基金会绝对能够阅读多个音频轨道。你能分享用于读取音频曲目数量的代码吗?我没有代码-显示它是可能的,因此你可以查看SharpDX为什么没有拾取它(SharpDX只拾取第一个音频曲目,跳过其余的?)。