2016-04-22 17 views
0

Mein Programm soll ein Video abspielen, wenn der Benutzer auf die Schaltfläche "Abspielen" klickt. Das erste Antippen von "Play" macht jedoch nichts."MediaElement.CurrentState" wechselt aus unbekannten Gründen in "Geschlossen"

Der Code für diese ziemlich einfach ist, nennt es einfach ‚SetSource‘ auf meinem Media, Videoplayer, und dann spielt:

private async void playVideo_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
    await setUpVideo(); 
    VideoPlayer.Play(); 
} 

Ich habe durch ‚setUpVideo()‘ gewesen unzählige Male und alles, was es funktioniert wie es sollte, ruft nur 'VideoPlayer.SetSource()' auf, nachdem sichergestellt wurde, dass die Datei existiert. Es war nicht, bis ich in einem Verfahren warf den Zustand der ‚VideoPlayer.CurrentState‘ zu überwachen, dass ich das Problem erkannt:

public VideoViewer() 
{ 
    this.InitializeComponent(); 
    VideoPlayer.CurrentStateChanged += VideoPlayer_CurrentStateChanged; 
} 

void VideoPlayer_CurrentStateChanged(object sender, RoutedEventArgs e) 
{ 
    var foo = VideoPlayer.CurrentState; 
} 

Wenn ich den Wert von ‚foo‘ überprüfen, während mein Code ausgeführt sehe ich, dass auf das erste Tippen (und nur das erste Tippen) 'VideoPlayer.CurrentState' ändert sich zu 'Öffnen', nachdem 'playVideo_Tapped()' beendet wurde und dann zurück zu 'Geschlossen' wechselt! Jedes weitere Tippen folgt dann dem korrekten Verlauf von 'Öffnen' zu 'Spielen' und dann 'Pausiert', aber das erste Tippen wird immer geschlossen. Warum ist das??

Antwort

1

Sieht aus wie das Problem in 'setUpVideo()' schließlich war. Woops.

using (IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read)) 
{ 
    VideoPlayer.SetSource(fileStream, videoFile.ContentType); 
} 

... dazu:

Kurzversion ist dieses Problem, indem ein Stück Code in 'setUpVideo()' aus dieser Fest

IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read); 
VideoPlayer.SetSource(fileStream, videoFile.ContentType); 

Längere Version, meine Code ist fehlgeschlagen wegen des Fehlers "mf_media_engine_err_src_not_supported hresult - 0xc00d36c4", der mein MediaElement geschlossen hat, anstatt es abzuspielen. Dies geschah, weil, wenn ich den 'using' -Block des Codes verließ, der 'IRandomAccessStream' mitten in meinem Lesen der Datei schließen würde. Ich bin nicht 100% ig klar, warum es nach dem ersten Durchlauf des Codes durch die ganze Sache kommt, aber zumindest funktioniert es jetzt zuverlässig.

Ich muss auch Kredit geben, wo Kredit fällig ist, und ich fand diese Antwort hier: Windows 8 app - MediaElement not playing ".wmv" files