檢視隱藏字幕
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine和媒體基金會中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 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 的篩選圖表。
啟用和停用標題
若要控制字幕顯示,請在 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);
}
如果您也擷取影片,這會建立具有兩個不同視訊串流的檔案。 它不會擷取標題覆蓋在圖片上方的視訊。
相關主題