1

我现在正在做一个项目,我们需要在 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 中播放视频并在视频之间无缝过渡的方法示例?

在此先感谢,奥利

4

0 回答 0