DirectShow DirectShow 의 개요 DirectShow FAQ   [목차열람] [주소복사] [슬롯비우기]
DirectShow FAQ
 
Microsoft DirectX 9.0

DirectShow FAQ

여기에는, Microsoft® DirectShow® 에 관한 자주 있는 질문의 대답이 모아지고 있다. 이하의 섹션이 포함된다.

일반적인 질문

DirectShow 가 지원 하고 있는 operating system는?

DirectShow 는, Microsoft® Windows® 9x, Microsoft® Windows® 2000, Microsoft® Windows® Me, Microsoft® Windows® XP 를 지원 하고 있다.

DirectShow 를 사용해 프로그램 하려면 어떠한 COM 지식이 필요한가?

애플리케이션 개발자에게 있어 COM 개체로 처리하기 위한 기본적인 이해 (인스턴스화, 공개하는 인터페이스에의 액세스, 그 인터페이스의 참조 카운트의 관리)는 필요하다. 필터의 개발에는, 한층 더 자세한 COM 의 지식이 필요하다.

DirectShow 는 어떠한 포맷을 지원 하는지?

DirectShow 로 지원 되는 포맷」을 참조할것.

DirectShow 하드웨어 호환성 리스트 (HCL)는 존재하는지?

아니오. DirectShow 는 사용 가능한 경우는 Microsoft® DirectDraw® 및 Microsoft® DirectSound® 하드웨어의 기능을 사용한다. 전용 하드웨어를 사용할 수 없는 경우, DirectShow 는 GDI 를 사용해 비디오를 드로잉(Drawing) 해,waveOut* 멀티미디어 API 를 사용해 오디오를 재생한다.

DirectShow 애플리케이션을 쓰려면 어떠한 언어를 사용할 수 있는지?

DirectShow 는 주로 C++ 개발용으로 설계되고 있다 (C 를 사용하는 일도 가능). Microsoft® Visual Basic® 를 사용하는 경우는, DirectShow API 의 일부의 서브 세트에만 액세스 할 수 있다. DirectShow 는 스크립트 베이스의 DVD 애플리케이션을 지원 하고 있는, 이것은 Microsoft® JScript® 혹은 Visual Basic Scripting Edition 를 사용한다. DirectShow 애플리케이션을 Borland Delphi 를 사용하고 쓰는 일도 가능하지만, SDK 문서에서는 거기에 대해 설명하고 있지 않다.

더 자세한 정보는, 다음 주제를 참조할것.

DirectShow 에서의 개발에 필요한 컴파일러는?

컴파일러의 환경을 올바르게 설정하면, Component Object Model (COM) 개체의 생성이 가능한 임의의 컴파일러를 사용할 수 있다.

DirectShow 는 Microsoft® Windows Media™ 와 어떻게 관련하고 있는지?

Windows Media 애플리케이션」을 참조할것.

DirectShow 는 Microsoft® DirectX® 외 구성 요소와 어떻게 관련하고 있는지?

내부적으로는, 하드웨어가 지원 할 때 DirectShow 는 DirectSound 와 DirectDraw 를 사용한다. 비디오 렌더러 및 오버레이 믹서 필터는, DirectDraw 3 및 DirectDraw 5 의 표면을 사용한다. Video Mixing Renderer 7 (Windows XP 마셔)은, DirectDraw 7 의 표면을 사용한다. Video Mixing Renderer 9 는 최신의 Microsoft® Direct3D® API 를 사용한다. DirectShow 애플리케이션을 쓰기 위해서(때문에) 다른 DirectX API 를 사용할 필요는 없다. 그러나 그것들을 조합하는 것은 가능하다. 예를 들어, 「텍스처 3D 샘플」을 참조할것.

DirectShow 는 Microsoft® ActiveMovie® 와 어떻게 관련하고 있는지?

ActiveMovie 는 DirectShow 의 원래의 이름이었다. ActiveMovie 라고 하는 용어는 이제 사용되지 않지만,AM_MEDIA_TYPE 이나 IAMVideoAccelerator 등의 일부의 API 명에 "AM" 라고 하는 머리 글자가 남아 있다.

DirectShow 는 멀티미디어 애플리케이션으로 한정되고 있는지?

