Share via


토폴로지 정보

토폴로지는 파이프라인에서 데이터가 흐르는 방식을 나타내는 개체입니다. 애플리케이션은 각 스트림이 미디어 원본에서 미디어 싱크로 가는 경로를 설명하는 토폴로지를 만듭니다. 애플리케이션은 토폴로지를 미디어 세션에 전달하고 미디어 세션은 토폴로지를 사용하여 데이터 흐름을 제어합니다.

파이프라인의 데이터 처리 구성 요소(미디어 원본, 변환 및 미디어 싱크)는 토폴로지에서 노드로 표시됩니다. 한 구성 요소에서 다른 구성 요소로의 데이터 흐름은 노드 간의 연결로 표시됩니다. 다음 노드 유형이 정의됩니다.

  • 원본 노드: 미디어 원본의 미디어 스트림을 나타냅니다.
  • 변환 노드: MFT(Media Foundation 변환)를 나타냅니다.
  • 출력 노드: 미디어 싱크의 스트림 싱크를 나타냅니다.
  • Tee 노드: 스트림의 포크를 나타냅니다. Tee 노드는 노드가 파이프라인 개체를 나타내는 규칙의 예외입니다. 다른 노드 형식과 달리 tee 노드는 단순히 데이터 흐름을 지시합니다.

작동 중인 토폴로지에는 하나 이상의 변환 노드를 통해 출력 노드에 연결된 원본 노드가 하나 이상 포함되어야 합니다. 예를 들어 다음 다이어그램은 하나의 스트림이 있는 간단한 토폴로지를 보여줍니다.

하나의 스트림이 있는 토폴로지를 보여 주는 다이어그램

파일 재생의 경우 변환 노드는 디코더를 나타내고 출력 노드는 오디오 또는 비디오 렌더러를 나타냅니다. 파일 인코딩의 경우 변환 노드는 인코더를 나타내고 출력 노드는 ASF 파일 싱크와 같은 보관 싱크를 나타냅니다.

두 노드가 연결된 경우 데이터를 생성하는 노드를 업스트림 노드라고 하고 데이터를 수신하는 노드를 다운스트림 노드라고 합니다. 예를 들어 이전 다이어그램에서 원본 노드는 변환 노드에서 업스트림.

연결된 노드 쌍에서 업스트림 노드의 연결점을 출력이라고 합니다. 다운스트림 노드의 연결점을 입력이라고 합니다. 다음 다이어그램에서는 연결점이 있는 노드 쌍과 노드 간 데이터 흐름을 보여 줍니다. 연결점은 토폴로지에서 별도의 개체로 표시되지 않습니다. 노드 개체의 인덱스 값으로 지정됩니다.

연결된 두 노드를 보여 주는 다이어그램

원본 노드에는 입력이 있을 수 없습니다. 따라서 원본 노드에서 업스트림 노드는 있을 수 없습니다. 마찬가지로 출력 노드에는 출력이 있을 수 없으며 출력 노드의 노드 다운스트림이 있을 수 없습니다. 원본 노드에서 출력 노드로의 노드 체인을 토폴로지의 분기 라고 합니다. 이 항목의 첫 번째 다이어그램은 단일 분기가 있는 토폴로지를 보여 줍니다. 일반적으로 스트림당 하나의 분기가 있습니다. 예를 들어 하나의 오디오 스트림과 하나의 비디오 스트림으로 파일을 재생하려면 분기가 두 개 있는 토폴로지가 필요합니다.

부분 토폴로지

전체 또는 전체 토폴로지는 필요한 모든 파이프라인 개체에 대한 노드를 포함합니다. 그러나 애플리케이션이 항상 전체 토폴로지를 만들 필요는 없습니다. 대신 하나 이상의 변환 노드를 생략하는 부분 토폴로지를 만듭니다.

미디어 세션은 토폴로지 로더라는 개체를 사용하여 토폴로지를 완료합니다. 토폴로지 로더는 필요한 변환을 삽입하여 부분 토폴로지를 전체 토폴로지로 변환합니다. 변환 프로세스를 토폴로지 확인 이라고 합니다.

예를 들어 인코딩된 오디오 스트림을 재생하려면 토폴로지에서 원본 노드와 출력 노드 사이에 디코더가 있어야 합니다. 애플리케이션은 디코더 없이 원본 노드를 출력 노드에 직접 연결하는 부분 토폴로지를 만듭니다. 토폴로지 로더는 스트림 형식을 검사하고, 올바른 디코더를 찾은 다음, 변환 노드를 토폴로지에 삽입합니다.

다음 다이어그램은 애플리케이션에서 만든 부분 토폴로지를 보여줍니다.

원본 노드 및 출력 노드가 있는 일부를 보여 주는 다이어그램

다음 다이어그램은 토폴로지 로더가 해결한 후의 전체 토폴로지를 보여 줍니다. 이 예제에서는 토폴로지 로더가 디코더에 대한 변환 노드를 삽입했습니다.

전체 토폴로지를 보여 주는 다이어그램

현재 버전의 Media Foundation에서 토폴로지 로더는 재생을 위한 토폴로지를 지원합니다. 파일 인코딩 및 기타 시나리오의 경우 애플리케이션은 전체 토폴로지를 구성해야 합니다.

애플리케이션은 토폴로지 로더를 만들고 직접 사용할 수도 있습니다. 예를 들어 토폴로지 로더를 사용하여 부분 토폴로지를 resolve 다음, 미디어 세션에 제공하기 전에 전체 토폴로지를 수정할 수 있습니다. 토폴로지 로더를 만들려면 MFCreateTopoLoader를 호출합니다.

토폴로지