Intelligent Connect

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

Intelligent Connect는 필터 그래프 관리자가 필터 그래프를 빌드하는 데 사용하는 메커니즘입니다. 필터를 선택하고 필터 그래프에 추가하는 여러 관련 알고리즘으로 구성됩니다.

특정 필터 그래프를 빌드하는 데 문제가 있고 문제를 해결하려는 경우 또는 고유한 필터를 작성하고 자동 그래프 빌드에 사용할 수 있도록 하려는 경우 이 항목을 읽어 보세요.

Intelligent Connect에는 다음 IGraphBuilder 메서드가 포함됩니다.

IGraphBuilder::AddSourceFilter

IGraphBuilder::AddSourceFilter 메서드는 지정된 파일을 렌더링할 수 있는 원본 필터를 추가합니다. 먼저 레지스트리를 살펴보고 프로토콜(예: https://), 파일 이름 확장명 또는 특정 패턴과 일치하는 파일의 특정 오프셋에 있는 바이트인 미리 결정된 검사 바이트 집합과 일치합니다. 자세한 내용은 사용자 지정 파일 형식 등록을 참조하세요. 메서드가 적절한 소스 필터를 찾은 다음 해당 필터의 instance 만들고 그래프에 추가한 다음 파일 이름으로 필터의 IFileSourceFilter::Load 메서드를 호출합니다.

IGraphBuilder::Render

IGraphBuilder::Render 메서드는 그래프의 하위 섹션을 빌드합니다. 연결되지 않은 출력 핀에서 시작하여 다운스트림으로 작동하여 필요에 따라 새 필터를 추가합니다. 시작 필터는 이미 그래프에 있어야 합니다. 각 단계에서 Render 메서드는 이전 필터에 연결할 수 있는 필터를 검색합니다. 연결 필터에 여러 출력 핀이 있는 경우 스트림이 분기할 수 있습니다. 모든 스트림에 렌더러가 있으면 검색이 중지됩니다. Render 메서드가 중단되면 다른 필터 집합을 사용하여 백업하고 다시 시도할 수 있습니다.

각 출력 핀을 연결하기 위해 Render 메서드는 다음을 수행합니다.

  1. 핀이 IStreamBuilder 인터페이스를 지원하는 경우 Filter Graph Manager는 전체 프로세스를 핀의 IStreamBuilder::Render 메서드에 위임합니다. 이 인터페이스를 노출하면 핀은 렌더러까지 그래프의 나머지 부분을 빌드해야 합니다. 그러나 이 인터페이스를 지원하는 핀은 거의 없습니다.

  2. 필터 그래프 관리자는 메모리에 캐시된 필터(있는 경우)를 사용하려고 합니다. Intelligent Connect 프로세스 전체에서 Filter Graph Manager는 프로세스의 이전 단계에서 필터를 캐시할 수 있습니다. (또한 동적 그래프 빌드를 참조하세요.)

  3. 필터 그래프에 연결되지 않은 입력 핀이 있는 필터가 포함된 경우 Filter Graph Manager가 다음으로 시도합니다. Render를 호출하기 전에 그래프에 해당 필터를 추가하여 Render 메서드에서 특정 필터를 강제로 시도할 수 있습니다.

  4. Windows 7부터 DirectShow에는 특정 미디어 하위 유형에 대한 기본 필터 목록이 있습니다. 렌더링되는 미디어 형식에 대한 기본 필터가 있는 경우 필터 그래프 관리자는 다음으로 해당 필터를 시도합니다. 애플리케이션은 IAMPluginControl 인터페이스를 사용하여 기본 필터 목록을 수정할 수 있습니다. 목록을 변경하면 애플리케이션의 현재 프로세스에 영향을 미치며 프로세스가 종료된 후에 삭제됩니다.

  5. 마지막으로, 적절한 필터가 없는 경우 Filter Graph Manager는 IFilterMapper2::EnumMatchingFilters 메서드를 사용하여 레지스트리를 검색합니다. 레지스트리에 나열된 미디어 유형과 출력 핀의 기본 미디어 유형을 일치시키려고 시도합니다.

    각 필터는 다른 필터를 기준으로 필터가 얼마나 바람직한지를 나타내는 숫자 값인 장점을 사용하여 등록됩니다. EnumMatchingFilters 메서드는 최소 장점이 MERIT_DO_NOT_USE + 1인 필터를 반환합니다. MERIT_DO_NOT_USE 이하의 장점이 있는 필터를 무시합니다. 필터는 GUID로 정의된 범주로 그룹화됩니다. 범주 자체는 장점이 있으며 EnumMatchingFilters 메서드는 해당 범주의 필터에 더 높은 장점 값이 있더라도 MERIT_DO_NOT_USE 이하의 장점이 있는 모든 범주를 무시합니다.

    Windows 7부터 DirectShow에는 특정 미디어 하위 유형에 대한 차단된 필터 목록이 있습니다. Filter Graph Manager는 이 목록의 필터를 건너뜁니다. 애플리케이션은 IAMPluginControl 인터페이스를 사용하여 차단된 필터 목록을 수정할 수 있습니다. 이 목록의 변경 내용은 애플리케이션의 현재 프로세스에 영향을 하며 프로세스가 종료된 후 삭제됩니다.

요약하자면 Render 메서드는 다음 순서로 필터를 시도합니다.

  1. IStreamBuilder를 사용합니다.
  2. 캐시된 필터를 사용해 보세요.
  3. 그래프에서 필터를 사용해 보세요.
  4. Windows 7 이상: 미디어 유형에 대한 기본 필터(있는 경우)를 사용해 보세요.
  5. 레지스트리에서 필터를 조회합니다.

IGraphBuilder::RenderFile

IGraphBuilder::RenderFile 메서드는 파일 이름에서 기본 재생 그래프를 빌드합니다. 내부적으로 이 메서드는 AddSourceFilter 를 사용하여 올바른 원본 필터를 찾고 렌더링 을 사용하여 나머지 그래프를 빌드합니다.

IGraphBuilder::Connect

IGraphBuilder::Connect 메서드는 출력 핀을 입력 핀에 연결합니다. 이 메서드는 필요한 경우 Render 메서드에 대해 설명된 알고리즘의 변형을 사용하여 중간 필터를 추가합니다.

  1. 중간 필터 없이 필터 간에 직접 연결을 시도합니다.
  2. 캐시된 필터를 사용해 보세요.
  3. 그래프에서 필터를 사용해 보세요.
  4. Windows 7 이상: 미디어 유형에 대한 기본 필터(있는 경우)를 사용해 보세요.
  5. 레지스트리에서 필터를 조회합니다.

필터 범주

장점

GraphEdit를 사용하여 그래프 빌드 시뮬레이션

필터 그래프 빌드