檢視隱藏式輔助字幕

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

為了支持模擬電視中的封閉式 標題,擷取篩選器會公開提供 VBI 或關閉 標題 數據的針腳。 針腳會有下列其中一個針腳類別:

  • VBI 針腳(PIN_CATEGORY_VBI)。 提供 VBI 微生物樣本串流。 這些會傳遞至譯碼器篩選,以擷取關閉 標題 數據。
  • CC 針腳(PIN_CATEGORY_CC)。 傳遞從第 21 行數據擷取的封閉式 標題 位元組組。
  • 硬體切割 CC 針腳 (PINNAME_VIDEO_CC_CAPTURE)。

若要預覽關閉 標題,請使用 VBI 釘選類別呼叫 ICaptureGraphBuilder2::RenderStream,如果失敗,請使用 CC 類別再次呼叫它。

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

下圖顯示顯示封閉式 標題 的典型篩選圖表。

closed captioning preview graph

此圖表會使用下列篩選條件來顯示關閉 標題:

  • Tee/Sink-to-Sink Converter。 接受擷取篩選的 VBI資訊,並將它分割成訊號上每個數據服務的不同數據流。 Microsoft 提供隱藏式標題、NABTS 和世界標準 Teletext (WST) 的 VBI 編解碼器。
  • CC 譯碼器。 從擷取篩選器提供的取樣 VBI 超聲波譯碼 CC 數據。
  • 第 21 行譯碼器。 翻譯 CC 位元組組,並將 標題 文字繪製到位圖上。 下游篩選條件(在此案例中為重迭混音器)會將點陣圖重迭到視訊上。

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

注意

如果您使用視訊混合轉譯器 (VMR) 篩選進行轉譯,請使用第 21 行譯碼器篩選 2。 此篩選器的功能與第 21 行譯碼器相同,但 CLSID CLSID_Line21Decoder2。

 

注意

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

 

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

closed captioning preview graph with vbi surface allocator

啟用和停用標題

若要控制 標題 顯示,請使用第 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