WPF无缝视频播放

时间:2013-10-07 11:27:23

标签: wpf video media-player prism media

我正在开展一个项目,我们需要在WPF应用程序中的多个视频之间进行无缝视频转换。

第二台显示器被用作媒体播放器,事件被发送到屏幕以触发视频,然后视频位置被用于根据视频达到特定间隔来发回事件。该项目正在使用PRISM,因此它的Event Aggregator正在触发事件。

问题是找到一种在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中播放视频的方法的例子,视频之间有无缝过渡?

提前致谢, 奥利

0 个答案:

没有答案