Просмотр закрытых подписей
[Функция, связанная с этой страницей, 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);
}
На следующей схеме показан типичный график фильтров для отображения закрытых подпись.
На этом графе используются следующие фильтры для отображения закрытых подпись:
- Преобразователь 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.
Включение и отключение подписей
Чтобы управлять отображением подпись, используйте интерфейс 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);
}
Если вы также записываете видео, это создаст файл с двумя отдельными видеопотоками. Он не будет записывать видео с подпись наложенными на вершину рисунка.
См. также