共用方式為


檢視隱藏字幕

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

為了支援模擬電視中的隱藏字幕,擷取過濾器會顯示一個輸出針腳,提供 VBI 或隱藏字幕數據。 下列是可能的別針類別之一:

  • VBI 引腳(PIN_CATEGORY_VBI)。 傳送 VBI 波形樣本串流。 這些會傳送到解碼器過濾器,以提取電視字幕數據。
  • CC 針腳(PIN_CATEGORY_CC)。 傳遞從第 21 行數據擷取的隱藏字幕位元組組。
  • 硬體分割 CC 引腳(PINNAME_VIDEO_CC_CAPTURE)。

若要預覽隱藏式輔助字幕,請呼叫 ICaptureGraphBuilder2::RenderStream,使用 VBI pin 類別,如果失敗,請使用 CC 類別再次呼叫它。

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}

下圖顯示顯示隱藏式輔助字幕的典型篩選圖表。

隱藏式輔助字幕預覽圖

此圖表會針對隱藏式標題顯示使用下列篩選:

  • 三通/水槽對水槽轉換器。 接收來自擷取篩選器的 VBI 資訊,並將訊號上的數據服務分為各自的數據流。 Microsoft提供隱藏字幕、NABTS 和世界標準 Teletext (WST) 的 VBI 編解碼器。
  • CC 譯碼器。 從擷取篩選器提供的取樣 VBI 超聲波譯碼 CC 數據。
  • 行 21 譯碼器。 翻譯 CC 位元組組,並將標題文字繪製到位圖上。 下游篩選器(在此案例中為覆疊混合器)會將點陣圖覆疊在影片上。

擷取圖形產生器的 RenderStream 方法會自動新增這些篩選。 如果擷取篩選器具有 CC 針腳,而不是 VBI 針腳,則 CC 針腳會直接連線到第 21 行譯碼器篩選器。

注意

如果您使用視訊混合轉譯器(VMR)濾鏡進行渲染,請使用 21 行解碼器濾鏡 2。 此篩選器的功能與 Line 21 解碼器相同,但其 CLSID 為 CLSID_Line21Decoder2。

 

注意

已移除 Windows Vista 中的 CC 譯碼器篩選器。 新的應用程式應該使用 VBICodec 篩選器,其記載於 Microsoft TV Technologies 檔中。

 

如果擷取裝置使用視訊埠,擷取篩選器可能會有視訊埠 VBI 引腳(PIN_CATEGORY_VIDEOPORT_VBI)。 此針腳必須連接到 VBI Surface 分配器 篩選器,該篩選器會分配表面以保存擷取的 VBI 數據。 如果需要,RenderStream 方法會新增此篩選。 下方圖示顯示具有 VBI Surface Allocator 的篩選圖表。

隱藏式輔助字幕預覽圖表,使用 vbi surface 配置器

啟用和停用標題

若要控制字幕顯示,請在 Line 21 解碼器篩選器上使用 IAMLine21Decoder 介面。 例如,您可以使用 IAMLine21Decoder::SetServiceState 方法來關閉標題顯示,如下所示:

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

此範例會使用 ICaptureGraphBuilder2::FindInterface 方法來尋找 IAMLine21Decoder 介面。 FindInterface 的第一個參數是 &LOOK_DOWNSTREAM_ONLY,它會指定要從擷取篩選條件下游搜尋 (pCap)。

擷取隱藏式標題位圖

您可以將標題位陣圖擷取到檔案中。 若要這樣做,請新增篩選圖形的檔案寫入區段,如 將影片擷取至檔案中所述。 然後將 CC 或 VBI 接腳連接至多工器濾波器:

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, pMux);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, pMux);
}

如果您也擷取影片,這會建立具有兩個不同視訊串流的檔案。 它不會擷取標題覆蓋在圖片上方的視訊。

隱藏字幕和 Teletext