檢視 World Standard Teletext
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
注意
此功能已從 Windows Vista 和更新版本的作業系統中移除。 它可用於 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 作業系統。
World Standard Teletext (WST) 是以類比電視訊號的垂直空白間隔 (VBI 編碼) 。 用於預覽 teletext 的篩選圖表類似于用來檢視隱藏式輔助字幕的圖形。 下圖說明此圖表。
此圖表會針對 WST 顯示使用下列篩選:
- Tee/Sink-to-Sink Converter。 接受來自擷取篩選的 VBI 資訊,並將它分割成訊號上每個資料服務的不同資料流程。
- WST 編解碼器。 從 VBI 範例解碼 Teletext 資料。
- WST 解碼器。 轉譯 teletext 資料,並將文字繪製到點陣圖上。 在此案例中,下游篩選 (重迭器) 將點陣圖重迭到視訊上。
Capture Graph Builder 的 RenderStream 方法不支援直接 WST 篩選,因此您的應用程式必須執行一些額外的工作。
將重迭混音器篩選新增至篩選圖形。 下列程式碼會使用 AddFilterByCLSID 函式,如 依 CLSID 新增篩選中所述。 (AddFilterByCLSID 不是 DirectShow API.)
IBaseFilter *pOvMix = NULL; // Pointer to the Overlay Mixer filter. hr = AddFilterByCLSID(pGraph, CLSID_OverlayMixer, L"OVMix", &pOvMix); if (FAILED(hr)) { // Handle the error ... }
透過重迭混音器將預覽釘選連接到影片轉譯器篩選。 您可以使用 RenderStream 方法,如下所示:
hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCap, pOvMix, 0);
將 Tee/Sink-to-Sink Converter 篩選器新增至篩選圖形。 下列程式碼會使用 CreateKernelFilter 函式,如 建立Kernel-Mode篩選中所述。 (CreateKernelFilter 不是 DirectShow API.)
IBaseFilter* pKernelTee = NULL; hr = CreateKernelFilter(AM_KSCATEGORY_SPLITTER, OLESTR("Tee/Sink-to-Sink Converter"), &pKernelTee); if (SUCCEEDED(hr)) { hr = pGraph->AddFilter(pKernelTee, L"Kernel Tee"); }
將 WST 編解碼器篩選新增至篩選圖形:
IBaseFilter* pWstCodec = NULL; hr = CreateKernelFilter(AM_KSCATEGORY_VBICODEC, OLESTR("WST Codec"), &pWstCodec); if (SUCCEEDED(hr)) { hr = pGraph->AddFilter(pWstCodec, L"WST Codec"); }
呼叫 RenderStream 將擷取篩選器的 VBI 針腳連接到 Tee/Sink-to-Sink Converter,並將 Tee/Sink-to-Sink Converter 連接到 WST 編解碼器篩選器:
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, pKernelTee, pWstCodec);
再次呼叫 RenderStream ,將 WST 編解碼器篩選準則連接到重迭混音器。 WST 解碼器篩選會自動帶入圖形中。
hr = pBuild->RenderStream(0, 0, pWstCodec, 0, pOvMix);
請記得釋放所有篩選介面。
pOvMix->Release(); pKernelTee->Release(); pWstCodec->Release();
注意
目前,WST 解碼器篩選不支援連線到影片混合轉譯器 (VMR) 篩選。 因此,您必須使用舊版影片轉譯器篩選來檢視電圖。
如果擷取篩選器有視訊埠 VBI 針腳 (PIN_CATEGPORY_VIDEOPORT_VBI) ,請將它連線到 VBI Surface 配置器 篩選器。 否則圖表將無法正確執行。 下列程式碼範例使用 AddFilterByCLSID 函式,如 新增依 CLSID 篩選和 FindPinByCategory 函式中所述,如 使用 Pin 類別中所述。 (兩個函式都不是 DirectShow API.)
// Look for a video port VBI pin on the capture filter.
IPin *pVPVBI = NULL;
hr = FindPinByCategory(pCap, PINDIR_OUTPUT,
PIN_CATEGORY_VIDEOPORT_VBI, &pVPVBI);
if (FAILED(hr))
{
// No video port VBI pin; nothing else to do. OK to run the graph.
}
else
{
// Found one. Connect it to the VBI Surface Allocator.
IBaseFilter *pSurf = NULL;
hr = AddFilterByCLSID(pGraph, CLSID_VBISurfaces, L"VBI Surf", &pSurf);
if (SUCCEEDED(hr))
{
hr = pBuild->RenderStream(NULL, NULL, pVPVBI, 0, pSurf);
pSurf->Release();
}
if (FAILED(hr))
{
// Handle the error (not shown). It is probably not safe to
// run the graph at this point.
}
pVPVBI->Release();
}
相關主題