멀티미디어 개요

WPF(Windows Presentation Foundation)의 멀티미디어 기능을 사용하면 오디오 및 동영상을 애플리케이션에 통합하여 사용자 환경을 향상시킬 수 있습니다. 이 항목에서는 WPF의 멀티미디어 기능을 소개합니다.

미디어 API

MediaElementMediaPlayer 클래스는 오디오 또는 비디오 콘텐츠를 표시하는 데 사용됩니다. 이러한 클래스는 대화형으로 또는 클록을 통해 제어할 수 있습니다. 이러한 클래스는 미디어 재생을 위한 Microsoft Windows Media Player 10 컨트롤에서 사용할 수 있습니다. 사용하는 클래스는 시나리오에 따라 달라집니다.

MediaElement레이아웃에서 지원하는 UIElement이며 많은 컨트롤의 콘텐츠로 사용할 수 있습니다. XAML(Extensible Application Markup Language) 및 코드에서도 사용할 수 있습니다. 반면 MediaPlayerDrawing 개체용으로 설계되었으며 레이아웃 지원이 부족합니다. MediaPlayer를 사용하여 로드된 미디어는 VideoDrawing을 사용하거나 DrawingContext와 직접 상호 작용해야 표시할 수 있습니다. MediaPlayer는 XAML에서 사용할 수 없습니다.

Drawing 개체 및 그리기 컨텍스트에 대한 자세한 내용은 Drawing 개체 개요를 참조하세요.

참고

애플리케이션을 사용하여 미디어를 배포하는 경우 미디어 파일을 프로젝트 리소스로 사용할 수 없습니다. 대신 프로젝트 파일에서 미디어 형식을 Content로 설정하고 CopyToOutputDirectoryPreserveNewest 또는 Always로 설정해야 합니다.

미디어 재생 모드

참고

MediaElementMediaPlayer 모두 비슷한 멤버가 있습니다. 이 섹션의 링크는 MediaElement 클래스 멤버를 참조합니다. 특별히 언급하지 않는 한 MediaElement 클래스에 연결된 멤버는 MediaPlayer 클래스에서도 찾을 수 있습니다.

Windows Presentation Foundation(WPF)에서 미디어 재생을 이해하려면 미디어를 재생할 수 있는 여러 다른 모드를 이해해야 합니다. MediaElementMediaPlayer 모두 독립 모드와 클록 모드의 두 가지 미디어 모드에서 사용할 수 있습니다. 미디어 모드는 Clock 속성에 의해 결정됩니다. Clocknull이면 미디어 개체는 독립 모드에 있습니다. Clock이 null이 아닌 경우 미디어 개체는 클록 모드에 있습니다. 기본적으로 미디어 개체는 독립 모드입니다.

독립 모드

독립 모드에서 미디어 콘텐츠는 미디어 재생을 주도합니다. 독립 모드에서는 다음과 같은 옵션을 사용할 수 있습니다.

  • 미디어의 Uri을 직접 지정할 수 있습니다.

  • 미디어 재생을 직접 제어할 수 있습니다.

  • 미디어의 PositionSpeedRatio 속성을 수정할 수 있습니다.

미디어는 MediaElement 개체의 Source 속성을 설정하거나 MediaPlayer 개체의 Open 메서드를 호출하여 로드됩니다.

독립 모드에서 미디어 재생을 제어하려면 미디어 개체의 컨트롤 메서드를 사용할 수 있습니다. 사용 가능한 컨트롤 메서드는 Play, Pause, Close, Stop입니다. MediaElement의 경우 이러한 메서드를 사용한 대화식 컨트롤은 LoadedBehaviorManual로 설정된 경우에만 사용할 수 있습니다. 이러한 메서드는 미디어 개체가 클록 모드에 있을 때는 사용할 수 없습니다.

독립 모드의 예제를 보려면 MediaElement 제어(재생, 일시 중지, 정지, 볼륨 및 속도)를 참조하세요.

클록 모드

클록 모드에서 MediaTimeline은 미디어 재생을 구동합니다. 클록 모드에는 다음과 같은 특징이 있습니다.

  • 미디어의 UriMediaTimeline을 통해 간접적으로 설정됩니다.

  • 미디어 재생을 클록으로 제어할 수 있습니다. 미디어 개체의 컨트롤 메서드를 사용할 수 없습니다.

  • 미디어는 MediaTimeline 개체의 Source 속성을 설정하고 타임라인에서 클록을 만들고 미디어 개체에 클록을 할당하여 로드됩니다. Storyboard 내부의 MediaTimelineMediaElement를 대상으로 할 때 미디어도 이러한 방식으로 로드됩니다.

클록 모드에서 미디어 재생을 제어하려면 ClockController 컨트롤 메서드를 사용해야 합니다. ClockControllerMediaClockClockController 속성에서 가져옵니다. 클록 모드에서 MediaElement 또는 MediaPlayer 객체의 컨트롤 메서드를 사용하려고 하면 InvalidOperationException이 발생합니다.

클록 및 타임라인에 대한 자세한 내용은 애니메이션 개요를 참조하세요.

클록 모드 예제를 보려면 Storyboard를 사용하여 MediaElement 제어를 참조하세요.

MediaElement 클래스

애플리케이션에 미디어를 추가하는 것은 애플리케이션의 사용자 인터페이스(UI)에 MediaElement 컨트롤을 추가하고 포함하려는 미디어에 Uri를 제공하는 것만큼 간단합니다. Microsoft Windows Media Player 10에서 지원하는 모든 미디어 형식은 WPF(Windows Presentation Foundation)에서 지원됩니다. 다음 예제에서는 XAML(Extensible Application Markup Language)에서 MediaElement의 간단한 사용법을 보여 줍니다.

