이번엔 초간단 플레이어를 만들어 보겠습니다.

먼저 DSPack 을 설치하시길 권합니다.
DirectShow9헤더 파일만 있어도 되지만 DSPack을 설치하시는게 편리합니다.
DSPack 다운로드

DSPack은 아직 공식적으로 BDS2006버전이 없습니다.
CVS에서 DSPack 2006버전을 받거나 아래에서 받으시면 됩니다.

DSPACK.zip

DSPack 2006 다운로드


준비가 되었으면 플레이어를 만들어 봅시다.


버튼 하나랑 OpenDialog 하나를 놨습니다.

코드를 작성합니다.

unit player;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DirectShow9, ActiveX;  //Directshow와 ActiveX를 추가

type
  TForm1 = class(TForm)
  Button1: TButton;
  OpenDialog1: TOpenDialog;
  procedure FormCreate(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  GraphBuilder: IGraphBuilder;
  MediaControl: IMediaControl;
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    //MediaControl 인터페이스 연결
    GraphBuilder.QueryInterface(IID_IMediaControl, MediaControl);
    //파일 읽기
    GraphBuilder.RenderFile(StringToOleStr(OpenDialog1.FileName), nil);
    //재생
    MediaControl.Run;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//GraphBuilder 생성
  CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
  IID_IFilterGraph, GraphBuilder);
end;

end.

아주 간단한 코드입니다.
이걸로 음악파일을 물론 동영 파일도 재생됩니다.

ds_study.zip

예제파일 다운로드

물론 이것만으로 플레이어라고 하기엔 많이 부족합니다^^;
seek바가 있어서 앞으로뒤로 탐색할 수 있는 기능도 필요하고 볼륨 조절등 다양한 기능이 추가되어야 합니다.
seek같은건 IMediaSeeking 인터페이스 추가를 하여 쉽게 만들 수 있습니다.
위의 코드에 IMediaControl 인터페이스를 사용했습니다. 이 인터페이스는 Play(Run), Pause, Stop등을 할 수 있는 인터페이스입니다.

동영상을 열면 1편의 GraphEdit에서 보았듯이 ActiveMovieWindow 가 열리면서 동영상이 재생됩니다.
동영상 화면을 따로 제어하시려면 IVideoWindow 인터페이스를 사용하시면 됩니다.
인터페이스에 대한 자세한 설정은 DirectX SDK를 참고하시면 됩니다.

기초를 다루기때문에 자세한 내용은 SDK를 참고하시기 바랍니다.

3편에서는 좀더 복잡한 wav파일 변환기를 만들어 보겠습니다.

'자료들 > Delphi' 카테고리의 다른 글

화니의 DirectShow 기초 2  (1) 2006.05.30
화니의 DirectShow 기초 1  (0) 2006.05.30
Indy9 -> Indy10 으로 업데이트하기  (0) 2006.03.01
MemProof 메모리 누수 탐지  (0) 2005.09.26
Posted by 화니.

댓글을 달아 주세요

  1. 2007.05.29 17:32  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다