我正在使用 WPF 和 MediaElement 编写媒体播放器。我正在播放一个我有几个音轨的视频。但他们都在同时玩:(
我如何只玩其中之一?有可能吗?
我认为这个问题出在您使用的音频和视频 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));
}
}
};
我希望这可以帮助您选择解决方案。
使用 WPF MediaElement 是不可能的。如果您有一些 DirectShow 专业知识,您可以尝试我的WPF MediaKit并修改 MediaUriElement/Player 或创建您自己的。