2017-01-14 12 views
0

유일한 형태 : IBasicVideoEffect 상속 클래스IBasicVideoEffect 공정 I은 <strong>MediaPlayer를</strong> 한가지 <strong>MainPage</strong>과 간단한 테스트 UWP 앱 생성 3~8 제 프레임

public sealed partial class MainPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     Loaded += MainPage_Loaded; 
    } 

    private void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     var mediaPlayer = new MediaPlayer 
     { 
      Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/preview.mp4")), 
      AutoPlay = true 
     }; 
     mediaPlayer.AddVideoEffect(typeof(VideoEffect).FullName, true, null); 
    } 
} 

및 WinRT 컴포넌트 나 통지 처리 된 프레임 수 :

실행하면 3 프레임 만 처리됩니다. ideo 파일이됩니다.

_frameCounter이 증가 할 때 중단 점을 설정하면 8 프레임 동안 F5를 누르기 만하면됩니다.

왜 모든 프레임을 처리 할 수 ​​있습니까?

나는 MediaClip 및 많은 예는 말할 MediaComposition를 사용하여 해결할 수 있지만,이 경우 프레임은 내 목표 아니다 CPU하지 GPU 비디오 엔진에 의해 처리된다.

답변

1

여기서 문제는 MediaPlayer을 XAML에 표시하지 않고 재생하는 것입니다. 따라서 미디어가 UI에서 렌더링되지 않으므로 처음 몇 프레임 만 처리되었으므로 다른 프레임을 처리 할 필요가 없습니다.

VideoEffect을 작동 시키려면 방법으로 MediaPlayerElement 제어를 사용하여 미디어를 렌더링 할 수 있습니다.

XAML :

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <MediaPlayerElement x:Name="mediaPlayerElement" /> 
</Grid> 

코드 숨김 미디어가 재생되는 동안이 후

private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    var mediaPlayer = new MediaPlayer 
    { 
     Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/preview.mp4")), 
     AutoPlay = true 
    }; 
    mediaPlayer.AddVideoEffect(typeof(VideoEffect).FullName, true, null); 

    mediaPlayerElement.SetMediaPlayer(mediaPlayer); 
} 

, 당신은 _frameCounter 증가를 볼 수 있습니다.