Я хочу разместить новостную ленту над аналоговым ТВ-потоком с помощью С#, я могу транслировать аналоговое ТВ с помощью DirectShow, но я не могу понять, как смешивать его с вращающимся текстом, должен ли я создать фильтр? или я должен использовать другую технологию, чем DirectShow?
Бегущая строка новостей поверх аналогового ТВ-потока — C#
Ответы (2)
DirectShow — это самый простой способ сделать это, но он требует некоторой кривой обучения, особенно при работе с C#. Страница Википедии дает вам базовый обзор DirectShow.
Инструменты DirectShow доступны в последней версии Windows SDK. Использование C++ для программирования DirectShow более прямолинейно, но вы можете довольно легко использовать DirectShow через COM-взаимодействие или DirectShow.net (что я еще не пробовал). При использовании COM-взаимодействия будет полезна следующая статья:
http://blogs.msdn.com/b/ericgu/archive/2004/09/20/232027.aspx
Вы можете использовать оверлейный фильтр VMR, если производительность анимации достаточно плавная. Смотрите следующие статьи
http://www.codeproject.com/KB/audio-video/VideoPicture.aspx
http://www.codeproject.com/KB/audio-video/Ticker.aspx
http://msdn.microsoft.com/en-us/library/dd407344(v=vs.85).aspx
В качестве альтернативы вам нужно будет написать свой собственный фильтр, который отображает текст в каждом кадре, настраивая его положение синхронно с метками времени видеокадров. Если вам нужно сделать это только внутри вашего собственного приложения, то следующий подход может быть самым простым.
http://www.sichbo.ca/Free_Code/100_C_Sharp_directshow_filters
Microsoft официально рекомендует создавать фильтры DirectShow на C++ из соображений производительности, но наложение прокручиваемого текста должно быть в порядке в C#, поскольку узким местом будут API, используемые для наложения текста, если вы программируете тщательно.
На самом деле вам не нужно писать фильтр, чтобы нарисовать текст поверх вашего видео. Просто сделайте график, на котором несжатое видео проходит через граббер (один из стандартных фильтров DirectShow), настройте обратный вызов для граббера, и вы сможете изменять видеоданные в обратном вызове. Сделать это на C# очень легко с помощью DirectShow.NET, но это не оптимально из-за сортировки. Вы можете сначала построить такой график в GraphEditPlus, затем он покажет вам исходный код на C# или C++ как построить этот график и использовать захват образцов.