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

Преамбула

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

Что есть?

  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 страничку ( он потом пригодиться при наращивании функционала )
Yuriy Artamonov on GithubYuriy Artamonov on LinkedinYuriy Artamonov on Twitter
Yuriy Artamonov
Software Developer
До последнего времени Юрий принимал активное участие в разработке опенсорс-фреймворка CUBA Platform, специализируясь на архитектуре и фронтенд-технологиях. Преподавал в Самарском университете разработку приложений для мобильных устройств, основы UI/UX и менторил студентов.

В настоящее время работает в компании JetBrains в команде IntelliJ IDEA Ultimate. Когда выдаётся свободное время, пишет статьи и контрибьютит в проекты с открытым исходным кодом. Обожает реализовывать странные идеи с лозунгом: «А почему бы и нет?».