Предварительный просмотр видео в C # - PullRequest
1 голос
/ 05 февраля 2010

У меня есть приложение для захвата веб-камеры, и я пытаюсь реализовать предварительный просмотр видео в своем интерфейсе WPF. Захват происходит в C ++ DLL. У меня есть текущее решение, но я не слишком доволен им. Основная цель заключается в том, чтобы предварительный просмотр видео в пользовательском интерфейсе не сильно мешал DLL C ++, поскольку он должен сжимать видеокадры и записывать их на диск. Я не смогу отобразить каждый кадр, потому что сжатие довольно сильно загружает процессор.

Мое текущее решение для предварительного просмотра видео:

  • В моем окне используется элемент управления Image, и его атрибут Source привязывается к данным BitmapSource с именем VideoPreviewSource

  • Я настроил System.Threading.TimerCallback для обновления моего предварительного просмотра. Функция обратного вызова таймера отправляет потоку, который может обновить пользовательский интерфейс (используя this.Dispatcher.BeginInvoke), который вызывает UpdatePreview ()

  • UpdatePreview () запрашивает у C ++ DLL видеокадр. Вызов DLL помещает необработанные данные изображения в byte [] _rawImageData, который я выделяю один раз в конструкторе моего окна.

  • UpdatePreview () затем устанавливает VideoPreviewSource в: BitmapSource.Create (ширина, высота, 96, 96, pf, ноль, _rawImageData, ширина * 4); Наконец вызывается OnPropertyChanged ("VideoPreviewSource").

Кажется, что если я сделаю таймер более частым, сборщик мусора будет вызываться реже, и это будет выглядеть как утечка памяти.

Есть ли лучший подход к просмотру видео?

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Я попробовал SDK под названием Ozeki SIP SDK, и следующие сведения http://www.voip -sip-sdk.com / p_93-введение-в-ozeki-voip-sip-sdk-voip.html предоставляют информацию о как сделать видео звонок.

Надеюсь, я смогу вам помочь.

Привет

0 голосов
/ 07 февраля 2010

Этот InteropBitmapRenderer Я написал, может помочь вам. Хотя у меня это жестко запрограммировано для RGBA (32 бита). Не уверен, как он работает с RGB24, так как я думаю, что в WPF pre-3.51 были проблемы с 24 битами.

Если ваша веб-камера поддерживает DirectShow, вы можете использовать мой WPF MediaKit и использовать VideCaptureElement для отображения веб-камеры.

...