1

我正在使用 WPF 和 MediaElement 编写媒体播放器。我正在播放一个我有几个音轨的视频。但他们都在同时玩:(

我如何只玩其中之一?有可能吗?

4

2 回答 2

2

我认为这个问题出在您使用的音频和视频 DirectShow 编解码器中。您可以在 Windows Media Player 中正确播放视频吗?如果不是,请重新安装相应的编解码器。

几个月前,为了在我们的多语言软件中显示视频帮助,我已经完成了切换音轨的要求原型。我的经验显示了一些替代方案:

  • 通过 WinForms 主机使用 WMP 控件,然后更改语言,如:

    var control = ((IWMPControls3)wmpControl.Ctlcontrols);
    control.currentAudioLanguage = 9; // 英语

您可以在此处找到 LCID 的完整列表。要列出视频中的所有音轨,您可以使用以下内容:

wmpControl.PlayStateChange += (o, args) => {
  if(args.newState == 3) {
    var control = ((IWMPControls3)wmpControl.Ctlcontrols);
    for(int i = 1; i <= control.audioLanguageCount; i++) {
      MessageBox.Show(control.getAudioLanguageID(i) + ": " + control.getAudioLanguageDescription(i));
    }
  }
};
  • 使用单独的音轨并使用MediaPlayer与视频同步播放。这种方法的主要问题是,您必须手动同步音频和视频播放,开始,停止,搜索,..。

我希望这可以帮助您选择解决方案。

于 2012-06-28T11:32:00.600 回答
0

使用 WPF MediaElement 是不可能的。如果您有一些 DirectShow 专业知识,您可以尝试我的WPF MediaKit并修改 MediaUriElement/Player 或创建您自己的。

于 2010-07-13T21:40:43.327 回答