Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, по возможности, использовать новый код MediaPlayer, IMFMediaEngine и аудио/видеозахват в 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 для скрытых субтитров, NABTS и Всемирного стандарта телетекста (WST).
- декодер CC. Декодирует данные CC из отсэмплированных форм волн VBI, предоставляемых фильтром захвата.
- В декодере строка 21. Преобразует пары байтов CC и рисует текст подписи на растровые изображения. Нижний фильтр (в данном случае миксер наложений) накладывает изображения на видео.
Метод RenderStream сборщика графов записи автоматически добавляет эти фильтры. Если в фильтре захвата имеется контакт CC вместо контакта VBI, контакт CC подключается непосредственно к фильтру декодера Line 21.
Заметка
Если вы используете фильтр видеомикшера (VMR) для отрисовки, используйте фильтр декодировщика строки 21. Этот фильтр имеет те же функциональные возможности, что и декодер Строки 21, но его CLSID — CLSID_Line21Decoder2.
Заметка
Фильтр декодера CC был удален в Windows Vista. Новые приложения должны использовать фильтр VBICodec, который описан в документации по технологиям Microsoft TV.
Если устройство записи использует видеопорт, фильтр записи может иметь вывод VBI видеопорта (PIN_CATEGORY_VIDEOPORT_VBI). Этот пин должен быть подключен к фильтру VBI Surface Allocator, который выделяет поверхности для хранения захваченных данных 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);
}
Если вы также записываете видео, это создаст файл с двумя отдельными видеопотоками. Он не будет записывать видео с подписями, наложенными на вершину рисунка.
Связанные разделы