Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[De functie die is gekoppeld aan deze pagina, DirectShow, is een verouderde functie. Het is vervangen door MediaPlayer, IMFMediaEngineen Audio/Video Capture in Media Foundation. Deze functies zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken MediaPlayer, IMFMediaEngine en Audio/Video Capture in Media Foundation in plaats van DirectShow, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
Beschrijving
Het PSI Parser-filter ontvangt Program Specific Information (PSI) van een MPEG-2-transportstroom en extraheert programmagegevens uit de Program Association Table (PAT) en Program Map Tables (PMT). Met deze informatie kan een toepassing de MPEG-2 Demultiplexer configureren. Het filter ondersteunt een aangepaste interface, IMpeg2PsiParser, voor het ophalen van de PSI-informatie.
Dit filter is ontworpen voor MPEG-2-apparaten, zoals IEEE 1394 MPEG-2-recorders en D-VHS-apparaten. Zie MSTape Driver voor meer informatie. Bronnen voor digitale televisiezenders moeten een TIF-filter gebruiken om programmagegevens op te halen.
Gebruik
U kunt het PSI Parser-filter als volgt testen in GraphEdit:
Start GraphEdit.
Plaats een MPEG-2-transportbron. MPEG-2-recorders en D-VHS-apparaten worden weergegeven als 'Microsoft AV/C Tape Subunit Device' in de categorie Video Capture Sources.
Sluit het bronfilter aan op het MPEG-2 Demultiplexer-filter.
Gebruik de eigenschappenpagina op de demux om een uitvoerpin te maken met het mediatype MPEG-2 PSI. Deze pin zal de PAT- en PMT-secties verzorgen.
Gebruik de demux-eigenschapspagina om PID 0x00 toe te wijzen aan de uitvoerpin. Stel het inhoudstype in op MPEG2 PSI-secties.
Koppel de demux-uitvoerpin aan PSI Parser, zoals wordt weergegeven in het volgende diagram.
Voer de grafiek uit om PSI-gegevens in te voeren in het PSI Parser-filter. Als het filter de PAT-secties ontsleutelt, worden de PMT-PID's automatisch toegewezen aan dezelfde uitvoerpin op de demux, zodat deze de PMT-secties ontvangt.
Gebruik de eigenschapspagina PSI Parser om een programmanummer te selecteren. De basisstroomlijst op de eigenschappenpagina toont de PID en het stroomtype dat is gekoppeld aan elke elementaire stroom in het geselecteerde programma. De eigenschappenpagina is ontworpen om stroomtypen te herkennen die zijn gedefinieerd in ISO/IEC 13818-1.
Voer het audio-PID-nummer in het invoervak audio-PID en het piD-nummer van de video in het video-PID invoervak.
Klik op de knop Programma weergeven. De PSI Parser configureert de uitvoerpinnen op de demux zodat deze overeenkomen met de informatie van de programmastream en de pinnen weergeven.
Notitie
De eigenschapspagina van de PSI Parser wordt geleverd om het testen eenvoudiger te maken en om voorbeeldcode te bieden waarmee de MPEG-2 Demultiplexer wordt geconfigureerd. Het wordt niet aanbevolen om in toepassingen te gebruiken. Toepassingen moeten de demux programmatisch configureren.
Als u het PSI Parser-filter in een toepassing wilt gebruiken, begint u met het bouwen van de filtergrafiek van de MPEG-2-bron naar de MPEG-2-demux. Code voor deze stap wordt hier niet weergegeven, omdat de exacte grafiekconfiguratie afhankelijk is van de bron.
Maak vervolgens een uitvoerpin op de demux voor de PSI-gegevens. Koppel PID 0x00, gereserveerd voor PAT-secties, aan deze pin, zoals in de volgende code staat:
// 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);
}
Zie Mpeg-2 Demultiplexer gebruikenvoor meer informatie.
Voeg het PSI Parser-filter toe aan de grafiek en verbind het met de uitvoerpin op de demux. Voer een query uit op de PSI-parser voor de interface IMpeg2PsiParser. Voer nu de grafiek uit en wacht op EC_PROGRAM_CHANGED gebeurtenissen, die een nieuwe PAT- of PMT-sectie aangeven. Deze gebeurtenis is een aangepaste gebeurtenis die is gedefinieerd door het PSI Parser-filter. Wanneer u een EC_PROGRAM_CHANGED gebeurtenis ontvangt, kunt u de beschikbare PSI-informatie ophalen door IMpeg2PsiParser- methoden aan te roepen. In deze sectie worden de methoden beschreven die u het vaakst nodig hebt.
Gebruik de methode IMpeg2PsiParser::GetCountOfPrograms om het aantal programma's op te halen:
int NumProgs = 0;
hr = pPsi->GetCountOfPrograms(&NumProgs);
Als u het programmanummer voor een specifiek programma wilt ophalen, gebruikt u de methode IMpeg2PsiParser::GetRecordProgramNumber methode:
WORD ProgNum = 0;
for (int i = 0; i < NumProgs; i++)
{
hr = pPsi->GetRecordProgramNumber(i, &ProgNum);
...
}
Het programmanummer wordt gebruikt om de PMT-vermeldingen voor afzonderlijke programma's te verkrijgen. Als u het aantal elementaire streams in een programma wilt ophalen, gebruikt u de methode GetCountOfElementaryStreams:
WORD cElemStreams = 0;
hr = pPsi->GetCountOfElementaryStreams(ProgNum, &cElemStreams);
Voor elke elementaire stroom retourneert de methode IMpeg2PsiParser::GetRecordElementaryPid de PID en retourneert de methode IMpeg2PsiParser::GetRecordStreamType het stroomtype:
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);
}
Met de PID en het stroomtype kunt u nieuwe uitvoerpinnen configureren op de MPEG-2 Demultiplexer. Hiervoor is mogelijk enige kennis van de oorspronkelijke bron vereist. ISO/IEC 13818-1 definieert bijvoorbeeld stroomtypen 0x80 via 0xFF als 'gebruiker privé', maar andere standaarden die zijn gebaseerd op MPEG-2 kunnen andere betekenissen toewijzen aan deze typen.
De MPEG-2 Demultiplexer kan nieuwe pinnen en nieuwe PID-toewijzingen maken terwijl de grafiek wordt uitgevoerd, maar u moet de grafiek stoppen om pinnen te verbinden.
Het voorbeeld downloaden
Als u de DirectShow SDK-voorbeelden wilt downloaden, installeert u de nieuwste versie van de Windows SDK.
Dit voorbeeld wordt geïnstalleerd onder het volgende pad: [SDK Root]\Samples\Multimedia\DirectShow\Filters\PSIParser.
Verwante onderwerpen