Para configurar as câmeras Unfi no
Zoneminder, foi necessário acessar a interface WEB delas e trocar o modo de operação para Standalone.
Com essa mudança, a câmera entendeu que iria trabalhar sozinha, sem um Unifi NVR, e habilitou algumas opções na sua interface.
Entre as novas opções, ficou disponível a URL do stream RTSP da câmera. Foi através dessa URL que a câmera foi configurada no Zoneminder. No Zoneminder, as câmeras são definidas como monitores e podem ser adicionadas com o botão 'Add New Monitor', presente na tela inicial.
Como a configuração de câmeras no Zoneminder é bem ampla, vou descrever apenas opções que eu utilizei, outras possibilidades podem ser conferidas nesse link:
Para configurar as câmeras Ubiquiti, fiz o seguinte:
1. Na aba "General", alterei o "Source Type" para "FFmpeg" e "Function" para "Modect" (a opção Modect indica que será feita a gravação por movimento).
2. Na aba "Source", alterei o "Source Path" para: rtsp://usuario_camera:senha_camera@ip_camera:554/s0
O "Capture Width" para "1280" e "Capture Height" para "720".
Salvei e câmera ficou disponível na tela inicial do Zoneminder.
Para configurar a câmera Axis, primeiro foi necessário ativar a flag "OPT_CONTROL", nas opções do Zoneminder, dentro da aba "System". Essa configuração habilita o controle PTZ do Zoneminder.
Feito isso, a configuração da câmera Axis foi feita de forma semelhante à das câmeras Ubiquiti, porém, o Source Type ficou como Remote e, na aba Source, os campos Remote Host Name e Remote Host Path ficaram com os valores "usuario:senha@ip_camera" e "/axis-cgi/mjpg/video.cgi".
Além disso, na aba "Control", foi feita a configuração do PTZ. No campo "Control Type" foi usado a opção "Axis API v2", no campo "Control Device" foi usado o valor "axis-cgi/com/ptz.cgi". E no campo "Control Address", foi usado o valor "usuario :password@ip_caminho".
Uma observação é que, a principio, o controle PTZ dessa câmera não funcionou. Eu não sei se foi algo específico desse modelo, ou se é algum bug na Axis API, mas o controle PTZ inicialmente não movimentava a câmera.
Analisando as requisições que o Zoneminder fazia na API da câmera, notei que um cookie que a câmera usa na sua interface WEB não estava sendo enviado pelo Zoneminder.
Para corrigir isso, fiz uma alteração no código responsável por conversar com a API da câmera. Faça essa alteração apenas se for usar esse modelo e também estiver com problemas com o PTZ.
Primeiro, fiz um backup do arquivo original:
cp /usr/share/perl5/ZoneMinder/Control/AxisV2.pm ~
Depois, dentro do arquivo
/usr/share/perl5/ZoneMinder/Control/AxisV2.pm, alterei o conteúdo da "sub open", para seguinte:
sub open
{
my $self = shift;
$self->loadMonitor();
use LWP::UserAgent;
use HTTP::Cookies;
$self->{ua} = LWP::UserAgent->new;
my $cookie_jar = HTTP::Cookies->new();
$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );
$self->{ua}->cookie_jar( $cookie_jar );
$self->{state} = 'open';
}
Realizada essa alteração, precisei reiniciar o sistema e o controle PTZ começou a funcionar.