DirectShow 에 포함되는 디폴트의 구성 요소는, 주로 오디오 및 비디오 데이터의 스트림용으로 설계되고 있다. 그러나, DirectShow 아키텍처는 많은 종류의 데이터 스트리밍 솔루션에도 사용되고 있다.

GraphEdit 유틸리티의 소스 코드는 공개되고 있을까? GraphEdit 는 재반포할 수 있을까?

소스는 공개되지 않다. Graphedt.exe 는 재반포할 수 없다.

DMO 는 DirectShow 필터에 두어 바뀌는지?

Microsoft® DirectX® 미디어 개체 (DMO)는 DirectShow 애플리케이션내에서 사용 가능하다. 엔코더, 디코더, 이펙트에 대해서는, DirectShow 필터 대신에 DMO 를 쓰는 것을 권한다. 그 이외의 목적에서는, DirectShow 필터가 보다 적절할지도 모른다. DMO 의 더 자세한 정보는, DirectX SDK 의 문서의 「DirectX Media Object」를 참조할것.

DirectShow 의 것보다 상세한 정보는 어디서 입수할 수 있는지?

Microsoft DirectX 개발 팀의 다양한 멤버가 메일링리스트의 토픽을 읽어, 가능한 코멘트를 쓴다고 기대되고 있지만, DirectXAV 는 Microsoft 지원 포럼에 바뀌는 것은 아니고, Microsoft 의 담당자가 직접 질문에 답하는 것이 보증되고 있는 것은 아니다. 많은 경우, 가장 도움이 되는 것은 DirectXAV 커뮤니티의 다른 멤버의 코멘트이다. 그들은 과거에 자기 자신으로 같은 문제에 직면해 오고 있기 때문이다.

이 메일링리스트에 적절한 주제로서는, DirectMusic Producer 를 사용한 작곡 테크닉, 오디오, 음악, 스토밍 비디오 프로그래밍 테크닉, 사운드 디자인 테크닉, 관련하는 API 에 대한 일반적인 문제나 정보, 코드의 단편, 제안, 힌트와 조언, 장치 드라이버의 품질, 장래적인 새로운 기능의 요구, API 를 사용한 실제의 경험등이 있다.

DirectX DEV 를 구독하려면 , 메시지 본문에 「subscribe directxdev」라고 써 LISTSERV@discuss.microsoft.com 에 메일을 보내는 것. DirectX A/V 를 구독하려면 , 메시지 본문에 「subscribe directxav」라고 써 LISTSERV@discuss.microsoft.com 에 메일을 보내는 것.

애플리케이션 / 필터를 개발하는데 있어서 곤란한 문제에 직면하고 있다. 개발 지원은 어디서 받게 되는지?

특정의 개발 지원의 문제에 대해서는, DirectX SDK 의 지원에 연락하는 것.

DirectShow 에 대해 설명한 서적은 있을까?

현재, DirectShow 에 대한 보고 쓰여진 서적은 1 권 뿐이다.

다음과 같은 기존의 DirectX 관련의 서적 중(안)에서, DirectShow 에 대해 간단하게 설명되고 있다.

「MSDN Magazine」의 2002 년 7 월호에는, DirectShow 에 관한 소개 기사와 간단한 비디오 이펙트 필터의 생성 방법이 기재되어 있다.

Microsoft 에 의한 DirectShow 개선방법의 아이디어를 가지고 있다.

Microsoft 는 제안, 질문, 코멘트를 환영합니다. 당신의 생각을 가르쳐 주세요. 무엇이 우리가 부족한지? 어느 분야를 가장 개선해야 한다고 생각하는지? 어떠한 튜토리얼과 샘플이 필요라고 생각하는지? 당신의 제안이 장래의 작업의 우선 순위부에 도움이 되겠지요. 새로운 DirectShow 문서에 관련하는 질문이나 제안이 있으면, 메시지를 askdshow@microsoft.com 에 보내 주세요.

Windows Media Player 로 AVI 파일 포맷을 재생하고 있다. 오디오는 들리지만, 비디오를 보지 못하고, 검은 화면만이 보인다. 무엇이 나쁜 것인지?

