Compartilhar via


Configurando os pinos de saída do Demux

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Quando o mpeg-2 demux recebe um pacote de dados, ele deve determinar qual pino de saída deve analisar e entregar os dados. No modo de fluxo do programa, o demux mapeia IDs de fluxo para pinos de saída. No modo de fluxo de transporte, ele mapeia PIDs para pinos de saída. Por exemplo, no modo de fluxo de transporte, se o PID 0x31 for mapeado para fixar 0, cada pacote TS com esse número PID será roteado para o pino de saída 0. Se o demux receber um pacote cuja ID de fluxo ou PID não seja mapeado para nenhum pino de saída, ele simplesmente descartará o pacote.

No modo de pull, o demux cria automaticamente pinos de saída para os fluxos de áudio e vídeo no arquivo e mapeia as IDs de fluxo para os pinos.

No modo push, os pinos de saída devem ser configurados pelo aplicativo ou por outro filtro. Para fontes de televisão digitais que usam a BDA (Arquitetura do Driver de Transmissão), o filtro do provedor de rede funciona com o filtro TIF para configurar o demux. O aplicativo não precisa fazer nada. Em outros cenários, o aplicativo deve configurar os pinos de saída.

O demux começa sem pinos de saída. Para criar um pin de saída, chame o método IMpeg2Demultiplexer::CreateOutputPin no filtro. Esse método usa um tipo de mídia e um nome de pino e retorna um ponteiro IPin . O tipo de mídia é usado quando o pino se conecta a outro filtro, normalmente um decodificador— um exemplo recebe a seção Usando o Demux com Fluxos Elementares. O nome do pino pode ser o que você quiser, exceto que nomes de pin duplicados não são permitidos.

Em seguida, atribua uma ou mais IDs de fluxo ou PIDs ao novo pin de saída. Para fluxos de programas, consulte o pino para IMPEG2StreamIdMap e chame IMPEG2StreamIdMap::MapStreamId. Para fluxos de transporte, consulte o pino para IMPEG2PIDMap e chame IMPEG2PIDMap::MapPID.

Há várias maneiras pelas quais o demux pode analisar pacotes TS. Para cada pino de saída, o método de análise é determinado pelo parâmetro MediaSampleContent para o método MapPID .

Valor Descrição
MEDIA_ELEMENTARY_STREAM O filtro fornece cargas PES. Nesse modo, o filtro descompacta os pacotes PES, de modo que o filtro downstream recebe o fluxo de bytes do ES, sem os cabeçalhos de pacote PES. (Somente fluxos de áudio e vídeo.)
MEDIA_MPEG2_PSI O filtro fornece seções de PSI completas, como tabelas PAT, tabelas PMT, tabelas CAT e assim por diante.
MEDIA_TRANSPORT_PAYLOAD O filtro extrai as cargas dos pacotes TS e os entrega sem análise adicional. Para fluxos elementares, isso significa que o demux fornecerá pacotes PES inteiros, incluindo os cabeçalhos de pacote PES.
MEDIA_TRANSPORT_PACKET O filtro fornece pacotes TS inteiros. O demux roteia os pacotes TS de acordo com seus PIDs, mas não examina nem processa os pacotes. Pacotes com erros não são filtrados. O demux não multiplexa novamente os pacotes e o fluxo de saída resultante não é um fluxo de transporte MPEG-2 em conformidade. Esse modo é chamado de modo de passagem .

 

Para fluxos de programas, o demux sempre fornece cargas PES.

Usando o MpEG-2 Demultiplexer