Verwenden des Demux-Streams
Um PSI-Informationen aus einem MPEG-2-Transportstream mithilfe des MPEG-2-Demux-Filters zu erhalten, erstellen Sie einen Ausgabepin auf der Demux mit dem folgenden Medientyp:
- Haupttyp: KSDATAFORMAT _ TYPE _ MPEG2 _ SECTIONS
- Untertyp: MEDIASUBTYPE _ None
- Formattyp: GUID _ NULL
Rufen Sie dann die IMPEG2PIDMap::MapPID-Methode des Ausgabepins mit der gewünschten PID und dem Flag MEDIA _ MPEG2 _ PSI auf.
// 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();
}
Jeder vollständige PSI-Abschnitt wird in einem Medienbeispiel bereitgestellt. Rufen Sie IMediaSample2::GetProperties im Medienbeispiel auf, um die einem Tabellenabschnitt zugeordnete PID-Nummer abzurufen. Die PID wird in den unteren 13 Bits des dwTypeSpecificFlags-Flags in der AM _ SAMPLE2 _ PROPERTIES-Struktur angegeben. Dies ist hilfreich, wenn Sie mehrere PSI-PIDs dem gleichen Ausgabepin zuordnen.