
O tópico da vigilância por vídeo tornou-se grave para mim com o advento da habitação suburbana. Na Internet, você pode encontrar muitas informações sobre a organização da videovigilância. Infelizmente, a maioria das opções se resumia à compra de kits prontos da China. De amigos, ouvi muitas críticas a esse respeito. De alguma forma, ele mesmo participou da instalação do equipamento comprado da Aliexpress. Em algum lugar, metade das funções declaradas não funcionou como indicado, algumas das opções não deram certo, embora o registrador não tenha sido barato. E havia muitos comentários e opiniões. Além disso, muitos criticam o fato de os vídeos serem armazenados nos serviços em nuvem chineses. E então surgiu a idéia - e se você tentar criar seu próprio DVR com funcionalidade mínima? O que? Naquele momento, comecei a me envolver no linux, escrevi aplicativos com funcionalidades elementares no bash, experimentei a web ... Em princípio, tudo o que você precisa para resolver o problema. Mal disse o que fez.
Vamos lá Seleção de ferro
Um popular roteador TP-LINK TL-MR3020 com OPENWRT a bordo foi escolhido como objeto de teste.

Características do roteador:
- Processador MIPS de 300 MHz;
- 32 MB de RAM;
- chip flash para 4MB;
- Porta USB 2.0;
- Porta RJ-45 com 100 Mb full duplex;
- Pinos GPIO, gratuitos e com LEDs;
- Botão e ligue os pinos GPIO;
A câmera é uma câmera chinesa HD IP comum encomendada na China. Nós gravamos vídeo no protocolo RTSP. O utilitário openRTSP nos ajudou com isso, que fazia parte do repositório OPENWRT e tinha todas as funcionalidades necessárias. Decidimos trabalhar com o serviço em nuvem Yandex.Disk por meio do protocolo webdav. Este serviço fornece 10 GB de espaço livre em disco para cada novo usuário. Bem, lá você pode comprar conforme necessário.
Essência da ideia
Usando o protocolo rtsp, pegamos o fluxo de vídeo da câmera IP. Nós criamos um diretório de buffer. Nós gravamos vídeos nele. Usando o utilitário CURL por meio do protocolo webdav, enviamos vídeos para a nuvem. No nosso caso, este é o Yandex.Disk.
Experimente
Depois de conectar a câmera IP via ethernet ao roteador, lançamos uma gravação de teste de um clipe de 10 segundos no formato .mp4 no disco Yandex:
OPENRTSP -V -B 51200 -b 200000 -4 -f 25 -d 10>/tmp/ya_disk/test.mp4
Então eles enviaram para a nuvem:
curl -v -m 180 --stderr /tmp/log -k -u $email:$pass -T /tmp/ya_disk/test.mp4 https://webdav.yandex.ru/
Isso funciona!
Os testes começaram com diferentes comprimentos de clipes, diferentes intervalos de gravação e gravação periódica. Em geral, os testes foram bem sucedidos. No entanto, houve um problema com a gravação de clipes muito curtos (da ordem de 5 segundos). Os clipes foram gravados em uma velocidade mais alta e seu comprimento foi menor que o definido. Eles resolveram o problema editando as fontes openRTSP: asseguraram que o programa cumprisse estritamente o valor de fps inserido pelo usuário, e não retirado do SDP, também eliminava quadros com menos de 100 bytes.
Pensamos sobre a funcionalidade
Após testes bem-sucedidos, foi decidido fazer uma interface de controle. Naquela época, eu estava começando a me familiarizar com a web, então decidi fazer uma versão da web. Pilha de tecnologia no lado do usuário (front-end): HTML5, CSS3, JQUERY, AJAX. No lado do ferro (back-end): UHTTPD, CGI, BASH. Eles não ficaram espertos com o design, usaram o arranjo lado a lado dos botões da página principal.

As páginas de gerenciamento e entrada de dados foram feitas usando o JQUERY. Com os primeiros resultados bem-sucedidos do gerenciamento de um
roteador de registradores, começamos a adicionar funcionalidades. Talvez tenha sido um erro. Devido à inexperiência, negligenciamos os testes. Agora, quando há muitas funcionalidades, é difícil testar. Devido à falta de disciplina na escrita de código no início do desenvolvimento, torna-se cada vez mais difícil entender o que está escrito. As falhas aparecem de tempos em tempos, é claro que as eliminamos, mas seria muito mais fácil fazer isso nos estágios iniciais do desenvolvimento e nos estágios.
Então, a funcionalidade:
- Suporte para qualquer câmera IP;
- Suporte para modems 3G / 4G;
- Grave no armazenamento em nuvem (gratuito) e / ou em uma unidade USB;
- Gravação periódica e / ou gravação de movimento;
- Loop para disco;
- Ajustando o comprimento do rolo;
- Modos de gravação: por hora, por movimento, dia, noite;
- Trabalho autônomo em caso de falta de energia (aproximadamente 20 min);
Implementação do lado do cliente
Existem 6 botões no menu de configurações do gravador: WIFI, GRAVAÇÃO, CÂMERA, 3G / 4G, ARMAZENAMENTO e AJUDA. Então, em ordem:
WIFI

