共用方式為


檢視 World Standard Teletext

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

注意

此功能已從 Windows Vista 和更新版本的作業系統中移除。 它可用於 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 作業系統。

 

World Standard Teletext (WST) 是以類比電視訊號的垂直空白間隔 (VBI 編碼) 。 用於預覽 teletext 的篩選圖表類似于用來檢視隱藏式輔助字幕的圖形。 下圖說明此圖表。

wst 預覽圖表

此圖表會針對 WST 顯示使用下列篩選:

  • Tee/Sink-to-Sink Converter。 接受來自擷取篩選的 VBI 資訊,並將它分割成訊號上每個資料服務的不同資料流程。
  • WST 編解碼器。 從 VBI 範例解碼 Teletext 資料。
  • WST 解碼器。 轉譯 teletext 資料,並將文字繪製到點陣圖上。 在此案例中,下游篩選 (重迭器) 將點陣圖重迭到視訊上。

Capture Graph Builder 的 RenderStream 方法不支援直接 WST 篩選,因此您的應用程式必須執行一些額外的工作。

  1. 將重迭混音器篩選新增至篩選圖形。 下列程式碼會使用 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 ...
    }
    
  2. 透過重迭混音器將預覽釘選連接到影片轉譯器篩選。 您可以使用 RenderStream 方法,如下所示:

    hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
        pCap, pOvMix, 0);
    
  3. 將 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");
    }
    
  4. 將 WST 編解碼器篩選新增至篩選圖形:

    IBaseFilter* pWstCodec = NULL;
    hr = CreateKernelFilter(AM_KSCATEGORY_VBICODEC, 
        OLESTR("WST Codec"), &pWstCodec);
    if (SUCCEEDED(hr))
    {
        hr = pGraph->AddFilter(pWstCodec, L"WST Codec");
    }
    
  5. 呼叫 RenderStream 將擷取篩選器的 VBI 針腳連接到 Tee/Sink-to-Sink Converter,並將 Tee/Sink-to-Sink Converter 連接到 WST 編解碼器篩選器:

    hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 
        pKernelTee, pWstCodec);
    
  6. 再次呼叫 RenderStream ,將 WST 編解碼器篩選準則連接到重迭混音器。 WST 解碼器篩選會自動帶入圖形中。

    hr = pBuild->RenderStream(0, 0, pWstCodec, 0, pOvMix);
    
  7. 請記得釋放所有篩選介面。

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

隱藏式輔助字幕和 Teletext