멀티미디어 개요

업데이트: 2007년 11월

이 항목에서는 WPF(Windows Presentation Foundation)의 멀티미디어 기능을 소개합니다. 멀티미디어 기능을 사용하면 사운드 및 비디오를 응용 프로그램에 통합하여 사용자 경험을 개선할 수 있습니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 미디어 API
  • 미디어 재생 모드
  • MediaElement 클래스
  • MediaPlayer 클래스
  • 관련 항목

미디어 API

오디오, 비디오 및 오디오 콘텐츠가 포함된 비디오를 제공하는 데에는 MediaElementMediaPlayer가 모두 사용됩니다. 두 형식 모두 대화형으로 제어하거나 시계를 기반으로 제어할 수 있습니다. 또한 두 형식 모두 미디어 재생을 위해 최소한 Microsoft Windows Media Player 10 OCX가 필요할 수 있습니다. 그러나 이러한 API는 다른 시나리오에서 사용됩니다.

MediaElement레이아웃 시스템에서 지원하는 UIElement이며 많은 컨트롤의 콘텐츠로 사용될 수 있습니다. 이는 코드뿐만 아니라 XAML(Extensible Application Markup Language)에서도 사용할 수 있습니다. 반면 MediaPlayerDrawing 개체를 위해 디자인되었으며 레이아웃을 지원하지 않습니다. MediaPlayer를 사용하여 로드된 미디어는 VideoDrawing을 사용하거나 DrawingContext와의 직접적인 상호 작용을 통해서만 제공될 수 있습니다. MediaPlayer는 XAML에서 사용될 수 없습니다.

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

참고

응용 프로그램으로 미디어를 배포하는 경우 미디어 파일을 프로젝트 리소스로 사용할 수 없습니다. 대신 프로젝트 파일에서 미디어 형식을 Content로 설정하고 CopyToOutputDirectory를 PreserveNewest 또는 Always로 설정해야 합니다.

미디어 재생 모드

참고

MediaElementMediaPlayer 모두에는 유사한 멤버가 있습니다. 이 단원에 있는 링크를 사용하여 MediaElement 클래스 멤버를 참조할 수 있습니다. 특별히 언급하지 않는 한 MediaElement 클래스에서 링크가 지정된 멤버는 MediaPlayer 클래스에도 있습니다.

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

독립 모드

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

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

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

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

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

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

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

시계 모드

시계 모드에서는 MediaTimeline이 미디어를 재생합니다. 시계 모드의 특성은 다음과 같습니다.

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

  • 미디어 재생은 시계로 제어할 수 있습니다. 미디어 개체의 컨트롤 메서드는 사용할 수 없습니다.

  • MediaTimeline 개체의 Source 속성을 설정하고, 시간 표시 막대에서 시계를 만들고, 이 시계를 미디어 개체에 할당하여 미디어를 로드합니다. Storyboard 내부의 MediaTimelineMediaElement를 대상으로 하는 경우에도 미디어가 이러한 방식으로 로드됩니다.

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

시계 및 시간 표시 막대에 대한 자세한 내용은 애니메이션 개요를 참조하십시오.

시계 모드의 예제를 보려면 방법: 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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>
<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://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. 미디어가 언로드될 때 적용됩니다. 이는 MediaClockMediaElement에 연결되어 있는 경우에도 기본적으로 모든 미디어 리소스가 해제되도록 합니다.

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

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

  4. 대화형 컨트롤 메서드. LoadedBehaviorManual이면 적용됩니다. 사용 가능한 컨트롤 메서드는 Play, Pause, CloseStop입니다.

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 기능이 필요한 경우 사용됩니다. MediaPlayer를 사용하면 응용 프로그램에 미디어 콘텐츠를 제공하면서 이러한 기능을 활용할 수 있습니다. MediaElement와 같이 MediaPlayer는 독립 모드 또는 시계 모드에서 사용될 수 있지만 MediaElement 개체의 언로드 및 로드 상태는 제공되지 않습니다. 이를 통해 MediaPlayer의 재생 제어는 간단해집니다.

MediaPlayer 제어

MediaPlayer는 상태를 저장하지 않기 때문에 미디어 재생을 제어할 수 있는 방법이 두 가지 뿐입니다.

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

  2. 미디어에 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 개체에 대한 자세한 내용은 Drawing 개체 개요를 참조하십시오.

참고 항목

작업

비디오 텍스트 데모

Slide Puzzle 데모

개념

레이아웃 시스템

참조

DrawingGroup