다음을 통해 공유


Demux 출력 핀 구성

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

MPEG-2 demux가 데이터 패킷을 수신하는 경우 데이터를 구문 분석하고 제공해야 하는 출력 핀을 결정해야 합니다. 프로그램 스트림 모드에서 demux는 스트림 ID를 출력 핀에 매핑합니다. 전송 스트림 모드에서는 PIN을 출력 핀에 매핑합니다. 예를 들어 전송 스트림 모드에서 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 매개 변수에 의해 결정됩니다.

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

 

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

MPEG-2 디멀티플렉서를 사용하기