gra*_*tnz 19 wpf multiple-monitors mediaelement
我的应用程序使用WPF MediaElement来播放视频(MOV文件).这在主监视器上播放时效果很好,但在窗口移动到辅助监视器时会冻结.
我试过以下没有成功:
当应用程序窗口跨越两个监视器时,它可以正常工作,但只要它完全位于辅助监视器内,视频就会冻结.一旦处于此状态,将应用程序移回主监视器将无济于事(并且加载新视频也无济于事).
安排监视器使坐标始终为正(两个监视器均为1920x1080,辅助监视器原点为1920,0).
有没有其他人看到这个问题和/或找到了修复?
编辑
有没有人使用WPF MediaElement与多个监视器???
det*_*ale 26
这仍然是.NET Framework 4.0中的一个已知问题,MS将其描述为"当显示更改发生时,WPF与底层WMP控件之间的同步必须重新同步时会出现问题." 它发生在H.264编解码器视频文件中.
这里有3个解决方法.
1.对包含MediaElement控件的窗口使用软件渲染
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
var hwndTarget = hwndSource.CompositionTarget;
if (hwndTarget != null) hwndTarget.RenderMode = RenderMode.SoftwareOnly;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这不利用GPU和图形内存,并且可能减慢视频播放速度.
2.在主显示屏上重叠至少1个像素
例如,假设左侧是主屏幕,MediaElement填充整个窗口.在窗口的构造函数中,假设Rect bounds表示辅助监视器边界,使用
this.Left = bounds.Left - 1;
this.Width = bounds.Width;
this.Top = bounds.Top;
this.Height = bounds.Height;
Run Code Online (Sandbox Code Playgroud)
因此MediaElement在主显示器上重叠了1个像素宽,然后它就能正常播放H.264视频文件.
3.使用MS的Media Foundation编解码器以外的其他MP4编解码器
下载工具"Win7DSFilterTweaker"以禁用Media Foundation"MP4"播放.例如,安装另一个MP4编解码器ffshow.
| 归档时间: |
|
| 查看次数: |
6177 次 |
| 最近记录: |