<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>

이 샘플에서는 미디어가 로드되는 즉시 자동으로 재생됩니다. 미디어 재생이 완료되면 미디어가 닫히고 모든 미디어 리소스(비디오 메모리 포함)는 해제됩니다. 이것은 MediaElement 개체의 기본 동작이며 LoadedBehaviorUnloadedBehavior 속성에 의해 제어됩니다.

MediaElement 제어

LoadedBehaviorUnloadedBehavior 속성은 IsLoaded가 각각 true 또는 false일 때 MediaElement의 동작을 제어합니다. MediaState 속성은 미디어 재생 동작에 영향을 미치도록 설정됩니다. 예를 들어 기본값 LoadedBehaviorPlay이고 기본값 UnloadedBehaviorClose입니다. 즉, MediaElement가 로드되고 미리 받기가 완료되는 즉시, 미디어가 재생되기 시작합니다. 재생이 완료되면 미디어가 닫히고 모든 미디어 리소스가 해제됩니다.

LoadedBehaviorUnloadedBehavior 속성이 미디어 재생을 제어하는 유일한 방법은 아닙니다. 클록 모드에서 클록은 MediaElement를 제어할 수 있고 대화형 컨트롤 메서드는 LoadedBehaviorManual일 때 제어합니다. MediaElement는 다음과 같은 우선 순위를 평가하여 컨트롤의 이러한 경합을 처리합니다.

  1. UnloadedBehavior. 미디어가 언로드될 때 적용됩니다. 이렇게 하면 MediaClockMediaElement와 연결된 경우에도 기본적으로 모든 미디어 리소스가 해제됩니다.

  2. MediaClock. 미디어에 Clock이 있는 경우 적용됩니다. 미디어가 언로드되면 UnloadedBehaviorManual인 동안 MediaClock이 적용됩니다. 클록 모드는 항상 MediaElement의 로드된 동작을 재정의합니다.

  3. LoadedBehavior. 미디어가 로드될 때 적용됩니다.

  4. 대화형 컨트롤 메서드. LoadedBehaviorManual일 때 적용됩니다. 사용 가능한 컨트롤 메서드는 Play, Pause, Close, Stop입니다.

MediaElement 표시

MediaElement를 표시하려면 렌더링할 콘텐츠가 있어야 하며 콘텐츠가 로드될 때까지 ActualWidthActualHeight 속성이 0으로 설정됩니다. 오디오 전용 콘텐츠의 경우 이러한 속성은 항상 0입니다. 비디오 콘텐츠의 경우 MediaOpened 이벤트가 발생하면 ActualWidthActualHeight에서 로드된 미디어의 크기를 보고합니다. 즉, 미디어가 로드될 때까지 Width 또는 Height 속성이 설정되지 않는 한 MediaElement가 사용자 인터페이스(UI)에서 물리적 공간을 차지하지 않습니다.

WidthHeight 속성을 모두 설정하면 미디어가 MediaElement에 제공된 영역을 채우도록 늘어납니다. 미디어의 원래 가로 세로 비율을 유지하려면 Width 또는 Height 속성을 설정해야 하지만 둘 다 설정해서는 안 됩니다. WidthHeight 속성을 모두 설정하면 미디어가 바람직하지 않은 고정 요소 크기로 표시됩니다.

고정 크기 요소를 피하기 위해 WPF(Windows Presentation Foundation)에서 미디어를 미리 받을 수 있습니다. 이 작업은 LoadedBehaviorPlay 또는 Pause로 설정하면 수행됩니다. Pause 상태에서 미디어를 미리 받고 첫 번째 프레임을 표시합니다. Play 상태에서 미디어는 미리 받기 및 재생을 시작합니다.

MediaPlayer 클래스

MediaElement 클래스가 프레임워크 요소인 경우 MediaPlayer 클래스는 Drawing 개체에서 사용하도록 설계되었습니다. 바로 성능을 향상시키기 위해 프레임워크 수준 기능을 포기해도 되거나 Freezable 기능을 사용해야 할 때 Drawing 개체가 사용됩니다. MediaPlayer를 사용하여 애플리케이션에서 미디어 콘텐츠를 제공하면서 이러한 기능을 활용할 수 있습니다. MediaElement와 마찬가지로 MediaPlayer는 독립형 또는 클록 모드에서 사용할 수 있지만 MediaElement 개체의 언로드 및 로드 상태가 없습니다. 이렇게 되면 MediaPlayer의 재생 제어 복잡성이 줄어듭니다.

MediaPlayer 제어

MediaPlayer는 상태 비저장 방식이므로 미디어 재생을 제어하는 방법은 2가지 뿐입니다.

  1. 대화형 컨트롤 메서드. 독립 모드에 있을 때 적용됩니다(nullClock 속성).

  2. MediaClock. 미디어에 Clock이 있는 경우 적용됩니다.

MediaPlayer 표시

기술적으로 MediaPlayer는 물리적 표현이 없기 때문에 표시할 수 없습니다. 그러나 VideoDrawing 클래스를 사용하여 Drawing에서 미디어를 표시하는 데 사용할 수 있습니다. 다음 예제에서는 VideoDrawing을 사용하여 미디어를 표시하는 방법을 보여 줍니다.

//
// Create a VideoDrawing.
//
MediaPlayer player = new MediaPlayer();

player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));

VideoDrawing aVideoDrawing = new VideoDrawing();

aVideoDrawing.Rect = new Rect(0, 0, 100, 100);

aVideoDrawing.Player = player;

// Play the video once.
player.Play();

Drawing 개체에 대한 자세한 내용은 개체 개요를 참조하세요.

참고 항목