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"
]
}
]