История изменений
Исправление
Eddy_Em,
(текущая версия)
:
Нужны нам всего-то библиотеки v4l2 и OSS. При помощи v4l2 делаем захват видео (вот так я работал с веб-камерой, а так — с обычной видеокамерой). OSS используем для захвата звука (там вообще все элементарно). Алгоритмов определять движение на видео — пруд пруди, пользуемся одним из них (например, изучаем автокорреляционную функцию между кадрами, или — еще проще — изучаем разность между соседними кадрами). Определить наличие звука еще проще (выделяем некоторый порог, и как только амплитуда захваченного звука его превысит, считаем, что появился звук; со временем можно добавить фильтрацию шумов и даже распознавание посторонних звуков — как в методах отыскания движения на видео).
P.S. Буферизация выполняется нашим демоном в отведенную область разделяемой памяти. Через разделяемую же память происходит выдача информации о номере текущего буфера. При помощи UNIX queue можно реализовать общение клиента и демона. Выдачу изображений клиенту выполняет CGI, который с нужной частотой выбирает из буфера кадры, сжимает их, пишет разделитель и отправляет клиенту (mjpeg — простейший и самый универсальный способ выдачи видео). Со звуком, как я говорил выше, сложней (просто я еще не занимался выдачей звука по сети).
P.P.S. Если в буферы складывать уже сжатые изображения, клиентские CGI практически не нагружают сервер.
Исправление
Eddy_Em,
:
Нужны нам всего-то библиотеки v4l2 и OSS. При помощи v4l2 делаем захват видео (вот так я работал с веб-камерой, а так — с обычной видеокамерой). OSS используем для захвата звука (там вообще все элементарно). Алгоритмов определять движение на видео — пруд пруди, пользуемся одним из них (например, изучаем автокорреляционную функцию между кадрами, или — еще проще — изучаем разность между соседними кадрами). Определить наличие звука еще проще (выделяем некоторый порог, и как только амплитуда захваченного звука его превысит, считаем, что появился звук; со временем можно добавить фильтрацию шумов и даже распознавание посторонних звуков — как в методах отыскания движения на видео).
P.S. Буферизация выполняется нашим демоном в отведенную область разделяемой памяти. Через разделяемую же память происходит выдача информации о номере текущего буфера. При помощи UNIX queue можно реализовать общение клиента и демона. Выдачу изображений клиенту выполняет CGI, который с нужной частотой выбирает из буфера кадры, сжимает их, пишет разделитель и отправляет клиенту (mjpeg — простейший и самый универсальный способ выдачи видео). Со звуком, как я говорил выше, сложней (просто я еще не занимался выдачей звука по сети).
Исходная версия
Eddy_Em,
:
Нужны нам всего-то библиотеки v4l2 и OSS. При помощи v4l2 делаем захват видео (вот так я работал с веб-камерой, а так — с обычной видеокамерой). OSS используем для захвата звука (там вообще все элементарно). Алгоритмов определять движение на видео — пруд пруди, пользуемся одним из них (например, изучаем автокорреляционную функцию между кадрами, или — еще проще — изучаем разность между соседними кадрами). Определить наличие звука еще проще (выделяем некоторый порог, и как только амплитуда захваченного звука его превысит, считаем, что появился звук; со временем можно добавить фильтрацию шумов и даже распознавание посторонних звуков — как в методах отыскания движения на видео).