WPF:缺少两个监视器上的Syncron视频渲染

时间:2018-07-17 15:58:37

标签: c# wpf

我编写了一个简单的应用程序,该应用程序在一个窗口中播放视频文件,并将视频帧复制到第二个窗口中(同步视频渲染)。只要两个窗口都在同一台显示器上,它就可以正常工作。如果我将一个窗口移至另一台显示器并调整其大小,则视频会丢失。这是我的代码:

两个窗口中的

XAML容器:

<Grid>
    <Viewbox Stretch="Uniform">
        <Rectangle Name="rectVideo">
            <Rectangle.Fill>
                <DrawingBrush>
                    <DrawingBrush.Drawing>
                        <VideoDrawing x:Name="aVideoDrawing" Rect="0,0,10,10" />
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Viewbox>
</Grid>

第一个窗口后面的代码:

public partial class MainWindow : Window
{
    MediaPlayer mplayer = new MediaPlayer();
    Renderer rnd = new Renderer();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        mplayer.Open(new Uri("test.mp4", UriKind.Relative));
        mplayer.MediaOpened += Mplayer_MediaOpened;   
    }

    private void Mplayer_MediaOpened(object sender, EventArgs e)
    {
        rectVideo.Height = mplayer.NaturalVideoHeight;
        rectVideo.Width = mplayer.NaturalVideoWidth;
        aVideoDrawing.Player = mplayer;

        rnd.SetPlayer(mplayer);
        rnd.Show();

        mplayer.Play();
    }
}

第二个窗口后面的代码:

public partial class Renderer : Window
{
    public Renderer()
    {
        InitializeComponent();          
    }

    public void SetPlayer(MediaPlayer mp)
    {
        rectVideo.Height = mp.NaturalVideoHeight;
        rectVideo.Width = mp.NaturalVideoWidth;
        aVideoDrawing.Player = mp;
    }
}

任何想法可能是什么问题?我在许多具有不同显卡(例如NVidia GTX 1050 Ti,Intel HD 6000 ...)的Windows系统上尝试了相同的问题。为什么仅在使用第二台显示器时才会发生此问题?

更新:此问题已经here提出。当前没有简单干净的解决方案。

0 个答案:

没有答案