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