2010-11-15 15 views
16

Uygulamam video oynatmak için WPF MediaElement öğesini kullanıyor (MOV dosyaları). Birincil monitörde oynatıldığında iyi çalışır, ancak pencere ikincil monitöre taşınırken donar.WPF MediaElement neden ikincil monitörde çalışmıyor?

  1. ikinci monitör (yeni ikinci monitör problem transfer), birincil & ikinci monitörler Değişim

uygulamayı başlangıç:

başarı olmadan aşağıdaki çalıştık Uygulama penceresi, her iki monitörde de doğru şekilde çalışır, ancak tamamen ikincil monitörde olduğu anda video donar. Bu durumda, uygulamayı birincil monitöre geri taşımak yardımcı olmaz (ve yeni bir video yüklemek de işe yaramıyor).

Monitörler, koordinatların her zaman pozitif olmasını sağlayacak şekilde düzenlenmiştir (her ikisi de monitörler 1920x1080 ve ikincil monitör kaynağı 1920'dir).

Bu sorunu gören başka bir kişi var mı ve/veya bir çözüm bulmuş mu?

DÜZENLEME

herkes birden çok monitör ile WPF MediaElement kullanıyor mu ???

+0

İkincil monitörün GPU tarafından hızlandırılmaması mümkün mü? Bu, birçok PC'de tutarlı mı yoksa sadece bir tanesinde mi? – ChrisF

+0

Sadece şu ana kadar bir dizüstü bilgisayarda denendi. Normal yapılandırmamdaki ikincil monitör, dizüstü bilgisayar ekranıdır. Dış monitörü ikincil monitör yaparsam sorun hala devam ediyor. BTW, Windows Media Player, aynı filmle hem birincil hem de ikincil olarak iyi çalışır. – grantnz

+0

WPFMediaKit ayrıca her iki monitörde de çalışır .... – grantnz

cevap

23

Bu hala MS olarak tarif .NET Framework 4.0 olduğu bilinen bir konudur "sorunu WPF arasında bir senkronizasyon ve altta yatan WMP kumanda ekranı değişiklikler meydana geldiğinde yeniden senkronize zorunda oluşur." H.264 codec video dosyalarına olur.


İşte 3 geçici çözümdür.

1.

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; 
     } 
} 

Ancak bu GPU ve grafik belleği kullanan değildir ve video oynatma yavaşlatmak olabilir MediaElement denetimi içeren pencere için render yazılımı kullanın. birincil görüntü Örneğin

üzerine


2. Üst üste binme en az 1 piksel, soldan birincil tarama varsayalım ve MediaElement tüm pencereyi doldurur. pencerenin Yapıcıda,

this.Left = bounds.Left - 1; this.Width = bounds.Width; this.Top = bounds.Top; this.Height = bounds.Height; 

yüzden MediaElement geniş birincil monitörde üst üste 1 pikseli kullanın Rect'iniz sınırları ikincil monitör sınırı temsil varsayalım ve daha sonra normal H.264 video dosyalarını oynatmak mümkün değil.

3. Kullanım MS'nin Medya Vakfı codec'i

Medya Vakfı "MP4" oynatmayı devre dışı bırakmak için bir araç "Win7DSFilterTweaker" İndir dışındaki başka MP4 codec'i

. Örneğin başka bir MP4 kodlayıcı, ffshow'u yükleyin.

+0

Bu yazıya MS'den bir şey alıntılarsınız. Bu alıntı için referans nedir? Bunun .NET 4.5.x'te çözülüp çözülmediğini biliyor musunuz? – Brannon

+0

Görünüşe göre .NET 4.5.x'te düzeltilmedi - Şu anda bu problemle karşı karşıya geliyorum. –

1

Olayların olup olmadığını kontrol edin: MediaOpened, MediaEnded ve MediaFailed hala yükseltiliyor. Bu denetimin ikinci monitörü "göz ardı ettiği" bilinen bir sorun olduğunu düşünmüyorum.