Menampilkan Keterangan Tertutup
[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan 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 Pengambilan Audio/Video 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.]
Untuk mendukung keterangan tertutup di televisi analog, filter pengambilan mengekspos pin yang mengirimkan VBI atau data keterangan tertutup. Pin akan memiliki salah satu kategori pin berikut:
- Pin VBI (PIN_CATEGORY_VBI). Memberikan aliran sampel bentuk gelombang VBI. Ini diteruskan ke filter dekoder yang mengekstrak data keterangan tertutup.
- Pin Kategori CC (PIN_CATEGORY_CC). Memberikan pasangan byte teks tertutup, yang diekstrak dari data baris-21.
- Pin CC irisan perangkat keras (PINNAME_VIDEO_CC_CAPTURE).
Untuk mempratinjau keterangan tertutup, panggil ICaptureGraphBuilder2::RenderStream dengan kategori pin VBI, dan jika gagal, panggil lagi dengan kategori CC.
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}
Diagram berikut menunjukkan grafik filter umum untuk menampilkan keterangan tertutup.
Grafik ini menggunakan filter berikut untuk tampilan keterangan tertutup:
- Konverter Tee/Sink-to-Sink. Menerima informasi VBI dari filter pengambilan dan membaginya menjadi aliran terpisah untuk setiap layanan data yang ada pada sinyal. Microsoft menyediakan codec VBI untuk Teks Tertutup, NABTS, dan Teleteks Standar Dunia (WST).
- CC Decoder. Dekode data CC dari sampel bentuk gelombang VBI yang disediakan oleh filter tangkapan.
- Baris 21 Decoder. Menerjemahkan pasangan byte CC dan menggambar teks keterangan ke bitmap. Filter hilir (dalam hal ini Overlay Mixer) melapisi bitmap ke video.
Metode RenderStreamdari Capture Graph Buildermenambahkan filter ini secara otomatis. Jika filter penangkap memiliki pin CC daripada pin VBI, pin CC terhubung langsung ke filter Dekoder Baris 21.
Nota
Jika Anda menggunakan filter Video Mixing Renderer (VMR) untuk penyajian, gunakan Filter Dekoder Baris 21 2. Filter ini memiliki fungsionalitas yang sama dengan Line 21 Decoder, namun CLSID-nya adalah CLSID_Line21Decoder2.
Nota
Filter CC Decoder telah dihapus pada Windows Vista. Aplikasi baru harus menggunakan filter VBICodec, yang didokumenkan dalam dokumentasi Microsoft TV Technologies.
Jika perangkat pengambilan menggunakan port video, filter pengambilan mungkin memiliki pin VBI port video (PIN_CATEGORY_VIDEOPORT_VBI). Pin ini harus terhubung ke filter VBI Surface Allocator, untuk mengalokasikan permukaan penyimpanan data VBI yang diambil. MetodeRenderStream menambahkan filter ini jika diperlukan. Diagram berikut menunjukkan grafik filter dengan Alokator Permukaan VBI.
Mengaktifkan dan Menonaktifkan Keterangan
Untuk mengontrol tampilan keterangan, gunakan antarmuka IAMLine21Decoder pada filter Dekoder Baris 21. Misalnya, Anda dapat menonaktifkan tampilan keterangan menggunakan metode IAMLine21Decoder::SetServiceState, sebagai berikut:
// Use the FindInterface method to find the interface.
IAMLine21Decoder *pLine21 = NULL;
hr = pBuild->FindInterface(
&LOOK_DOWNSTREAM_ONLY, // Look downstream from pCap
NULL, // No particular media type
pCap, // Pointer to the capture filter.
IID_IAMLine21Decoder, (void**)&pLine21);
if (SUCCEEDED(hr))
{
pLine21->SetServiceState(AM_L21_CCSTATE_Off);
// (Use AM_L21_CCSTATE_On to enable.)
pLine21->Release();
}
Contoh ini menggunakan metodeICaptureGraphBuilder2::FindInterface untuk menemukan antarmuka IAMLine21Decoder. Parameter pertama ke FindInterface adalah &LOOK_DOWNSTREAM_ONLY, yang menetapkan untuk mencari ke hilir dari filter tangkapan (pCap).
Menangkap Bitmap Teks Tertutup
Anda dapat menyimpan bitmap teks ke dalam file. Untuk melakukannya, tambahkan bagian penulisan file dari grafik filter, seperti yang dijelaskan dalam Mengambil Video ke File. Kemudian render pin CC atau VBI ke filter mux:
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, pMux);
if (FAILED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, pMux);
}
Jika Anda juga menangkap video, ini akan membuat file dengan dua streaming video terpisah. Ini tidak akan merekam video dengan teks yang dilapisi di atas gambar.
Topik terkait
-
Teks Tertutup dan Teleteks