Tabs
New member
Содержание статьи
Начинаем реализацию: первые досадные огорченияВзвод, готовность №1Готовность № 3Готовность №4Конец фильмаWWW
Некоторые люди опасаются, что встроенная в их ноутбуки вебкамера может за
ними подглядывать. Они опасаются этого настолько серьезно, что порой даже
заклеивают изолентой ее недремлющее око. Делают они это не зря. Мы расскажем,
как можно программно овладеть встроенной в ноутбук веб-камерой и использовать ее
функционал как в мирных, так и не очень целях.
Начинаем реализацию: первые досадные огорчения
Я был очень удивлен и расстроен, когда узнал, что в великом и могучем .NET
Framework напрочь отсутствует возможность простого взаимодействия с веб-камерами.
В четвертой версии ситуация улучшилась (для SilverLight-проектов точно появились
соответствующие классы), но протестировать я их не успел, поскольку пример для
данной статьи я начал писать еще до официального выхода VS2010 и 4-го .NET’a.
Практически отчаявшись, я плотно засел в гугле. Результаты поиска по рунету
меня не вдохновили – все, что я нашел – это ссылки на MSDN и технологию
DirectDraw. Я даже попробовал набросать простенький примерчик, но из-за
отсутствия опыта работы с DirectDraw меня постиг облом. У меня получилось
собрать совсем простенькое приложение, но я так и не смог выловить в нем все
глюки.
Еще больше отчаявшись, я принялся шерстить ресурсы наших западных товарищей.
Проштудировав несколько десятков ссылок, я смог нарыть много вкусностей. Среди
них были всевозможные примеры и небольшие статейки (американцы не любят много
писать). Мне даже удалось найти рабочий пример на основе DirectDraw, но, когда я
увидел код – ужаснулся. Разобраться в нем было тяжело. Поэтому я решил с ним не
заморачиваться, а попытаться найти способ попроще. Не успел я распрощаться с
примером на DirectDraw, как на глаза мне попался еще один. Автор примера закодил
целую библиотеку для работы с веб-камерами и другими устройствами видеозахвата,
используя технологию VFW (Video For Windows).
Жаль, что проект автора (я про библиотеку) был максимально кастрирован. Все,
что позволяла сделать библиотека – вывести изображение с веб-камеры. Ни захвата
отдельных кадров, ни записи видео и других полезных нам фич не было.
И тем не менее, мое подсознание решительно сказало мне, что этот проект и
есть то, что я искал. Не успел я беглым взглядом пробежаться по его коду, как
увидел имена знакомых win-сообщений и не менее знакомых названий WinAPI функций.
Когда-то давным-давно мне приходилось писать приложение для работы с веб-камерой
на Delphi. Тогда я и столкнулся с этими функциями впервые.
Посмотрев сорцы, я решил написать свою версию библиотеки и снабдить ее нужным
функционалом.
Взвод, готовность №1
Вполне возможно, что в одном компе/ноуте может быть несколько веб-камер. За
примером далеко ходить не надо. Мне по работе часто приходится организовывать
простенькие видеоконференции. Обычно в них участвуют два человека. Каждого из
участников снимает отдельная камера. Сами камеры подключены к моему компу. Когда
я начинаю съемку, то выбираю в программе для работы с видеокамерами нужную в
настоящий момент камеру. Раз уж мы решили взять камеру под контроль, то обязаны
разобраться, как получать список установленных устройств видеозахвата и выбрать
то, с которым будем работать в настоящий момент.
Для решения этой нехитрой задачи в WindowsAPI предусмотрена функция
capGetDriverDescription(). Она принимает пять параметров:
Начинаем реализацию: первые досадные огорченияВзвод, готовность №1Готовность № 3Готовность №4Конец фильмаWWW
Некоторые люди опасаются, что встроенная в их ноутбуки вебкамера может за
ними подглядывать. Они опасаются этого настолько серьезно, что порой даже
заклеивают изолентой ее недремлющее око. Делают они это не зря. Мы расскажем,
как можно программно овладеть встроенной в ноутбук веб-камерой и использовать ее
функционал как в мирных, так и не очень целях.
Начинаем реализацию: первые досадные огорчения
Я был очень удивлен и расстроен, когда узнал, что в великом и могучем .NET
Framework напрочь отсутствует возможность простого взаимодействия с веб-камерами.
В четвертой версии ситуация улучшилась (для SilverLight-проектов точно появились
соответствующие классы), но протестировать я их не успел, поскольку пример для
данной статьи я начал писать еще до официального выхода VS2010 и 4-го .NET’a.
Практически отчаявшись, я плотно засел в гугле. Результаты поиска по рунету
меня не вдохновили – все, что я нашел – это ссылки на MSDN и технологию
DirectDraw. Я даже попробовал набросать простенький примерчик, но из-за
отсутствия опыта работы с DirectDraw меня постиг облом. У меня получилось
собрать совсем простенькое приложение, но я так и не смог выловить в нем все
глюки.
Еще больше отчаявшись, я принялся шерстить ресурсы наших западных товарищей.
Проштудировав несколько десятков ссылок, я смог нарыть много вкусностей. Среди
них были всевозможные примеры и небольшие статейки (американцы не любят много
писать). Мне даже удалось найти рабочий пример на основе DirectDraw, но, когда я
увидел код – ужаснулся. Разобраться в нем было тяжело. Поэтому я решил с ним не
заморачиваться, а попытаться найти способ попроще. Не успел я распрощаться с
примером на DirectDraw, как на глаза мне попался еще один. Автор примера закодил
целую библиотеку для работы с веб-камерами и другими устройствами видеозахвата,
используя технологию VFW (Video For Windows).
Жаль, что проект автора (я про библиотеку) был максимально кастрирован. Все,
что позволяла сделать библиотека – вывести изображение с веб-камеры. Ни захвата
отдельных кадров, ни записи видео и других полезных нам фич не было.
И тем не менее, мое подсознание решительно сказало мне, что этот проект и
есть то, что я искал. Не успел я беглым взглядом пробежаться по его коду, как
увидел имена знакомых win-сообщений и не менее знакомых названий WinAPI функций.
Когда-то давным-давно мне приходилось писать приложение для работы с веб-камерой
на Delphi. Тогда я и столкнулся с этими функциями впервые.
Посмотрев сорцы, я решил написать свою версию библиотеки и снабдить ее нужным
функционалом.
Взвод, готовность №1
Вполне возможно, что в одном компе/ноуте может быть несколько веб-камер. За
примером далеко ходить не надо. Мне по работе часто приходится организовывать
простенькие видеоконференции. Обычно в них участвуют два человека. Каждого из
участников снимает отдельная камера. Сами камеры подключены к моему компу. Когда
я начинаю съемку, то выбираю в программе для работы с видеокамерами нужную в
настоящий момент камеру. Раз уж мы решили взять камеру под контроль, то обязаны
разобраться, как получать список установленных устройств видеозахвата и выбрать
то, с которым будем работать в настоящий момент.
Для решения этой нехитрой задачи в WindowsAPI предусмотрена функция
capGetDriverDescription(). Она принимает пять параметров:
- wDriverIndex – индекс драйвера видеозахвата. Значение индекса может
- варьироваться от 0 до 9;
- lpszName – указатель на буфер, содержащий соответствующее имя драйвера;
- cbName – размер (в байтах) буфера lpszName;
- lpszVer – указатель на буфер, содержащий описание определенного
- драйвера;
- cbVer – размер буфера (в байтах), в котором хранится описание драйвера.