아마 그 파일은 사용하는 시스템으로 지원되지 않은 CODEC 로 encode 되고 있다. AVI 파일 포맷은 공통이지만, AVI 파일은 많은 다른 CODEC (coder/decoder)로 생성 할 수 있다. AVI 파일을 지원되지 않은 CODEC 를 사용해 재생 하면, 오디오 구성 요소는 들릴지도 모르지만, 비디오는 검은 스크린이 표시되는지, 스크린 컨텐츠를 변경할 수 없는 채가 된다.

  Windows Media Player 는 많은 경우, 시스템에 CODEC 가 없는 경우, 그 CODEC 를 다운로드해, 인스톨 하려고 한다.

어느 미디어 파일에 어느 CODEC 가 사용되고 있는지를 아는 방법은?

이하와 같이 하는 것.

프로그래밍에 관한 질문

어떻게 애플리케이션을 빌드 하는지? 어느 라이브러리 파일과 헤더 파일이 필요한가?

빌드 환경의 설정」을 참조할것.

GraphEdit 가 문서에 없는 많은 필터를 표시한다. 이러한 필터는 무엇인가?

GraphEdit 는 있는 필터 카테고리로 시스템에 등록되어 모든 필터를 열거한다. 이것은 써드파티 애플리케이션이 인스톨 한 필터나 Windows Media 또는 NetMeeting 와 같은 다른 Microsoft 테크놀러지가 인스톨 한 필터를 포함하고 있다. 또, 일부의 DirectShow 필터는 CODEC 나 하드웨어 장치의 래퍼로서 동작해, 각 CODEC 나 장치는 다른 필터로서 표시된다. Microsoft H. 263 비디오 CODEC 는 NetMeeting 가 사용하지만, DirectShow 에서는 지원 하지 않게 되었다. 더 자세한 정보는, 「장치와 필터의 열거」를 참조할것.

프로그램에 의한 커스텀 그래프의 생성으로 문제가 있다.

최초로 GraphEdit 로 필터 그래프를 생성 하는 것. 이 툴을 사용하면, 많은 가능성을 재빠르게 시뮬레이트 할 수 있다. GraphEdit 는 보통, 소스 코드로 생성 하려고 하기 전에 그래프를 테스트하기 위한 뛰어난 장소이다.

그래프의 생성의 더 자세한 정보는, 다음 주제를 참조할것.

특정의 머신에 DirectShow 가 인스톨 되고 있는지를 확인하는 방법은?

CoCreateInstance 를 호출해 필터 그래프 매니저의 인스턴스를 생성 한다. 이 호출이 성공했을 경우는, DirectShow 가 머신에 인스톨 되고 있다. 다음 코드는, 그방법을 나타내고 있다.

IGraphBuilder *pGraph;

HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, (void **) &pGraph);

프로퍼티 페이지를 표시하지 않고 필터의 설정을 변경하는 방법은?

대부분의 필터는, 필터의 프로퍼티를 설정하기 위한 인터페이스를 최악이어도 1 개 공개하고 있다. 목적의 필터의 레퍼런스 페이지를 조사하는 것 ( 「DirectShow 필터」를 참조).

왜 ASF 라이터 필터와 ASF 리더 필터를 사용할 수 없는 것인지?

DirectX 9.0 이전의 버전에서는, 애플리케이션내에서 이러한 필터를 사용하려면 , 일의의 소프트웨어 증명서를 제공할 필요가 있었다. 또, GraphEdit 에서는 이러한 필터를 사용할 수 없었다. 이 일의의 증명서는, Windows Media™ Format SDK Version 7.0 을 사용하기 위해서(때문에) 필요했다. DirectX 9.0 에서는, 이 2 개의 필터는 Version 7.1 의 SDK 에 근거하고 있으므로, 보호되지 않은 컨텐츠의 읽기나 쓰기에 일의의 증명서는 불필요하다. 따라서, 보호되지 않은 컨텐츠의 경우, 양쪽 모두의 필터를 애플리케이션 및 GraphEdit 로 사용할 수 있게 되었다. Digital Rights Management 로 보호된 파일의 생성 또는 읽기에서는, 일의의 증명서가 필요하다.

Windows Media™ Format 9 Series SDK 가 릴리스 될 때는, 이러한 필터의 DirectShow SDK 에 포함되는 버전에 대신하는 버전이 제공될 예정이다.

DirectShow 는 현재의 재생 위치를 정기적으로 애플리케이션에 통지할 수 있을까?

