Share via


Uso del Demux con flussi PSI

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Per ottenere informazioni PSI da un flusso di trasporto MPEG-2 usando il filtro MPEG-2 demux, creare un pin di output sulla demux con il tipo di supporto seguente:

  • Tipo principale: KSDATAFORMAT_TYPE_MPEG2_SECTIONS
  • Sottotipo: MEDIASUBTYPE_None
  • Tipo di formato: GUID_NULL

Chiamare quindi il metodo IMPEG2PIDMap::MapPID con il piD desiderato e il flag 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();
}

Ogni sezione PSI completa viene recapitata in un esempio multimediale. Per recuperare il numero PID associato a una sezione di tabella, chiamare IMediaSample2::GetProperties nell'esempio multimediale. Il PID viene fornito nei 13 bit bassi del flag dwTypeSpecificFlags nella struttura AM_SAMPLE2_PROPERTIES . Questo è utile se si esegue il mapping di più ID PSI allo stesso pin di output.

Uso di MPEG-2 Demultiplexer