Compartir a través de


Uso de Demux con secuencias de PSI

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Para obtener información de PSI de una secuencia de transporte MPEG-2 mediante el filtro de demux MPEG-2, cree un pin de salida en la demux con el siguiente tipo de medio:

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

A continuación, llame al método IMPEG2PIDMap::MapPID del pin de salida con el PID deseado y la marca 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 sección completa de PSI se entrega en una muestra multimedia. Para recuperar el número de PID asociado a una sección de tabla, llame a IMediaSample2::GetProperties en el ejemplo multimedia. El PID se da en los 13 bits bajos de la marca dwTypeSpecificFlags en la estructura AM_SAMPLE2_PROPERTIES . Esto resulta útil si asigna varios PID de PSI al mismo pin de salida.

Uso del Demultiplexer MPEG-2