Compartilhar via


Usando o Demux com fluxos psi

[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.]

Para obter informações de PSI de um fluxo de transporte MPEG-2 usando o filtro mpeg-2 demux, crie um pino de saída no demux com o seguinte tipo de mídia:

  • Tipo principal: KSDATAFORMAT_TYPE_MPEG2_SECTIONS
  • Subtipo: MEDIASUBTYPE_None
  • Tipo de formato: GUID_NULL

Em seguida, chame o método IMPEG2PIDMap::MapPID do pino de saída com o PID desejado e o sinalizador MEDIA_MPEG2_PSI.

// Query the demux filter for IMpeg2Demultiplexer.
IMpeg2Demultiplexer *pDemux = NULL;
hr = pFilter->QueryInterface(IID_IMpeg2Demultiplexer, (void**)&pDemux);
if (SUCCEEDED(hr))
{
    // Define the media type.
    AM_MEDIA_TYPE mt;
    ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
    mt.majortype = KSDATAFORMAT_TYPE_MPEG2_SECTIONS;
    mt.subtype = MEDIASUBTYPE_None;

    // Create a new output pin.
    IPin *pPin;
    hr = pDemux->CreateOutputPin(&mt, L"PSI Pin", &pPin);
    if (SUCCEEDED(hr))
    {
        // Map the PID.
        IMPEG2PIDMap *pPidMap = NULL;
        hr = pPin->QueryInterface(IID_IMPEG2PIDMap, (void**)&pPidMap);
        if (SUCCEEDED(hr))
        {
            ULONG Pid[] = { 0x00 }; // Map any desired PIDs. 
            ULONG cPid = 1;
            hr = pPidMap->MapPID(cPid, Pid, MEDIA_MPEG2_PSI);
            pPidMap->Release();
        }
        pPin->Release();
    }
    pDemux->Release();
}

Cada seção psi completa é entregue em um exemplo de mídia. Para recuperar o número pid associado a uma seção de tabela, chame IMediaSample2::GetProperties no exemplo de mídia. O PID é dado nos 13 bits baixos do sinalizador dwTypeSpecificFlags na estrutura AM_SAMPLE2_PROPERTIES . Isso será útil se você mapear vários PIDs psi para o mesmo pino de saída.

Usando o MpEG-2 Demultiplexer