Просмотр закрытых подписей

[Функция, связанная с этой страницей, DirectShow — это устаревшая функция. Он был заменен MediaPlayer, МВФMediaEngine и аудио/видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, МВФMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Для поддержки закрытых подпись в аналоговом телевидении фильтр записи предоставляет пин-код, который предоставляет VBI или закрытые данные подпись. Пин-код будет иметь одну из следующих категорий закреплений:

  • Закрепление VBI (PIN_CATEGORY_VBI). Предоставляет поток примеров волн VBI. Они передаются в фильтр декодировщика, который извлекает закрытые подпись данные.
  • Закрепление CC (PIN_CATEGORY_CC). Предоставляет пары байтов с закрытыми подпись, извлеченные из данных line-21.
  • Аппаратный срез CC (PINNAME_VIDEO_CC_CAPTURE).

Чтобы просмотреть закрытые подпись, вызовите ICaptureGraphBuilder2::RenderStream с категорией пин-кода VBI, а если это не удается, вызовите его снова с категорией 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. Принимает сведения VBI из фильтра записи и разбивает его на отдельные потоки для каждого из служб данных, присутствующих в сигнале. Корпорация Майкрософт предоставляет кодеки VBI для закрытого заголовка, NA BizTalk Server и world Standard Teletext (WST).
  • Декодатор CC. Декодирует данные CC из примерных форм волн VBI, предоставляемых фильтром записи.
  • Декодирования строки 21. Преобразует пары байтов CC и рисует текст подпись на растровые изображения. Нижестоящий фильтр (в данном случае Наложенный миксер) накладывает растровые изображения на видео.

Метод RenderStream в Graph Builder записи автоматически добавляет эти фильтры. Если фильтр записи имеет закрепление CC вместо пин-кода VBI, он подключается непосредственно к фильтру декодера Line 21.

Примечание.

Если для отрисовки используется фильтр рендерировщика видео смешения видео (VMR), используйте фильтр декодировщика строки 21. Этот фильтр имеет те же функции, что и декодер Строки 21, но CLSID CLSID_Line21Decoder2.

 

Примечание.

Фильтр декодера CC был удален в Windows Vista. Новые приложения должны использовать фильтр VBICodec, который описан в документации по технологиям Microsoft TV.

 

Если устройство записи использует видеопорт, фильтр записи может иметь закрепление VBI-порта видео (PIN_CATEGORY_VIDEOPORT_VBI). Этот пин-код должен быть подключен к фильтру Surface Allocator VBI, который выделяет поверхности для хранения захваченных данных VBI. Метод RenderStream добавляет этот фильтр, если это необходимо. На следующей схеме показан граф фильтров с помощью VBI Surface Allocator.

closed captioning preview graph with vbi surface allocator

Включение и отключение подписей

Чтобы управлять отображением подпись, используйте интерфейс IAMLine21Decoder в фильтре декодера Line 21. Например, можно отключить отображение подпись с помощью метода 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);
}

Если вы также записываете видео, это создаст файл с двумя отдельными видеопотоками. Он не будет записывать видео с подпись наложенными на вершину рисунка.

Закрытые субтитры и телетекст