1. DirectShow의 구조
DirectShow는, 「필터(Filter)」라고 불리는 부품을 이어 맞추어 「그래프(Graph)」를 작성해, Graph에서 재생이나 정지등의 동작을 실행 하는 구조로 되어 있습니다. WAV의 예에서는, WAV파일등을 나타내는 상자가 Filter입니다. Filter를 이어 맞춘 전체가Graph입니다. 또, 각Filter를 뒤따르고 있는 접속 단자가 「핀(Pin)」입니다.
어플리케이션을 쓰기 위해서 최저한 필요한DirectShow의 기본 컴퍼넌트를 설명해 보겠습니다.
- Filter
- Filter는, 데이터의 입출력이나 변환 등, 가장 기본이 되는 동작을 하는 컴퍼넌트입니다. DirectShow는, 여러가지 필터를 이어 맞추는 것으로 각종 기능을 실행하고 있습니다. Filter의 종류는 3 종류가 있습니다.
- Source Filter
- Transform Filter
- Renderer Filter
- Source Filter는, 입력 위한 필터입니다. 모든 영상 데이터는Source Filter로부터 시작합니다. 일반적인Source Filter의 예로는, 캡쳐 카드, 비디오 디바이스, 음원, 파일등이 있습니다. ]
Transform Filter는, 입력을 어떠한 형태로 변화시켜 출력시킵니다. 파일 포맷을 해석하거나 포맷을 변환시키거나, 또는 어떤 효과를 입히는등 다양한 것이 있습니다.
Renderer Filter는 Source Filter로 시작한 데이터 스트림의 종점이 됩니다. Renderer Filter는, 최종 렌더링(화면출력등)을 담당합니다. Renderer Filter는 디스플레이에 출력, 음성 출력, 외부 디바이스에 출력, 파일에 저장, 네트워크로 송출(RTP)등을 실행합니다.
- Pin
- Filter는 최소한 1개의 Pin을 갖게 됩니다. (단 Transform Filter는 최소한 2개 입니다.) Pin이 여러개 있는 Filter도 있습니다. Filter는 Pin과 Pin을 연결하는 것으로 각각의 필터가 연결되어 동작됩니다. Pin에는 Output Pin과 Input Pin의 2가지 종류가 있습니다. 각각의 Pin은 자신과 다른 종류의 Pin으로만 연결할 수 있습니다. 예를 들면 Output Pin과 Output Pin을 연결할 수 없습니다.
- Output Pin은 반드시 Input Pin과 연결되어야 합니다.
- Output Pin은 반드시 Input Pin과 연결되어야 합니다.
- Graph
- DirectShow는 Filter를 조합하는 것으로 Graph를 만들 수 있습니다. 재생/정지/일시정지등의 동작은 Graph에 에서 행해집니다. Graph에는 Source Filter와 Renderer Filter가 각각 최소 1개이상 포함되지 않으면 안됩니다.
- Filter Graph Manager
- Filter Graph Manager는 Filter와 Graph의 생성이나 연결등을 실행합니다. 대부분의 기본적인 동작은 Filter Graph Manager를 기점으로 실행됩니다. 어플리케이션 작성자는, 우선,Filter Graph Manager를 생성하는 것부터 시작합니다.
2. Filter and Interface
1. ICaptureGraphBuilder2 인터페이스 : 캡춰 그래프나 그 외의 커스텀 필터 그래프를 구축하는 메서드를 제공
메서드 | 설명 |
AllocCapFile | 캡춰 파일이 지정된 사이즈에 미리 할당한다. |
ControlStream | 캡춰 된 데이터의 1 개 이상의 스트림의 시작 타임과 종료 타임을 설정한다. |
CopyCaptureFile | 캡춰 파일로부터 유효한 미디어 데이터를 복사 한다. |
FindInterface | 지정된 필터로부터 시작해, 지정된 인터페이스를 그래프내에서 검색한다. |
FindPin | 필터의 특정의 핀을 얻어온다인가, 특정의 핀이 지정된 조건에 적합할지 어떨지를 판별한다. |
GetFiltergraph | 빌더가 사용하고 있는 필터 그래프를 얻어온다. |
RenderStream | 소스 필터의 출력 핀을, 옵션으로 압축 필터를 경유해, 렌더링 필터에 접속한다. |
SetFiltergraph | 캡춰 그래프 빌더가 사용하는 필터 그래프를 지정한다. |
SetOutputFileName | 필터 그래프의 파일 쓰기 섹션을 생성 한다. |
2. IMediaControl
IMediaControl 인터페이스는, 필터 그래프를 통과하는 데이터 플로우를 제어하는 메서드를 제공한다. 여기에는, 그래프를 실행, 포즈, 정지하는 메서드가 포함된다. 필터 그래프 매니저는, 이 인터페이스를 처리 하고 있다.
3. AMMediaType
메서드 | 설명 |
Run | 필터 그래프의 모든 필터를 실행한다. |
Pause | 필터 그래프의 모든 필터를 포즈 한다. |
Stop | 필터 그래프의 모든 필터를 정지한다. |
StopWhenReady | 필터가 데이터를 큐에 넣어지도록(듯이) 필터 그래프를 포즈로 해, 다음에 필터 그래프를 정지한다. |
GetState | 필터 그래프 상태를 얻어온다. |
RenderFile | Visual Basic 용. 이 문서에는 기재하고 있지 않다. |
AddSourceFilter | Visual Basic 용. 이 문서에는 기재하고 있지 않다. |
get_FilterCollection | Visual Basic 용. 이 문서에는 기재하고 있지 않다. |
get_RegFilterCollection | Visual Basic 용. 이 문서에는 기재하고 있지 않다. |
3. AMMediaType