[Tuto] Installation Onvif sous Linux [Raspberry]

Tuto installation Onvif sous Linux [Raspberry]

Suite à demande Plugin Camera piloter le PTZ des cameras ONVIF

Procédure

node-onvif
Le node-onvif est un module Node.js qui vous permet de communiquer avec la caméra réseau qui prend en charge les spécifications ONVIF.

Information origine : https://github.com/futomi/node-onvif#readme

Installation sous root :

pi@pi:~ $ sudo su

root@pi:/home/pi# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

Un Reboot pour prendre en compte !
root@pi:/home/pi# reboot

root@pi:/home/pi# nvm install node

root@pi:/home/pi# npm install -g npm@7.4.2

root@pi:/home/pi# npm install -s node-onvif

Création fichier pour révélation des Cam Onvif sur le réseau:

root@pi:/home/pi# nano revelonvif.js

Dans ce fichier :

const onvif = require('node-onvif');

console.log('Start the discovery process.');
// Trouvez les caméras réseau ONVIF.
// Cela prendra environ 3 secondes.
onvif.startProbe().then((device_info_list) => {
  console.log(device_info_list.length + ' devices were found.');
// Affiche le nom de l'appareil et l'URL du point final.
  device_info_list.forEach((info) => {
    console.log('- ' + info.urn);
    console.log('  - ' + info.name);
    console.log('  - ' + info.xaddrs[0]);
  });
}).catch((error) => {
  console.error(error);
});

Enregistrement

Puis lancement par:
root@pi:/home/pi# node revelonvif.js

Et normalement il trouve tes Cam Onvif:

root@pi:/home/pi# node realonvif.js

Start the discovery process.
x devices were found.
- urn:uuid: ICI code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - Le nom de ta cam
  - http://adesse:port/onvif/device_service
- urn:uuid: ICI code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - Le nom de ta cam
  - http://adesse:port/onvif/device_service
- urn:uuid: ICI code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - Le nom de ta cam
  - http://adesse:port/onvif/device_service
- urn:uuid: ICI code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - Le nom de ta cam
  - http://adesse:port/onvif/device_service
- urn:uuid: ICI code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - Le nom de ta cam
  - http://adesse:port/onvif/device_service

root@pi:/home/pi#

Aprés pour voir les cde de ta cam :
Tu te fais un fichier (avec l’adresse IP:Port et ton user et password) du type

root@pi:/home/pi# nano RevelCam.js

Avec :

const onvif = require('node-onvif');

// Créer un objet OnvifDevice
let device = new onvif.OnvifDevice({
  xaddr: 'http://adresse IP:Port/onvif/device_service',
  user : 'ton user',
  pass : 'mot de passe'
});

// Initialise l'objet OnvifDevice
device.init().then(() => {

let profile = device.getCurrentProfile();
console.log(JSON.stringify(profile, null, '  '));


}).then(() => {
  console.log('Done!');
}).catch((error) => {
  console.error(error);
});

Enregistrement

Puis lancement par:
root@pi:/home/pi# node RevelCam.js

Et si pas d’erreur dans xadr , user , pass :

tu as la réponse du type : [peut être autre bien sûr …]

{
  "token": "FixedProfileA001",
  "name": "FixedProfileA01",
  "snapshot": "",
  "stream": {
    "udp": "rtsp://adresse IP:Port/realmonitor?channel=0&stream=0.sdp", 
    "http": "http://1adresse IP/streaming/channels/1",
    "rtsp": "rtsp://1adresse IP:Port/realmonitor?channel=0&stream=0.sdp"
  },
  "video": {
    "source": {
      "token": "VideoSourceConfigurationA001",
      "name": "VideoSourceConfigurationA01",
      "bounds": {
        "width": 352,
        "height": 288,
        "x": 0,
        "y": 0
      }
    },
    "encoder": {
      "token": "VideoEncoderConfigurationA001",
      "name": "VideoEncoderA01",
      "resolution": {
        "width": 352,
        "height": 288
      },
      "quality": 3,
      "framerate": 25,
      "bitrate": 512,
      "encoding": "H264"
    }
  },
  "audio": {
    "source": {
      "token": "AudioSourceConfigurationA001",
      "name": "AudioSourceConfigurationA01"
    },
    "encoder": {
      "token": "AudioEncoderConfigurationA001",
      "name": "AudioEncoderA01",
      "bitrate": 128,
      "samplerate": 0,
      "encoding": "G711"
    }
  },
  "ptz": {
    "range": {
      "x": {
        "min": 0,
        "max": 0
      },
      "y": {
        "min": 0,
        "max": 0
      },
      "z": {
        "min": 0,
        "max": 0
      }
    }
  }
}
Done!

