■ MediaPlayer 클래스를 사용해 미디어를 재생하는 방법을 보여준다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
using System; using System.Threading; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; ... /// <summary> /// 미디어 오픈 여부 /// </summary> private bool isMediaOpened = false; /// <summary> /// 미디어 실패 여부 /// </summary> private bool isMediaFailed = false; ... #region 미디어 플레이어 미디어 오픈시 처리하기 - mediaPlayer_MediaOpened(sender, e) /// <summary> /// 미디어 플레이어 미디어 오픈시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void mediaPlayer_MediaOpened(object sender, EventArgs e) { this.isMediaOpened = true; } #endregion #region 미디어 플레이어 미디어 실패시 처리하기 - mediaPlayer_MediaFailed(sender, e) /// <summary> /// 미디어 플레이어 미디어 실패시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void mediaPlayer_MediaFailed(object sender, ExceptionEventArgs e) { this.isMediaFailed = true; } #endregion ... private MediaPlayer mediaPlayer = new MediaPlayer(); ... this.mediaPlayer.ScrubbingEnabled = true; this.mediaPlayer.MediaOpened += new EventHandler(mediaPlayer_MediaOpened); this.mediaPlayer.MediaFailed += new EventHandler<ExceptionEventArgs>(mediaPlayer_MediaFailed); Uri sourceURI = new Uri("c:\\sample.avi"); this.mediaPlayer.Open(sourceURI); while(this.isMediaOpened == this.isMediaFailed) { this.mediaPlayer.Dispatcher.Invoke(new Action(delegate { Thread.Sleep(10); })); } if(this.isMediaFailed) { // 미디어 파일을 오픈할 수 없는 경우를 처리한다. MessageBox.Show("Failed"); return; } Size videoSize = CalculateVideoSize(this.mediaPlayer, 800, 600); // MediaPlayer 객체를 소스로 사용하는 컨테이너에서 필요한 경우 비디오 크기를 설정한다. // this.videoDrawing.Rect = new Rect(0, 0, pVideoSize.Width, pVideoSize.Height); this.mediaPlayer.Play(); ... #region 비디오 크기 구하기 - GetVideoSize(mediaPlayer, sourceSize, maximumSize) /// <summary> /// 비디오 크기 계산하기 /// </summary> /// <param name="mediaPlayer">MediaPlayer 객체</param> /// <param name="sourceSize">소스 크기</param> /// <param name="maximumSize">최대 크기</param> /// <returns>비디오 크기</returns> /// <remarks>비디오 크기는 Double형 Size 타입이나 픽셀 값이다</remarks> private Size GetVideoSize(MediaPlayer mediaPlayer, Size maximumSize) { Size videoSize = new Size(); if(mediaPlayer.NaturalVideoWidth > mediaPlayer.NaturalVideoHeight) { double videoRatio = (double)mediaPlayer.NaturalVideoHeight / mediaPlayer.NaturalVideoWidth; videoSize.Width = Math.Min(maximumSize.Width, mediaPlayer.NaturalVideoWidth); videoSize.Height = videoSize.Width * videoRatio; } else { double videoRatio = (double)mediaPlayer.NaturalVideoWidth / mediaPlayer.NaturalVideoHeight; videoSize.Height = Math.Min(maximumSize.Height, mediaPlayer.NaturalVideoHeight); videoSize.Width = videoSize.Height * videoRatio; } return videoSize; } #endregion #region 비디오 크기 구하기 - GetVideoSize(mediaPlayer, sourceSize, maximumWidth, maximumHeight) /// <summary> /// 비디오 크기 구하기 /// </summary> /// <param name="mediaPlayer">MediaPlayer 객체</param> /// <param name="sourceSize">소스 크기</param> /// <param name="maximumWidth">최대 너비</param> /// <param name="maximumHeight">최대 높이</param> /// <returns>비디오 크기</returns> /// <remarks>비디오 크기는 Double형 Size 타입이나 픽셀 값이다</remarks> private Size GetVideoSize(MediaPlayer mediaPlayer, double maximumWidth, double maximumHeight) { return GetVideoSize(mediaPlayer, new Size(maximumWidth, maximumHeight)); } #endregion |