Sdílet prostřednictvím


Ukázka filtru analyzátoru PSI

[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, IMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]

Popis

Filtr analyzátoru PSI přijímá informace specifické pro program (PSI) z přenosového datového proudu MPEG-2 a extrahuje informace o programu z tabulky přidružení programu (PAT) a mapových tabulek programu (PMT). Tyto informace umožňují aplikaci konfigurovat MPEG-2 Demultiplexer. Filtr podporuje vlastní rozhraní, IMpeg2PsiParser, pro získání informací PSI.

Tento filtr je určený pro zařízení MPEG-2, jako jsou například videokamery MPEG-1394 MPEG-2 a zařízení D-VHS. Další informace najdete v tématu ovladače MSTape. Zdroje digitálního televizního vysílání by měly k získání informací o programu použít filtr TIF.

Použití

Filtr analyzátoru PSI můžete testovat v GraphEdit následujícím způsobem:

  1. Spusťte GraphEdit.

  2. Vložte zdroj přenosu MPEG-2. Zařízení MPEG-2 videokamery a D-VHS se v kategorii Zdroje záznamu videa zobrazují jako „Microsoft AV/C Tape Subunit Device“.

  3. Připojte zdrojový filtr k filtru MPEG-2 Demultiplexer.

  4. Pomocí stránky vlastností na demuxu vytvořte výstupní pin s typem média MPEG-2 PSI. Tento špendlík doručí oddíly PAT a PMT.

  5. Pomocí stránky vlastností demux namapujte PID 0x00 na výstupní špendlík. Nastavte typ obsahu na "MPEG2 PSI Sections".

  6. Připojte výstupní kolík demuxu k analyzátoru PSI, jak je znázorněno v následujícím diagramu.

    filtrační graf PSI parseru

  7. Spusťte graf, aby se data PSI odeslala do filtru analyzátoru PSI. Vzhledem k tomu, že filtr dekóduje sekce PAT, automaticky mapuje PID PMT na stejný výstupní pin na demuxu, aby přijímal sekce PMT.

  8. Pomocí stránky vlastností analyzátoru PSI vyberte číslo programu. Seznam základních datových proudů na stránce vlastností zobrazí typ PID a datového proudu přidruženého ke každému elementárnímu streamu ve vybraném programu. Stránka vlastností je navržená tak, aby rozpoznala typy datových proudů definovaných ve standardu ISO/IEC 13818-1.

  9. Do textového pole Audio PID zadejte číslo PID zvuku a číslo PID videa do textového pole Video PID.

  10. Klikněte na tlačítko Zobrazit program. Analyzátor PSI nakonfiguruje výstupní piny na demuxu tak, aby odpovídaly informacím o proudu programu, a vykreslí piny.

Poznámka

Stránka s vlastnostmi PSI Parser je poskytována, aby usnadnila testování a poskytovala vzorový kód, který konfiguruje MPEG-2 Demultiplexer. Nedoporučuje se, aby aplikace byly používány. Aplikace by měly konfigurovat demux programově.

 

Pokud chcete použít filtr analyzátoru PSI v aplikaci, začněte vytvořením grafu filtru ze zdroje MPEG-2 do demuxu MPEG-2. Kód pro tento krok se zde nezobrazuje, protože přesná konfigurace grafu bude záviset na zdroji.

Dále vytvořte výstupní pin na demuxu pro data PSI. Namapovat PID 0x00, který je vyhrazený pro oddíly PAT, na tento pin, jak je uvedeno v následujícím kódu:

// 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);
}

Pro více informací viz Použití MPEG-2 demultiplexeru.

Přidejte do grafu filtr analyzátoru PSI a připojte ho k výstupnímu kolíku na demuxu. Zadejte dotaz na analyzátor PSI pro rozhraní IMpeg2PsiParser. Teď spusťte graf a počkejte na události EC_PROGRAM_CHANGED, které signalizují novou část PAT nebo PMT. Tato událost je vlastní událost definovaná filtrem analyzátoru PSI. Když obdržíte událost EC_PROGRAM_CHANGED, můžete získat dostupné informace PSI voláním metod IMpeg2PsiParser. Tato část popisuje metody, které budete potřebovat nejčastěji.

Chcete-li získat počet programů, použijte IMpeg2PsiParser::GetCountOfPrograms metoda:

int NumProgs = 0;
hr = pPsi->GetCountOfPrograms(&NumProgs);

Chcete-li získat číslo programu pro určitý program, použijte IMpeg2PsiParser::GetRecordProgramNumber metoda:

WORD ProgNum = 0;
for (int i = 0; i < NumProgs; i++)
{
    hr = pPsi->GetRecordProgramNumber(i, &ProgNum);
    ...
}

Číslo programu slouží k získání položek PMT pro jednotlivé programy. Pokud chcete získat počet základních datových proudů v programu, použijte metodu GetCountOfElementaryStream s:

WORD cElemStreams = 0;
hr = pPsi->GetCountOfElementaryStreams(ProgNum, &cElemStreams);

Pro každý základní datový proud IMpeg2PsiParser::GetRecordElementaryPid metoda vrátí PID a IMpeg2PsiParser::GetRecordStreamType metoda vrátí typ streamu:

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);
}

PID a typ datového proudu vám umožňují konfigurovat nové výstupní piny na MPEG-2 demultiplexeru. To může vyžadovat určité znalosti původního zdroje. Například ISO/IEC 13818-1 definuje typy datových proudů 0x80 prostřednictvím 0xFF jako "soukromé uživatele", ale jiné standardy založené na MPEG-2 mohou těmto typům přiřadit další významy.

Demultiplexer MPEG-2 může během běhu grafu vytvářet nové špendlíky a nové mapování PID, ale pokud chcete připojit špendlíky, musíte graf zastavit.

Stažení ukázky

Pokud chcete stáhnout ukázky sady DirectShow SDK, nainstalujte nejnovější verzi sady Windows SDK.

Tato ukázka je nainstalována v následující cestě: [SDK Root]\Samples\Multimedia\DirectShow\Filters\PSIParser.

Ukázky systému DirectShow

IMpeg2PsiParser – rozhraní