Бегущая строка новостей поверх аналогового ТВ-потока — C#

Я хочу разместить новостную ленту над аналоговым ТВ-потоком с помощью С#, я могу транслировать аналоговое ТВ с помощью DirectShow, но я не могу понять, как смешивать его с вращающимся текстом, должен ли я создать фильтр? или я должен использовать другую технологию, чем DirectShow?


person Santiago    schedule 12.04.2011    source источник


Ответы (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, используемые для наложения текста, если вы программируете тщательно.

person persiflage    schedule 13.04.2011

На самом деле вам не нужно писать фильтр, чтобы нарисовать текст поверх вашего видео. Просто сделайте график, на котором несжатое видео проходит через граббер (один из стандартных фильтров DirectShow), настройте обратный вызов для граббера, и вы сможете изменять видеоданные в обратном вызове. Сделать это на C# очень легко с помощью DirectShow.NET, но это не оптимально из-за сортировки. Вы можете сначала построить такой график в GraphEditPlus, затем он покажет вам исходный код на C# или C++ как построить этот график и использовать захват образцов.

person Dee Mon    schedule 19.04.2011