지능형 연결
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
지능형 연결은 필터 그래프 관리자가 필터 그래프를 빌드하는 데 사용하는 메커니즘입니다. 필터를 선택하고 필터 그래프에 추가하는 여러 관련 알고리즘으로 구성됩니다.
특정 필터 그래프를 빌드하는 데 문제가 있고 문제를 해결하려는 경우 또는 고유한 필터를 작성하고 자동 그래프 빌드에 사용할 수 있도록 하려는 경우 이 항목을 읽어보세요.
Intelligent Connect에는 다음 IGraphBuilder 메서드가 포함됩니다.
- IGraphBuilder::AddSourceFilter
- IGraphBuilder::Render
- IGraphBuilder::RenderFile
- IGraphBuilder::Connect
IGraphBuilder::AddSourceFilter
IGraphBuilder::AddSourceFilter 메서드는 지정된 파일을 렌더링할 수 있는 소스 필터를 추가합니다. 먼저 레지스트리를 살펴보고 프로토콜(예: https://
), 파일 이름 확장명 또는 미리 결정된 검사 바이트 집합(특정 패턴과 일치하는 파일의 특정 오프셋에 있는 바이트)일치합니다. 자세한 내용은 사용자 지정 파일 형식 등록하는참조하세요. 메서드가 적절한 원본 필터를 찾은 다음 해당 필터의 인스턴스를 만들고 그래프에 추가하고 파일 이름으로 필터의 IFileSourceFilter::Load 메서드를 호출합니다.
IGraphBuilder::Render
IGraphBuilder::Render 메서드는 그래프의 하위 섹션을 빌드합니다. 연결되지 않은 출력 핀에서 시작하여 다운스트림으로 작동하여 필요에 따라 새 필터를 추가합니다. 시작 필터는 이미 그래프에 있어야 합니다. 각 단계에서 Render 메서드는 이전 필터에 연결할 수 있는 필터를 검색합니다. 연결 필터에 여러 출력 핀이 있는 경우 스트림이 분기할 수 있습니다. 모든 스트림에 렌더러가 있으면 검색이 중지됩니다. Render 메서드가 중단되면 다른 필터 집합을 사용하여 백업하고 다시 시도할 수 있습니다.
각 출력 핀을 연결하기 위해 Render 메서드는 다음을 수행합니다.
핀이 IStreamBuilder 인터페이스를 지원하는 경우 필터 그래프 관리자는 핀의 IStreamBuilder::Render 메서드에 전체 프로세스를 위임합니다. 이 인터페이스를 노출하면 핀은 그래프의 나머지 부분을 렌더러로 빌드하는 책임을 맡습니다. 그러나 이 인터페이스를 지원하는 핀은 거의 없습니다.
필터 그래프 관리자는 메모리에 캐시된 필터(있는 경우)를 사용하려고 합니다. Intelligent Connect 프로세스 전체에서 Filter Graph Manager는 프로세스의 이전 단계에서 필터를 캐시할 수 있습니다. (또한 Dynamic Graph Building참조하세요.)
필터 그래프에 연결되지 않은 입력 핀이 있는 필터가 포함된 경우 필터 그래프 관리자가 다음으로 시도합니다. Render호출하기 전에 그래프에 해당 필터를 추가하여 특정 필터를 시도하도록 Render 메서드를 강제 적용할 수 있습니다.
Windows 7부터 DirectShow에는 특정 미디어 하위 유형에 대한 기본 설정 필터 목록이 있습니다. 렌더링되는 미디어 형식에 대한 기본 설정 필터가 있는 경우 필터 그래프 관리자는 다음으로 해당 필터를 시도합니다. 애플리케이션은 IAMPluginControl 인터페이스를 사용하여 기본 설정 필터 목록을 수정할 수 있습니다. 목록을 변경하면 애플리케이션의 현재 프로세스에 영향을 미치며 프로세스가 종료된 후에 삭제됩니다.
마지막으로, 적절한 필터가 없는 경우 필터 Graph 관리자는 IFilterMapper2::EnumMatchingFilters 메서드를 사용하여 레지스트리를 검색합니다. 레지스트리에 나열된 미디어 유형과 출력 핀의 기본 미디어 형식을 일치시키려고 합니다.
각 필터는 다른 필터에 비해 필터가 얼마나 바람직한지를 나타내는 숫자 값인 장점등록됩니다. EnumMatchingFilters 메서드는 MERIT_DO_NOT_USE + 1의 최소 장점과 함께 장점의 순서로 필터를 반환합니다. MERIT_DO_NOT_USE 이하의 장점이 있는 필터를 무시합니다. 필터는 GUID로 정의된 범주로 그룹화됩니다. 범주 자체는 장점이 있으며, EnumMatchingFilters 메서드는 해당 범주의 필터에 더 높은 장점 값이 있더라도 MERIT_DO_NOT_USE 이하의 장점이 있는 모든 범주를 무시합니다.
Windows 7부터 DirectShow에는 특정 미디어 하위 유형에 대한 차단된 필터 목록이 있습니다. 필터 그래프 관리자는 이 목록의 필터를 건너뜁니다. 애플리케이션은 IAMPluginControl 인터페이스를 사용하여 차단된 필터 목록을 수정할 수 있습니다. 이 목록을 변경하면 애플리케이션의 현재 프로세스에 영향을 미치며 프로세스가 종료된 후에 삭제됩니다.
요약하자면, Render 메서드는 다음 순서로 필터를 시도합니다.
- IStreamBuilder사용합니다.
- 캐시된 필터를 사용해 보세요.
- 그래프에서 필터를 사용해 보세요.
- Windows 7 이상: 미디어 유형에 대한 기본 필터(있는 경우)를 사용해 보세요.
- 레지스트리에서 필터를 조회합니다.
IGraphBuilder::RenderFile
IGraphBuilder::RenderFile 메서드는 파일 이름에서 기본 재생 그래프를 빌드합니다. 내부적으로 이 메서드는 AddSourceFilter 사용하여 올바른 원본 필터를 찾고, 렌더링나머지 그래프를 작성합니다.
IGraphBuilder::Connect
IGraphBuilder::Connect 메서드는 출력 핀을 입력 핀에 연결합니다. 이 메서드는 필요한 경우 Render 메서드에 대해 설명된 알고리즘의 변형을 사용하여 중간 필터를 추가합니다.
- 중간 필터 없이 필터 간에 직접 연결을 시도합니다.
- 캐시된 필터를 사용해 보세요.
- 그래프에서 필터를 사용해 보세요.
- Windows 7 이상: 미디어 유형에 대한 기본 필터(있는 경우)를 사용해 보세요.
- 레지스트리에서 필터를 조회합니다.
관련 항목
-
GraphEdit 사용하여 그래프 빌드 시뮬레이션
-
필터 그래프 빌드