Aqui você pode configurar o gravador de wi-fi. O WI-FI pode funcionar em 2 modos - "cliente" e "ponto de acesso". No modo "Ponto de acesso", tudo fica claro: número do canal, SSID, tipo de criptografia, senha. No modo "cliente", o registrador está conectado a qualquer ponto de acesso wi-fi.
Por conseguinte, neste modo, não é necessário um modem 3G / 4G. Para que o usuário não perca o registrador quando o cliente se conecta ao ponto de acesso, implementamos fisicamente o modo repetidor.
A única coisa que você precisa prestar atenção é que, ao conectar o registrador ao ponto de acesso, é necessário verificar se o dispositivo móvel do usuário "saltou" para outro ponto de acesso Wi-Fi, porque O ponto de acesso do registrador Wi-fi desaparecerá por um curto período de tempo. O campo "Modo de recuperação" é uma garantia de que você não "perderá" o registrador. É um tempo garantido quando você o liga, quando o usuário pode configurar o dispositivo ou ligar o ponto de acesso. Após o modo de recuperação, ele irá automaticamente para a página do menu principal. Essa parte da funcionalidade ainda está sendo testada e desativada temporariamente.
RECORD

Campo de indicação de data e hora, menu “Definir hora”, “Registro no armazenamento local” e “Registro no armazenamento na nuvem”.
Ajuste de hora. Ao clicar no botão "Alterar hora", você pode alterar a hora e a data. Além disso, usando o controle deslizante, a hora do início e do fim do dia é definida (para todos, é individual). Isso é feito para otimizar os modos operacionais do registrador em diferentes horários do dia.
Escreva no armazenamento local. Aqui você pode ativar ou desativar a gravação em mídia externa, ativar ou desativar a gravação de movimento e / ou gravação periódica com a capacidade de definir a duração do clipe gravado e o período de gravação dos clipes (no modo de gravação periódica).
Escreva no armazenamento em nuvem. Aqui, como no parágrafo anterior, o registro no armazenamento em nuvem está configurado. Foi adicionado um item para configurar um serviço de nuvem, no qual você pode especificar em qual nuvem de serviço gravar (por enquanto, ele funciona apenas com um disco Yandex), o nome de usuário e a senha da sua conta Yandex.
AJUDA

O conteúdo dos itens de menu da interface, bem como o objetivo de cada um deles, são descritos por pontos.
CÂMARA
Endereço de fluxo RTSP da câmera. Os dados para esse campo podem ser encontrados visitando a página de configurações da câmera IP. No futuro, planejamos receber esses dados via ONVIF e o campo será preenchido automaticamente. Enquanto a operação estável do ONVIF em todas as câmeras IP só pode sonhar.
O atraso entre os rolos. Parâmetro que determina a pausa em segundos ao gravar filmes. É usado no modo de gravação de movimento. Permite salvar o tráfego da Internet com movimentos constantes ou frequentes no quadro.
Vídeo da câmera. Útil para controlar a imagem gravada ao instalar a câmera.
3G / 4G

Isso exibe informações sobre sua conexão com a Internet usando um modem 3G / 4G. Os dados são atualizados a cada 3 segundos. Útil para monitorar a qualidade da comunicação ao instalar a câmera.
ARMAZENAGEM

Existem dois submenus - "Armazenamento local" e "Yandex.Disk". Quando você seleciona a primeira, entramos na árvore de arquivos da mídia externa conectada; quando você seleciona a segunda, vamos para Yandex.disk.
Versão móvel da interface Os vídeos gravados podem ser visualizados no Yandex.Disk com o player incorporado do serviço. Além disso, o vídeo pode ser baixado e visualizado localmente por qualquer player de vídeo. O armazenamento de vídeos gravados está organizado da seguinte forma:

CAM - pasta para gravar vídeos do registrador;
MOTION - uma pasta para gravar vídeos gravados por movimento no quadro;
TIME - pasta para gravar vídeos gravados em uma frequência especificada;
AAAA-MM-DD - pasta para vídeos gravados durante o dia;
DDMMYYYY-HH_MM_SS.mp4 - vídeos gravados no formato mp4;
Organização do armazenamento de arquivos no Yandex.Disk O que tem dentro? Implementação do lado do servidor
Como escrevi acima, o roteador TP-LINK TL-MR3020 com o OPENWRT integrado tornou-se o primeiro experimental. Barrier Breaker versão 14.07. No início do teste, era a versão mais recente. Agora atualizado para LEDE. O OpenRTSP não estava no repositório desta versão, então adicionamos o utilitário, ao mesmo tempo removendo tudo o que era supérfluo.
Após testes bem-sucedidos, começamos a considerar outros roteadores com arquitetura semelhante. Estávamos procurando uma plataforma mais adequada para o registrador em dimensões e características. A idéia é que, ao exibir um dos roteadores com firmware modificado e conectar uma câmera IP com um modem 3G / 4G, você obtenha um registrador. A lista de dispositivos nos quais a funcionalidade do registrador foi testada:
- TP-LINK TL-MR3020;
- HAME A5;
- CARAMBOLLA2;
- Não desejado;
- Skywork skw71;
- TP-LINK TL-MR10U (com bateria);
- TP-LINK TL-MR3040 (com bateria);
- TP-LINK TL-MR3220 V: 2.3 (4 portas Ethernet);
Tentamos experimentar as placas dos roteadores no caso. A idéia era que, além do estojo, nada se destaca e não trava, e o estojo em si é de tamanho mínimo. Portanto, conforme planejado em 3G / 4G, o modem deve estar dentro do gabinete. Portanto, obtivemos um protótipo de rua de
fazenda coletiva baseado na placa TP-LINK TL-MR3020:




