我现在正在做一个项目,我们需要在 WPF 应用程序中的多个视频之间进行无缝视频转换。
第二个监视器被用作媒体播放器,事件被发送到屏幕以触发视频,然后视频位置被用于根据视频命中特定间隔来触发事件。该项目正在使用 PRISM,因此事件由它的事件聚合器触发。
问题是找到一种在 WPF 中播放视频的方法,以适应视频之间的缓冲。我没有尝试过的方法的代码示例,但我尝试过使用。
- 本机 WPF 媒体元素。这是非常错误的,而且肯定不是用户友好的。播放不良和媒体文件之间的巨大差距。
- WPFMediaKit这可能是迄今为止最好的解决方案,视频播放很好,有两个问题。媒体屏幕在看似随机的时间停止播放视频,并且控件变黑。视频之间的过渡大约是半秒的黑色。
- 在 WindowsFormsHost 中托管 AxWindowsMediaPlayer。回放很棒,但视频之间存在巨大差距,即使在运行播放列表时也是如此(这在 Windows Media 播放器中不会发生,因此我们可能会遗漏一些东西。)也因为控件托管在 WindowsFormsHost 我不是确定是否可以保留(绑定)视频位置,并且位置事件似乎没有被捕获。
- GMF Play - 似乎与 WPFMediaKit 有相同的问题,除了看到的是折叠而不是在过渡期间屏幕变黑。
编辑 媒体播放器示例
媒体元素设置
private void CreateMediaKitElement()
{
WpfMediaKit.BeginInit();
WpfMediaKit.Stretch = Stretch.Fill;
WpfMediaKit.LoadedBehavior = WPFMediaKit.DirectShow.MediaPlayers.MediaState.Manual;
WpfMediaKit.MediaEnded += WpfMediaKit_MediaEnded;
WpfMediaKit.Volume = 0;
WpfMediaKit.EndInit();
}
private void PlayVideo(string uri, IEnumerable<Interval> intervals)
{
// Stop the current Audio track if a new video is being shown.
AudioElement.Stop();
WpfMediaKit.Stop();
// WpfMediaKit = null;
//Try recreating Element
WpfMediaKit = new MediaUriElement();
CreateMediaKitElement();
WpfMediaKit.Source = new Uri(uri, UriKind.Relative);
WpfMediaKit.Play();
}
所以我的问题是,有没有人知道或有一个在 WPF 中播放视频并在视频之间无缝过渡的方法示例?
在此先感谢,奥利