root@pi:/home/pi#

Information

Methode ONVIF

Objet Onvif
Créer un objet Onvif
Pour utiliser le module node-onvif, vous devez charger le module node-onvif comme suit:

const onvif = require (‹ node-onvif ›);
La variable onvif dans le code ci-dessus est l’objet Onvif.

Méthodes
Cette section décrit les méthodes implémentées dans l’objet Onvif.

startProbe([callback])
Cette méthode démarre le processus de découverte et tente de trouver les périphériques de caméra réseau ONVIF. Cette méthode renvoie un objet Promise si le rappel n’est pas passé.

Le processus de découverte prendra environ 3 secondes. Une fois le processus terminé, la fonction résoudre () sera appelée avec un objet Array contenant des objets de hachage représentant les périphériques trouvés. L’objet de hachage contient les propriétés suivantes:

Property	Type	Description
urn	        String	L'URN (Uniform Resource Name) attribué à l'appareil (par exemple, "urn: uuid: 6b2be733-6ad1-4467-8bd0-747bd8efd206")
name	    String	Le nom de produit de l'appareil (par exemple, «Panasonic BB-SC384B»).
hardware	String	Description du matériel de l'appareil (par exemple, "BB-SC384B").
location	String	Emplacement physique de l'appareil (par exemple, «Chine», «shenzhen», «bureau»).
types	    Array	La liste des types pris en charge par le périphérique (par exemple, "dn: NetworkVideoTransmitter", "tds: Device"). Fondamentalement, ce module est pour "dn: 				NetworkVideoTransmitter".
xaddrs	    Array	La liste des URL des points de terminaison (par exemple, "http://192.168.10.17/onvif/device_service", "http: // [2408: 12: 2e20: d000: bec3: 42ff: fe17: e292] / onvif / device_service ").
scopes	    Array	La liste des portées définies pour le périphérique (par exemple, "onvif: //www.onvif.org/Profile/Streaming", "onvif: //www.onvif.org/location/office").

L’exemple de code ci-dessous montre la structure de l’objet de hachage représentant le périphérique trouvé.

const onvif = require('node-onvif');

// Trouver les caméras réseau ONVIF
onvif.startProbe().then((device_list) => {
// Afficher les informations des appareils trouvés
  console.log(JSON.stringify(device_list, null, '  '));
}).catch((error) => {
  console.error(error);
});

Le code ci-dessus affichera le résultat comme ceci:

[
  {
    "urn": "urn:uuid:4d454930-0000-1000-8000-bcc34217e292",
    "name": "Panasonic BB-SC384B",
    "hardware": "BB-SC384B",
    "location": "office",
    "types": [
      "dn:NetworkVideoTransmitter",
      "tds:Device"
    ],
    "xaddrs": [
      "http://192.168.10.12/onvif/device_service",
      "http://[2408:12:2e20:d000:bec3:42ff:fe17:e292]/onvif/device_service"
    ],
    "scopes": [
      "onvif://www.onvif.org/Profile/Streaming",
      "onvif://www.onvif.org/hardware/BB-SC384B",
      "onvif://www.onvif.org/location/office",
      "onvif://www.onvif.org/name/Panasonic_BB-SC384B",
      ""
    ]
  },
  {
    "urn": "urn:uuid:cd279d60-afd3-3a22-00dc-daaa234e772c",
    "name": "Canon VB-S30D",
    "hardware": "VB-S30D",
    "location": "Canon",
    "types": [
      "dn:NetworkVideoTransmitter",
      "tds:Device"
    ],
    "xaddrs": [
      "http://192.168.10.10:80/onvif/device_service",
      "http://169.254.240.48:80/onvif/device_service",
      "http://[2408:12:2e20:d000:1a0c:acff:fee9:c231]:80/onvif/device_service",
      "http://[fe80::1a0c:acff:fee9:c231]:80/onvif/device_service"
    ],
    "scopes": [
      "onvif://www.onvif.org/type/video_encoder",
      "onvif://www.onvif.org/type/ptz",
      "onvif://www.onvif.org/name/Canon_VB-S30D",
      "onvif://www.onvif.org/hardware/VB-S30D",
      "onvif://www.onvif.org/type/audio_encoder",
      "onvif://www.onvif.org/type/video_analytics",
      "onvif://www.onvif.org/type/Network_Video_Transmitter",
      "onvif://www.onvif.org/Profile/Streaming",
      "onvif://www.onvif.org/location/Canon"
    ]
  }
]

A suivre @Doubledom @+DÖM (Ô¿Ô)

4 « J'aime »

Merci …!