我编写了一个简单的应用程序,该应用程序在一个窗口中播放视频文件,并将视频帧复制到第二个窗口中(同步视频渲染)。只要两个窗口都在同一台显示器上,它就可以正常工作。如果我将一个窗口移至另一台显示器并调整其大小,则视频会丢失。这是我的代码:
两个窗口中的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提出。当前没有简单干净的解决方案。