Obviamente, preferimos roteadores com tamanhos mínimos. Portanto, decidimos experimentar o roteador chinês HAME A5, imprimir uma caixa e ver o que acontece:


No HAME A5, o firmware de nosso registrador era instável, o roteador desligava e reiniciava constantemente. Provavelmente, isso ocorreu devido a superaquecimento grave. Portanto, tive que abandoná-lo em favor de uma opção mais confiável e comprovada.
Tentamos muitas opções, mas nada é melhor que o meu. Portanto, eles decidiram distribuir sua placa com um módulo da CARAMBOLLA2 e a possibilidade de duração da bateria.

Características do CARAMBOLLA2:
- Processador AR9331, 400 MHz;
- 64 MB de RAM DDR2;
- 16 MB FLASH;
- 802.11 b / g / n, 2,4 GHz, 1x1 SISO, taxa de dados máxima de 150MBps, potência de saída de 21 dB;
- Tensão de alimentação 3,3 V;
- Dimensões 28 x 38 mm;
Ao projetar o quadro, ficou claro que ele era bem pequeno:


Por que não instalá-lo diretamente na câmera? Portanto, resolvemos imediatamente o problema com o caso do registrador. Então eles fizeram. Aqui está o que aconteceu:




A foto mostra que a placa do gravador está montada paralela às placas da câmera nos racks. Por razões de resfriamento do chip, é melhor usar câmeras IP com uma caixa de metal e fazer um radiador para que o calor seja removido da caixa. Para conectar um modem 3G / 4G e / ou unidade USB, foi utilizado um fio de câmera IP Ethernet padrão. A autonomia da câmera com o gravador interno fornece uma bateria de 700mAh 3.7V. A função da bateria será útil em caso de falta de energia deliberada. Esta bateria é suficiente para cerca de 20 minutos de operação do DVR com a câmera.
Dê mais câmeras!
Além disso, foram realizadas experiências com a gravação de vídeos de várias câmeras IP. Os experimentos mostraram que a gravação de vídeos de duas câmeras IP funcionava de maneira estável, por isso estamos considerando a possibilidade de criar um gravador em um caso separado, com a capacidade de conectar duas câmeras IP. Agora estamos testando o trabalho do registrador com três e quatro câmeras IP. Os resultados ainda não estão claros. As câmeras serão alimentadas a partir do gravador via PoE passivo.

A funcionalidade desta opção pode ser útil, por exemplo, ao instalar câmeras com interseção de zonas de vigilância. Para trabalhar com um grande número de câmeras, você pode olhar na direção dos minicomputadores atualmente muito populares. Mas você precisa entender que o consumo de energia desses dispositivos é uma ordem de magnitude mais alta e o preço também.
Como você chama um barco para navegar
Você provavelmente notou a inscrição no quadro. Achamos que era inútil que um projeto não tivesse título. Eles criaram um nome modesto - “Vip-Cam” (câmera de vídeo-IP). Bem, a versão com várias câmeras - "Vip-Box".
O que vem a seguir?
Planos futuros:
- Otimize e teste o código. Obtenha um dispositivo de trabalho estável;
- Realizar pesquisas sobre a possibilidade de configurar uma câmera IP através do menu de aplicativos da web;
- Explore a possibilidade de integrar um DVR em um sistema doméstico inteligente;
- Continue testando a operação do DVR com duas ou mais câmeras IP;
- Realize testes no funcionamento da câmera com uma bateria solar;
- Criando uma modificação no DVR com suporte para câmeras IP 2-x;
- Adicionando funcionalidade para configuração remota do DVR e câmera IP;
- Adicionando a capacidade de criar remotamente um vídeo sob demanda;
As fontes do projeto estão
aqui .
Por isso, implementamos atualmente a ideia de um mini-gravador em nuvem. O projeto é implementado no seu tempo livre; portanto, o tempo de desenvolvimento é bastante atrasado. Como resultado, temos um protótipo funcional de um DVR de tamanho pequeno que pode gravar vídeos no armazenamento em nuvem gratuitamente. Ainda há muito trabalho, mas uma das tarefas foi resolvida - é bem possível criar um registrador incomparável e de alta qualidade. Obrigado pela atenção.