Sampel Filter Pengurai PSI

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Deskripsi

Filter Pengurai PSI menerima Informasi Khusus Program (PSI) dari aliran transportasi MPEG-2 dan mengekstrak informasi program dari Tabel Asosiasi Program (PAT) dan Tabel Peta Program (PMT). Informasi ini memungkinkan aplikasi untuk mengonfigurasi MPEG-2 Demultiplexer. Filter mendukung antarmuka kustom, IMpeg2PsiParser, untuk mengambil informasi PSI.

Filter ini dirancang untuk perangkat MPEG-2, seperti camcorder IEEE 1394 MPEG-2 dan perangkat D-VHS. Lihat Driver MSTape untuk informasi selengkapnya. Sumber siaran televisi digital harus menggunakan filter TIF untuk mendapatkan informasi program.

Penggunaan

Anda dapat menguji filter Pengurai PSI di GraphEdit sebagai berikut:

  1. Luncurkan GraphEdit.

  2. Masukkan sumber transportasi MPEG-2. Camcorder MPEG-2 dan perangkat D-VHS muncul sebagai "Perangkat Subunit Pita Microsoft AV/C" dalam kategori Sumber Pengambilan Video.

  3. Sambungkan filter sumber ke filter Demultiplexer MPEG-2.

  4. Gunakan halaman properti pada demux untuk membuat pin output dengan jenis media "MPEG-2 PSI". Pin ini akan mengirimkan bagian PAT dan PMT.

  5. Gunakan halaman properti demux untuk memetakan PID 0x00 ke pin output. Atur jenis konten ke "Bagian MPEG2 PSI".

  6. Sambungkan pin output demux ke PSI Parser, seperti yang ditunjukkan pada diagram berikut.

    Grafik filter pengurai psi

  7. Jalankan grafik, untuk mengumpankan data PSI ke filter Pengurai PSI. Saat filter mendekode bagian PAT, filter secara otomatis memetakan PID PMT ke pin output yang sama pada demux, sehingga menerima bagian PMT.

  8. Gunakan halaman properti Pengurai PSI untuk memilih nomor program. Daftar aliran dasar di halaman properti akan menampilkan PID dan jenis aliran yang terkait dengan setiap aliran dasar dalam program yang dipilih. Halaman properti dirancang untuk mengenali jenis aliran yang ditentukan dalam ISO/IEC 13818-1.

  9. Masukkan nomor PID audio dalam kotak edit PID Audio , dan nomor PID video dalam kotak edit PID Video .

  10. Klik tombol Tampilkan Program . Parser PSI akan mengonfigurasi pin output pada demux agar sesuai dengan informasi aliran program dan merender pin.

Catatan

Halaman properti Parser PSI disediakan untuk mempermudah pengujian, dan untuk menyediakan kode sampel yang mengonfigurasi MPEG-2 Demultiplexer. Tidak disarankan untuk digunakan aplikasi. Aplikasi harus mengonfigurasi demux secara terprogram.

 

Untuk menggunakan filter Pengurai PSI dalam aplikasi, mulailah dengan membangun grafik filter dari sumber MPEG-2 ke demux MPEG-2. Kode untuk langkah ini tidak ditampilkan di sini, karena konfigurasi grafik yang tepat akan bergantung pada sumbernya.

Selanjutnya, buat pin output pada demux untuk data PSI. Petakan 0x00 PID, yang disediakan untuk bagian PAT, ke pin ini, seperti yang ditunjukkan dalam kode berikut:

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

Untuk informasi selengkapnya, lihat Menggunakan Demultiplexer MPEG-2.

Tambahkan filter Pengurai PSI ke grafik dan sambungkan ke pin output pada demux. Kueri Parser PSI untuk antarmuka IMpeg2PsiParser . Sekarang jalankan grafik dan tunggu peristiwa EC_PROGRAM_CHANGED, yang menandakan bagian PAT atau PMT baru. Kejadian ini adalah peristiwa kustom yang ditentukan oleh filter Pengurai PSI. Ketika Anda menerima peristiwa EC_PROGRAM_CHANGED, Anda bisa mendapatkan informasi PSI yang tersedia dengan memanggil metode IMpeg2PsiParser . Bagian ini menjelaskan metode yang paling sering Anda butuhkan.

Untuk mendapatkan jumlah program, gunakan metode IMpeg2PsiParser::GetCountOfPrograms :

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

Untuk mendapatkan nomor program untuk program tertentu, gunakan metode IMpeg2PsiParser::GetRecordProgramNumber :

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

Nomor program digunakan untuk mendapatkan entri PMT untuk masing-masing program. Untuk mendapatkan jumlah aliran dasar dalam program, gunakan metode GetCountOfElementaryStreams :

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

Untuk setiap aliran dasar, metode IMpeg2PsiParser::GetRecordElementaryPid mengembalikan PID, dan metode IMpeg2PsiParser::GetRecordStreamType mengembalikan jenis aliran:

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 dan jenis aliran memungkinkan Anda mengonfigurasi pin output baru pada Demultiplexer MPEG-2. Ini mungkin memerlukan beberapa pengetahuan tentang sumber aslinya. Misalnya, ISO/IEC 13818-1 mendefinisikan jenis aliran yang 0x80 melalui 0xFF sebagai "pribadi pengguna," tetapi standar lain yang didasarkan pada MPEG-2 dapat menetapkan arti lain untuk jenis ini.

Demultiplexer MPEG-2 dapat membuat pin baru dan pemetaan PID baru saat grafik sedang berjalan, tetapi Anda harus menghentikan grafik untuk menyambungkan pin.

Mengunduh Sampel

Untuk mengunduh sampel DirectShow SDK, instal versi terbaru Windows SDK.

Sampel ini diinstal di bawah jalur berikut: [SDK Root]\Samples\Multimedia\DirectShow\Filters\PSIParser.

Sampel DirectShow

Antarmuka IMpeg2PsiParser