Un petit ajout :
- correctif onvif pour récupérer toutes les sources,
- enregistrement du jeton du profil pour l’utiliser lors d’envoi de command PTZ,
- ajout de la gestion de commandes Ptz,
3rdparty/ponvif.php L931 (prise en compte des plusieurs videoSources pour les caméras au lieu d’une :
protected function _getActiveSources($videoSources, $profiles) {
$sources = array();
// camera may have many sources
for ($i = 0; $i < count($videoSources); $i++) {
// NVT is a camera
if (isset($videoSources[$i]['@attributes'])) {
$sources[$i]['sourcetoken'] = $videoSources[$i]['@attributes']['token'];
$this->_getProfileData($sources, $i, $profiles);
} else {
// NVT is an encoder
if (strtolower($videoSources[$i]['@attributes']['SignalActive']) == 'true') {
$sources[$i]['sourcetoken'] = $videoSources[$i]['@attributes']['token'];
$this->_getProfileData($sources, $i, $profiles);
}
}
}
return $sources;
}
class/camera.class.php L345 : (ajout de la sauvegarde du token : cameraStreamProfileToken)
$mediaUri = preg_replace('/(([0-9]{1,3}\.){3}[0-9]{1,3})/m', '#username#:#password#@#ip#', $onvif->media_GetStreamUri($sources[0][0]['profiletoken']));
$this->setConfiguration('cameraStreamProfileToken', $sources[0][0]['profiletoken']);
$this->setConfiguration('cameraStreamAccessUrl', $mediaUri);
et L1043 ajout de gestion des commandes Ptz (move) :
if ($eqLogic->getConfiguration('device') == 'onvif') {
$profileToken = $eqLogic->getConfiguration('cameraStreamProfileToken');
$onvif = new Ponvif();
$onvif->setUsername($eqLogic->getConfiguration('username'));
$onvif->setPassword($eqLogic->getConfiguration('password'));
$onvif->setIPAddress($eqLogic->getConfiguration('ip') . ':' . $eqLogic->getConfiguration('onvif_port', 80));
$onvif->initialize();
if ($this->getLogicalId() == 'ptzleft') {
$onvif->ptz_ContinuousMove($profileToken,-1,0);
return true;
}
if ($this->getLogicalId() == 'ptzright') {
$onvif->ptz_ContinuousMove($profileToken,1,0);
return true;
}
if ($this->getLogicalId() == 'ptzup') {
$onvif->ptz_ContinuousMove($profileToken,0,1);
return true;
}
if ($this->getLogicalId() == 'ptzdown') {
$onvif->ptz_ContinuousMove($profileToken,0,-1);
return true;
}
if ($this->getLogicalId() == 'ptzstop') {
$onvif->ptz_ContinuousMove($profileToken,0,0); // seems to work anywhere
//$onvif->ptz_Stop($profileToken, 0, 0); // ActionNotSupported: error on some cameras return true;
}
}