위치의 콜백 통지는 행해지지 않는다. 타이머를 사용해,IMediaSeeking::GetCurrentPosition 메서드를 호출해 현재의 위치를 얻어온다 일.

필터를 썼지만, 어떻게 해 인스톨 하면 좋은가?

DirectShow 필터의 등록 방법」을 참조할것.

GraphEdit 로 자신의 필터를 테스트할 수 있을까?

필터 개발중에 GrapEdit 는 필터간의 접속을 시각화할 수 있도록(듯이) 한다. GraphEdit 는 필터 기능의 퀵 테스트도 제공한다. 그러나, 그것은 견뢰한 테스트 플랫폼은 아니다.

필터내의 핀의 수를 확인하는 방법은?

필터 그래프내의 개체의 열거」를 참조할것.

필터는 어느 권한 링으로 동작할까?

필터는 링 3 으로 동작한다. 그러나, 스트리밍 장치를 제어하는 필터는 링 0 으로 동작하는 것이 있다. 「하드웨어 장치가 필터 그래프에 참가하는 방법」을 참조할것.

커널 디버거를 사용할 필요가 있을까?

특정의 프로젝트에 따라서 다르다. DirectX 디버그 런 타임 라이브러리를 인스톨 하면, 디버그 드라이버와 그 외의 커널 모드 구성 요소가 인스톨 되어 애플리케이션이 이러한 구성 요소의 어느쪽이든으로 디버그 Assert를 발생시켰을 경우, 프로세스에 커널 디버거를 Attach 하고 있지 않는 한, 머신은 자동적으로 재부팅 한다.

DEFINE_GUID 매크로는 어떻게 기능하는지?

DEFINE_GUID 매크로는, 소스 코드내의 GUID 값의 extern 참조의 선언에 관한 문제를 해결한다. 예를 들어, 프로젝트에 3 개의 소스 파일 Src1.cpp, Src2.cpp, 및 Src3.cpp 가 있어, 3 개의 파일이 모두 정의 끝난 특정의 GUID 값을 사용 하면 한다. GUID 값은 프로젝트내에서 1 회만 정의해, 그 외의 소스 파일에서는 그 GUID 값에의 extern 참조를 선언할 필요가 있다. DEFINE_GUID 매크로를 사용하면 같은 헤더 파일을 양쪽 모두의 목적으로 사용할 수 있다. 헤더 파일에서는, 다음과 같이 GUID 를 선언한다.

DEFINE_GUID(CLSID_MyObject, 
0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);

이 예의 0 의 부분에, 실제의 GUID 값에 옮겨놓는다. Guidgen 유틸리티를 사용해, 새로운 GUID 를 생성 해, 그 GUID 를 DEFINE_GUID 형식에서 헤더 파일에 붙일 수가 있다. 이 GUID 를 참조하는 모든 소스 파일에 이 헤더 파일을 인클루드 한다. 소스 파일 가운데 1 개에서는, 다른 헤더 파일보다 전에 Initguid.h 헤더 파일을 인클루드 한다. 이하에 예를 나타낸다.

// Src1.cpp
#include <initguid.h>
#include "MyGuids.h"

// Src2.cpp
#include "MyGuids.h"

// Src3.cpp
#include "MyGuids.h"

Initguid.h 헤더 파일이 인클루드되지 않은 파일에서는,DEFINE_GUID 매크로가 GUID 값에의 extern 참조를 생성 한다. Initguid.h 헤더 파일이 인클루드 되고 있는 경우는, 이 헤더 파일이 DEFINE_GUID 매크로를 재정의해,DEFINE_GUID 는 GUID 의 정의의 선언을 생성 한다.

어느 소스 파일에도 Initguid.h 를 인클루드 하고 있지 않는 경우는, 링크 에러 "unresolved external symbol" 가 출력된다. 같은 GUID 에 대해 Initguid.h 를 2 회 인클루드 하고 있는 경우, compile error "redefinition; multiple initialization" 가 출력된다. 이러한 에러를 해결하려면 , Initguid.h 가 1 회만 인클루드 되고 있는 것을 확인하는 것. 또, Initguid.h 를 프리컴파일이 끝난 헤더 파일에 인클루드 하지 않는 것. 프리컴파일이 끝난 헤더는, 사실상, 모든 소스 파일에 인클루드 되기 때문이다.

↑TOP