다음을 통해 공유


Demux 출력 핀 구성

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

MPEG-2 demux가 데이터 패킷을 받으면 데이터를 구문 분석하고 전달해야 하는 출력 핀을 결정해야 합니다. 프로그램 스트림 모드에서 demux는 스트림 ID를 출력 핀에 매핑합니다. 전송 스트림 모드에서는 PID를 출력 핀에 매핑합니다. 예를 들어 전송 스트림 모드에서 PID 0x31 핀 0에 매핑된 경우 해당 PID 번호가 있는 모든 TS 패킷이 출력 핀 0으로 라우팅됩니다. demux가 스트림 ID 또는 PID가 출력 핀에 매핑되지 않은 패킷을 수신하는 경우 단순히 패킷을 삭제합니다.

끌어오기 모드에서 demux는 파일의 오디오 및 비디오 스트림에 대한 출력 핀을 자동으로 만들고 스트림 ID를 핀에 매핑합니다.

푸시 모드에서 출력 핀은 애플리케이션 또는 다른 필터에 의해 구성되어야 합니다. BDA(브로드캐스트 드라이버 아키텍처)를 사용하는 디지털 TV 원본의 경우 네트워크 공급자 필터는 TIF 필터와 함께 작동하여 demux를 구성합니다. 애플리케이션은 아무 것도 수행할 필요가 없습니다. 다른 시나리오에서는 애플리케이션이 출력 핀을 구성해야 합니다.

demux는 출력 핀 없이 시작됩니다. 출력 핀을 만들려면 필터에서 IMpeg2Demultiplexer::CreateOutputPin 메서드를 호출합니다. 이 메서드는 미디어 형식과 핀 이름을 사용하고 IPin 포인터를 반환합니다. 미디어 유형은 핀이 다른 필터(일반적으로 디코더)에 연결할 때 사용됩니다. 예를 들어 기본 스트림과 함께 Demux 사용 섹션이 제공됩니다. 핀 이름은 중복된 핀 이름이 허용되지 않는다는 점을 제외하고 원하는 모든 항목이 될 수 있습니다.

다음으로, 하나 이상의 스트림 ID 또는 PID를 새 출력 핀에 할당합니다. 프로그램 스트림의 경우 IMPEG2StreamIdMap 에 대한 핀을 쿼리하고 IMPEG2StreamIdMap::MapStreamId를 호출합니다. 전송 스트림의 경우 IMPEG2PIDMap 에 대한 핀을 쿼리하고 IMPEG2PIDMap::MapPID를 호출합니다.

demux에서 TS 패킷을 구문 분석할 수 있는 여러 가지 방법이 있습니다. 각 출력 핀에 대해 구문 분석 메서드는 MapPID 메서드에 대한 MediaSampleContent 매개 변수에 의해 결정됩니다.

Description
MEDIA_ELEMENTARY_STREAM 필터는 PES 페이로드를 제공합니다. 이 모드에서 필터는 PES 패킷을 디패키트하므로 다운스트림 필터는 PES 패킷 헤더 없이 ES 바이트 스트림을 받습니다. (오디오 및 비디오 스트림만 해당)
MEDIA_MPEG2_PSI 필터는 PAT 테이블, PMT 테이블, CAT 테이블 등과 같은 전체 PSI 섹션을 제공합니다.
MEDIA_TRANSPORT_PAYLOAD 필터는 TS 패킷에서 페이로드를 추출하고 추가 구문 분석 없이 전달합니다. 기본 스트림의 경우 demux에서 PES 패킷 헤더를 포함하여 전체 PES 패킷을 배달합니다.
MEDIA_TRANSPORT_PACKET 필터는 전체 TS 패킷을 제공합니다. demux는 해당 PID에 따라 TS 패킷을 라우팅하지만 그렇지 않으면 패킷을 검사하거나 처리하지 않습니다. 오류가 있는 패킷은 필터링되지 않습니다. demux는 패킷을 다시 멀티플렉싱하지 않으며 결과 출력 스트림은 규격 MPEG-2 전송 스트림이 아닙니다. 이 모드를 통과 모드라고 합니다.

 

프로그램 스트림의 경우 demux는 항상 PES 페이로드를 제공합니다.

MPEG-2 Demultiplexer 사용