Видеонаблюдение на коленке

Преамбула

Вот захотелось Ивану Царевичу видеонаблюдение для государства своего, да так чтобы удалённое!
Чтобы, даже когда он в отпуске на карибах, он знал что в королевстве делается!

Что есть?

  1. Дешёвая камера Logitech за 500 деревянных
  2. Компьютер с белым IP
  3. Прямые руки

Реализация до боли проста: VLC + Приложение на Java

Идея

  • VLC снимает поток с камеры и перекодирует его в кодек Theora + OGG и вещает в сеть
  • Веб-приложение на Java проксирует трафик до VLC
  • Браузер воспроизводит видео в HTML 5 ( В моём случае хорошо его воспроизводит Chrome)

Проксировать траффик казалось бы ненужно, но нет. Нужно! Во-первых — это позволяет распределить камеры по нескольким узлам локальной сети. Во-вторых — это позволяет фильтровать обращения к видео, не всем же мы показывать его будем, вражина не должен видеть что в государстве твориться! Ну а в третьих — позволяет нам иметь один URL для всех камер : http://host:port/stream?camera-id

VLC

Прекрасный плеер с функцией захвата видео и вещания в сеть. Настроить вещание достаточно просто:

Приложение

Для приложения выбран язык Java, маленький веб-сервер Jetty, веб-фреймворк Vaadin.

Самое интересное это фрейм HTML 5 для вещания видео и собственно прокси сервлет на Java.

Показываем видео в HTML 5

Проксируем обращения к потоку видео

 И мы вещаем!

Ну вот теперь, поскольку я использую Vaadin для приложения, можно легко добавить выбор доступных камер, управление доступом и пользователями, и прочие плюшки.

Исходники примера под GPL v3: VideoCamSample

Немножко плюшек на заметку:

  • Приложение собирается при помощи Maven 3, минимум телодвижений для сборки War-файла
  • Пример написан в Intellij Idea, это позволяет деплоить приложение в Jetty за один клик кнопки Debug
  • Vaadin используется не случайно, очень не хотелось писать самому убогую JSP страничку ( он потом пригодиться при наращивании функционала )
Facebooktwittergoogle_plusredditlinkedin
Yuriy Artamonov on GithubYuriy Artamonov on LinkedinYuriy Artamonov on Twitter
Yuriy Artamonov
Technical Manager

Юрий фанатеет от технологий, программирования и веб-разработки.

Последние несколько лет он занимает позицию ведущего разработчика в команде CUBA Platform и делает существенный вклад в архитектуру этого продукта, специализируясь на фронтенд-технологиях. Кроме того, Юрий обучает студентов факультета информатики Самарского Университета.