2011-05-12 1 views
7

메신저로 WPF.i에서 비디오를 재생할 때 루프가 필요하므로 미디어 덴드 이벤트가 발생하면 내 비디오가 재생됩니다. 그래서 이것은 나에게 루프를 가져올 것이다. prob는 왜 새로운 소스를 다시 만들어야합니까? 왜 그냥 '연극'이라고하지?C# WPF 새 소스를 선언하지 않고 mediaended 이벤트 핸들러에서 MediaElement 재생을 반복하는 방법은 무엇입니까?

XAML에서 어떤 이유로 든 수행하고 싶지 않습니다.

내 코드를 살펴 있습니다

string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 


public Window1() 
    { 
     InitializeComponent(); 
     media.Source = new Uri(startPath + @"playlist.wpl"); 
     media.play(); 
    } 

private void Media_Ended(object sender, EventArgs e) 
    { 
     media.Source = new Uri(startPath + @"playlist.wpl"); //if i dont put this line, video wont play..seems like it cant get the source 
     media.Play(); 
    } 

또는 적절한 방법은 없습니다 XAML에서 루프가 있지만 여기에 파일 .cs?

답변

12

Media_Ended 처리기의 시작 부분에서 Source를 다시 설정하는 대신 위치 값을 시작 위치로 다시 설정해보십시오. 당신은 아마 뭔가를 할 수 있도록 position 속성은

private void Media_Ended(object sender, EventArgs e) 
{ 
    media.Position = TimeSpan.Zero; 
    media.Play(); 
} 
+0

thnx합니다. 나는 이것을 시도했으나 성공하지 못했습니다. 비디오는 재생되지 않습니다. – Psychocryo

+0

흠 ... 이상 하네. 나는 그것을 테스트했지만 오디오 파일은 비디오가 아닙니다. 동영상이 다른 이유는 확실하지 않습니다. 다시 살펴 보겠습니다. – IanR

+1

몇 가지 이유로이 조합은 때때로 작동하지 않습니다! GIF에 대한 나의 경우. – Evgeny

0

당신은 again.Just가 media_ended 이벤트를 시작으로 MediaElement에의 위치를 ​​설정 소스를 설정할 필요가 없습니다 ... 시간 범위입니다

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      ((MediaElement)(sender)).Stop(); 
      ((MediaElement)(sender)).Position = new TimeSpan(0, 0, 0); 
      ((MediaElement)(sender)).Play(); 
     } 

당신은 수동

편집에 MediaElement.LoadedBehavior을 설정해야 할 수도 있습니다

,

나는 반복 태그 ASF 파일을로드 시도하고 잘

<ASX version = "3.0"> 
    <TITLE>Simple ASX Demo</TITLE> 
<REPEAT> 
     <ENTRY> 
     <TITLE>Vista Butterfly Video</TITLE> 
     <AUTHOR>Microsoft Corporation</AUTHOR> 
     <COPYRIGHT>(c)2007 Microsoft Corporation</COPYRIGHT> 
     <REF HREF = "Butterfly.wmv" /> 
    </ENTRY> 
</REPEAT> 
</ASX> 

작동하지만 난 MediaElement에의 메커니즘을 처리 붙박이 재생 목록이 일부 flaws.I는 아래 링크에서 언급 한 해결 방법을 따르는 것이 좋습니다 있다고 생각

여기 는

http://blog.revolunet.com/index.php/general/wpf-mediaelement-asx-workaround

댓글 달기 당신이

+0

그것은 미디어가 하나의 파일이지만 작동하지 않는 것 같습니다. 내가 .wpl 또는 .asx와 같은 재생 목록 파일을 사용하면 작동하지 않습니다 파일 형식. 어떤 단서? – Psychocryo

+0

전체 재생 목록이 끝난 후 ... 첫 번째 파일부터 반복 하시겠습니까? – biju

+0

또한 재생 목록을 어떻게 관리합니까? AFIK MediaElement에는 재생 목록 처리 메커니즘이 내장되어 있지 않습니다. – biju

1

난 당신이 코드를 사용한다고 생각 어떤 문제를 가지고있는 경우 :

,
private void Media_Ended(object sender, EventArgs e) 
{ 
    media.Position = TimeSpan.Zero; 
    media.LoadedBehavior = MediaState.Play; 
} 

도움이되기를 바랍니다.

+0

"코드 전용"답변을 제공하지 마십시오. 왜 이것이 대답이라고 생각하니? –

+0

LoadBehaviour가 이미 XAML에서 재생으로 설정된 경우이 방법은 저에게 효과적이며 "재생"을 호출 할 수 없습니다. –

5

나는 심지어로 LoadedBehavior을 설정할 필요가 없습니다가 UnloadedBehavior = "매뉴얼"및 제로 didnt 한 작업에 대한 위치를 설정 follwing을 코드

private void gifAnimation_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    gifAnimation.Position = new TimeSpan(0,0,1); 
    gifAnimation.Play(); 
} 

...

+0

이것은 나를 위해 일했습니다! 0으로 설정하면 작동하지 않습니다. 여기의 지시에 따라 나를 위해 일했습니다. 제 사건은 애니메이션 GIF였습니다. – faldeland

6

설정 작동하게 수동 그냥 재생로 둡니다.

그리고 MediaEnded 이벤트에 당신은 하지 제로에 동일 할 것이다 비디오의 새로운 위치 설정해야합니다 귀하의 답변에 대한

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    media.Position = TimeSpan.FromMilliseconds(1); 
}