Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize 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.]
Descrição
O filtro PSI Parser recebe informações específicas do programa (PSI) de um fluxo de transporte MPEG-2 e extrai informações do programa da tabela de associação de programas (PAT) e tabelas de mapa de programas (PMT). Esta informação permite que uma aplicação configure o MPEG-2 Demultiplexer. O filtro suporta uma interface personalizada, IMpeg2PsiParser, para recuperar as informações PSI.
Este filtro foi concebido para dispositivos MPEG-2, tais como câmaras de vídeo IEEE 1394 MPEG-2 e dispositivos D-VHS. Consulte o Driver MSTape para obter mais informações. As fontes de transmissão de televisão digital devem usar um filtro TIF para obter informações sobre o programa.
Utilização
Você pode testar o filtro do analisador PSI no GraphEdit da seguinte maneira:
Inicie o GraphEdit.
Insira uma fonte de transporte MPEG-2. As câmaras de vídeo MPEG-2 e os dispositivos D-VHS aparecem como "Microsoft AV/C Tape Subunit Device" na categoria Fontes de captura de vídeo.
Conecte o filtro de origem ao filtro MPEG-2 Demultiplexer.
Use a página de propriedades no demux para criar um pino de saída com um tipo de mídia "MPEG-2 PSI". Este pino fornecerá as secções PAT e PMT.
Utilize a página de propriedades do demux para mapear o PID 0x00 para o pino de saída. Defina o tipo de conteúdo como "MPEG2 PSI Sections".
Conecte o pino de saída demux ao PSI Parser, conforme mostrado no diagrama a seguir.
Execute o gráfico para alimentar o filtro PSI Parser com dados PSI. À medida que o filtro decodifica as secções PAT, mapeia automaticamente os PIDs PMT para o mesmo pino de saída no demux, garantindo assim que receba as secções PMT.
Use a página de propriedades do PSI Parser para selecionar um número de programa. A lista de fluxos elementares na página de propriedades mostrará o PID e o tipo de fluxo associados a cada fluxo elementar no programa selecionado. A página de propriedades foi projetada para reconhecer os tipos de fluxo definidos na ISO/IEC 13818-1.
Digite o número PID de áudio na caixa de edição PID de áudio e o número PID de vídeo na caixa de edição PID de vídeo.
Clique no botão Exibir Programa. O analisador PSI configurará os pinos de saída no demux para corresponder às informações de fluxo do programa e renderizar os pinos.
Observação
A página de propriedades do PSI Parser é fornecida para facilitar o teste e fornecer código de exemplo que configura o MPEG-2 Demultiplexer. Não é recomendado para aplicações de uso. Os aplicativos devem configurar o demux programaticamente.
Para usar o filtro PSI Parser em um aplicativo, comece criando o gráfico de filtro da fonte MPEG-2 para o MPEG-2 demux. O código para esta etapa não é mostrado aqui, porque a configuração exata do gráfico dependerá da fonte.
Em seguida, crie um pino de saída no demux para os dados PSI. Mapeie o PID 0x00, que é reservado para as seções PAT, neste pino, conforme mostrado no código a seguir.
// Set the media type to MPEG-2 table sections.
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = KSDATAFORMAT_TYPE_MPEG2_SECTIONS;
// Create the pin.
IPin *pPsiPin;
hr = pDemux->CreateOutputPin(&mt, L"PSI", &pPsiPin);
if (SUCCEEDED(hr))
{
// Map to PID 0.
ULONG Pid = 0x00;
hr = pPid->MapPID(1, &Pid, MEDIA_MPEG2_PSI);
}
Para obter mais informações, consulte Usando o MPEG-2 Demultiplexer.
Adicione o filtro PSI Parser ao gráfico e conecte-o ao pino de saída no demux. Consulte o Analisador PSI para a interface IMpeg2PsiParser. Agora, execute o gráfico e aguarde os eventos EC_PROGRAM_CHANGED, que sinalizam uma nova seção PAT ou PMT. Este evento é um evento personalizado definido pelo filtro PSI Parser. Ao receber um evento EC_PROGRAM_CHANGED, pode obter as informações de PSI disponíveis chamando os métodos de IMpeg2PsiParser. Esta seção descreve os métodos que você precisará com mais frequência.
Para obter o número de programas, use o IMpeg2PsiParser::GetCountOfPrograms método:
int NumProgs = 0;
hr = pPsi->GetCountOfPrograms(&NumProgs);
Para obter o número do programa para um programa específico, use o IMpeg2PsiParser::GetRecordProgramNumber método:
WORD ProgNum = 0;
for (int i = 0; i < NumProgs; i++)
{
hr = pPsi->GetRecordProgramNumber(i, &ProgNum);
...
}
O número do programa é usado para obter as entradas PMT para programas individuais. Para obter o número de fluxos elementares em um programa, use o GetCountOfElementaryStreams método:
WORD cElemStreams = 0;
hr = pPsi->GetCountOfElementaryStreams(ProgNum, &cElemStreams);
Para cada fluxo elementar, o método IMpeg2PsiParser::GetRecordElementaryPid retorna o PID e o método IMpeg2PsiParser::GetRecordStreamType retorna o tipo de fluxo:
BYTE ESType = 0;
WORD ESPid = 0;
for (WORD j = 0; j < cElemStreams; j++)
{
hr = pPsi->GetRecordElementaryPid(ProgNum, j, &ESPid);
hr = pPsi->GetRecordStreamType(ProgNum, j, &ESType);
}
O PID e o tipo de fluxo permitem configurar novos pinos de saída no MPEG-2 Demultiplexer. Isto pode exigir algum conhecimento da fonte original. Por exemplo, a ISO/IEC 13818-1 define tipos de fluxo 0x80 através de 0xFF como "privados do usuário", mas outros padrões baseados em MPEG-2 podem atribuir outros significados a esses tipos.
O MPEG-2 Demultiplexer pode criar novos pinos e novos mapeamentos PID enquanto o gráfico está em execução, mas você deve parar o gráfico para conectar pinos.
Download do exemplo
Para baixar os exemplos do SDK do DirectShow, instale a versão mais recente do SDK do Windows.
Este exemplo é instalado no seguinte caminho: [SDK Root]\Samples\Multimedia\DirectShow\Filters\PSIParser.
Tópicos relacionados