본문 바로가기
📁 [4] 개발자 정보 & 코드 노트/C#

C# Windows Forms 강의 88편: 멀티미디어 플레이어 제작 - 오디오 및 비디오 재생 기능 구현

by wawManager 2025. 5. 2.

 

1. 강의 개요

이번 강의에서는 Windows Forms를 활용해 오디오 및 비디오 파일 재생이 가능한
멀티미디어 플레이어를 제작합니다.
사용자는 음악 파일이나 동영상 파일을 로드하고, 재생, 일시정지, 정지 등의
기본적인 컨트롤 기능을 사용할 수 있습니다.
.NET에서 제공하는 Windows Media Player 컨트롤을 활용하여
직관적이고 사용하기 쉬운 UI를 구현합니다.


2. 학습 목표

  • Windows Media Player 컨트롤을 활용해 오디오 및 비디오 재생
  • 파일 로드 및 재생, 일시정지, 정지 기능 구현
  • 슬라이더(TrackBar)를 사용해 재생 위치 컨트롤 구현
  • 기본적인 멀티미디어 플레이어 UI 제작

3. 기능 요구사항

필수 기능

1️⃣ 파일 로드 및 재생:

  • 오디오 또는 비디오 파일을 선택하여 재생

2️⃣ 재생 컨트롤:

  • 재생, 일시정지, 정지 기능 제공

3️⃣ 재생 위치 조정:

  • TrackBar를 사용해 재생 위치 이동

4️⃣ UI 구성 및 동작:

  • 재생 시간 표시 및 사용자 친화적인 인터페이스 구성

4. 실습: 멀티미디어 플레이어 제작

1️⃣ 폼 구성

  • 폼(Form) 이름: Form1
  • 컨트롤 배치:

컨트롤 타입 이름 위치 크기

AxWindowsMediaPlayer mediaPlayer 폼 상단 전체 (600 x 400)
Button btnPlay 폼 하단 왼쪽 (100 x 30)
Button btnPause 폼 하단 중앙 (100 x 30)
Button btnStop 폼 하단 오른쪽 (100 x 30)
TrackBar trackBar 폼 하단 전체 아래 (600 x 30)

📌 폼 디자인 예시:

--------------------------------------------------
|       [AxWindowsMediaPlayer - 동영상 화면]     |
--------------------------------------------------
| [Play 버튼] [Pause 버튼] [Stop 버튼]           |
--------------------------------------------------
|            [TrackBar - 재생 위치]             |
--------------------------------------------------

2️⃣ 코드 작성

(1) Windows Media Player 컨트롤 추가

  1. Windows Media Player 라이브러리 추가
    • Visual Studio의 **도구 상자(Toolbox)**에서 "Windows Media Player"를 추가합니다.
    • Windows Media Player 컨트롤을 추가하려면 COM Components에서 AxWindowsMediaPlayer를 선택하세요.
  2. 폼에 컨트롤 배치
    • AxWindowsMediaPlayer 컨트롤을 폼에 드래그하여 배치하고, 이름을 mediaPlayer로 변경합니다.

(2) 멀티미디어 재생 코드 작성

using System;
using System.Windows.Forms;

namespace WindowsFormsApp_MediaPlayer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 파일 로드 및 재생
        private void btnPlay_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "멀티미디어 파일 (*.mp3;*.mp4;*.avi;*.wmv)|*.mp3;*.mp4;*.avi;*.wmv";

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    mediaPlayer.URL = openFileDialog.FileName;
                    mediaPlayer.Ctlcontrols.play();
                }
            }
        }

        // 일시정지
        private void btnPause_Click(object sender, EventArgs e)
        {
            if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying)
            {
                mediaPlayer.Ctlcontrols.pause();
            }
        }

        // 정지
        private void btnStop_Click(object sender, EventArgs e)
        {
            mediaPlayer.Ctlcontrols.stop();
        }
    }
}

(3) 재생 위치 조정 기능

        // TrackBar로 재생 위치 제어
        private void trackBar_Scroll(object sender, EventArgs e)
        {
            if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying ||
                mediaPlayer.playState == WMPLib.WMPPlayState.wmppsPaused)
            {
                mediaPlayer.Ctlcontrols.currentPosition = trackBar.Value;
            }
        }

        // TrackBar 업데이트
        private void timer_Tick(object sender, EventArgs e)
        {
            if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying)
            {
                trackBar.Maximum = (int)mediaPlayer.currentMedia.duration;
                trackBar.Value = (int)mediaPlayer.Ctlcontrols.currentPosition;
            }
        }

(4) Designer 코드

        private void InitializeComponent()
        {
            this.mediaPlayer = new AxWMPLib.AxWindowsMediaPlayer();
            this.btnPlay = new Button();
            this.btnPause = new Button();
            this.btnStop = new Button();
            this.trackBar = new TrackBar();
            this.timer = new Timer();

            // AxWindowsMediaPlayer 설정
            this.mediaPlayer.Location = new System.Drawing.Point(10, 10);
            this.mediaPlayer.Size = new System.Drawing.Size(600, 400);

            // Play Button 설정
            this.btnPlay.Location = new System.Drawing.Point(10, 420);
            this.btnPlay.Size = new System.Drawing.Size(100, 30);
            this.btnPlay.Text = "Play";
            this.btnPlay.Click += new EventHandler(this.btnPlay_Click);

            // Pause Button 설정
            this.btnPause.Location = new System.Drawing.Point(120, 420);
            this.btnPause.Size = new System.Drawing.Size(100, 30);
            this.btnPause.Text = "Pause";
            this.btnPause.Click += new EventHandler(this.btnPause_Click);

            // Stop Button 설정
            this.btnStop.Location = new System.Drawing.Point(230, 420);
            this.btnStop.Size = new System.Drawing.Size(100, 30);
            this.btnStop.Text = "Stop";
            this.btnStop.Click += new EventHandler(this.btnStop_Click);

            // TrackBar 설정
            this.trackBar.Location = new System.Drawing.Point(10, 460);
            this.trackBar.Size = new System.Drawing.Size(600, 30);
            this.trackBar.Scroll += new EventHandler(this.trackBar_Scroll);

            // Timer 설정
            this.timer.Interval = 1000; // 1초마다 업데이트
            this.timer.Tick += new EventHandler(this.timer_Tick);
            this.timer.Start();

            // Form 설정
            this.ClientSize = new System.Drawing.Size(640, 500);
            this.Controls.Add(this.mediaPlayer);
            this.Controls.Add(this.btnPlay);
            this.Controls.Add(this.btnPause);
            this.Controls.Add(this.btnStop);
            this.Controls.Add(this.trackBar);
            this.Text = "멀티미디어 플레이어";
        }

3️⃣ 실행 결과

1️⃣ 파일 로드 및 재생

  • "Play" 버튼 클릭 → OpenFileDialog에서 파일 선택 → 멀티미디어 파일 재생

2️⃣ 재생 컨트롤

  • "Pause" 버튼 클릭 → 재생 중인 파일 일시정지
  • "Stop" 버튼 클릭 → 재생 중인 파일 정지

3️⃣ 재생 위치 조정

  • TrackBar를 드래그하여 재생 위치 이동

5. 주요 개념 요약

  • AxWindowsMediaPlayer: Windows Media Player 컨트롤로 멀티미디어 재생
  • TrackBar: 재생 위치 조정 컨트롤
  • Timer: 재생 상태를 주기적으로 업데이트
  • OpenFileDialog: 파일 선택 UI 제공

 

 

📌 #CSharp #WindowsForms #MediaPlayer #멀티미디어 #오디오재생 #비디오재생