Ce document décrit le fonctionnement de l'API HTTP disponible sur les serveurs CamTrace dont la version est supérieure ou égale à v15.2.0.
Mises à jour du document
Version | Date | Auteur | Motif |
---|---|---|---|
1.2-01 | 08/01/2020 | Romain RIGOT | Draft 01 |
1.2-02 | 09/03/2020 | Romain RIGOT | Fonctionnalités 15.1 : update de groupes en mode cycles, correction des exemples de requêtes |
1.2-03 | 02/12/2020 | Romain RIGOT | Ajout de champs manquant dans les requêtes groupes |
1.2-04 | 08/12/2020 | Romain RIGOT | Fonctionnalités 15.2 : folders |
1.2-05 | 26/07/2021 | Romain RIGOT | Fonctionnalités 15.2.1 : logs |
1.2-06 | 04/10/2021 | Romain RIGOT | Fonctionnalités 15.2.1 : tasks |
Le service RTSP permet de visualiser les flux vidéos live des caméras déclarées sur le serveur CamTrace. Ce service est disponible pour les versions de CamTrace Nova14 à partir de la 14.1.0. Après l'abandon du support de la technologie ActiveX sur les postes Windows, le composant d'affichage CamTrace peut être remplacé par un composant d'affichage compatible avec le protocol RTSP (VLC est un choix à considérer). Vous pouvez également accéder aux flux des caméras du serveur Camtrace grace à la technique PUSH HTTP qui permet, par exemple, d'afficher la vidéo directement dans un navigateur web. Dans ce cas, les flux affichés sont recompressés en MJPEG par le serveur.
L'accès à un flux vidéo se fait via une URL RTSP composée comme ceci:
rtsp://<serveur>:<port-rtsp>/<id-flux>
Les éléments composants cette URL sont :
Paramètre | Description |
---|---|
serveur | Nom DNS ou adresse IP du serveur CamTrace |
port-rtsp | Port du serveur RTSP de CamTrace tel que défini dans la configuration système (défaut : 8554) |
id-flux | Identifiant de flux vidéo |
L'identifiant de flux vidéo est de la forme X.Y. Il est possible de le trouver par différentes méthodes.
Si le flux a un rôle affecté, l'identifiant s'obtient via la requête sur l'API HTTP : GET /api/v1.2/cameras
dans la partie après le dernier "/" des champs hdStream
, mdStream
, ldStream
ou alStream
.
Sinon, la liste des identifiants de flux est disponible dans la page d'administration des caméras lorsque l'affichage des informations de flux est sélectionné ("Afficher/masquer les flux" - colonne id
).
Exemple:
rtsp://192.168.1.100:8554/2.6
Lors de l'accès au flux, le serveur demande une authentification par login et password correspondant à un utilisateur déclaré dans CamTrace et avec les droits d'accès au flux. Il est possible de renseigner directement ces information dans l'URL d'accès au flux RTSP en suivant la forme:
rtsp://<user>:<pass>@<serveur>:<port-rtsp>/<id-flux>
L'accès à un flux vidéo se fait via la même URL que pour accéder aux flux vidéos Camtrace à la différence de protocole près (http à la place de ws):
http://<serveur>:<port-http>/<live_view_stream_path>
Les éléments composants cette URL sont :
Paramètre | Description |
---|---|
serveur | Nom DNS ou adresse IP du serveur CamTrace |
port-http | Port du serveur HTTP de CamTrace tel que défini dans la configuration système (défaut : 80 ou 443) |
live_view_stream_path | chemin d'accès aux flux live |
Si le flux a un rôle affecté, le chemin d'accès au flux live s'obtient via la requête de l'API HTTP: GET /api/v1.2/cameras
dans les champs hdStream
, mdStream
, ldStream
ou alStream
. Sinon, vous pouvez obtenir le chemin générique d'accès aux flux live via la requête : GET /api/v1.2/users/login
dans la section services
. Ensuite, vous pouvez retrouver l'identifiant du flux que vous voulez afficher dans La liste de la page d'administration des caméras (voir la section RTSP ci-dessus).
Exemple:
http://192.168.1.100/live/view/2.6
Lors de l'accès au flux, le serveur demande une authentification par login et password correspondant à un utilisateur déclaré dans CamTrace et avec les droits d'accès au flux. Il est possible de renseigner directement ces information en paramètre de l'URL d'accès au flux PUSH HTTP en suivant la forme:
http://<serveur>:<port-http>/<live_view_stream_path>?user=<user>&pass=<password>
Le service HTTP est une API (Application Programming Interface) de type REST. Elle permet aux développeurs d'applications de connaître les caméras, groupes, écrans, etc présent sur un serveur CamTrace.
Toutes les requêtes se font via HTTP ou HTTPS en fonction de la configuration de votre serveur.
Toutes les requêtes commencent par /api/v1.2
.
Toutes les données envoyées ou reçues sont formatées en JSON (JavaScript Object Notation).
Les dates sont renvoyées au format ISO-8601: YYYY-MM-DDTHH:MM:SSZ
.
# Exemple de requête:
GET /api/v1.2/servers HTTP/1.1
Host: <votre-serveur>
# Réponse:
HTTP/1.1 200 OK
Date: Wed, 12 Mar 2014 16:12:37 GMT
Server: Apache/2.2.15 (FreeBSD) mod_ssl/2.2.15 OpenSSL/0.9.8n PHP/5.3.2 with Suhosin-Patch
X-Powered-By: PHP/5.3.2
Content-Length: 124
Content-Type: application/json
{"servers":[...]}
L'API CamTrace utilise les méthodes HTTP pour définir le type d'action des requêtes.
Méthode | Description |
---|---|
HEAD | Cette méthode permet de récupérer les entêtes HTTP sans la ressource. |
GET | Utilisé pour récupérer une ressource. |
POST | Utilisé pour ajouter une ressource |
PUT | Utilisé pour modifier une ressource. |
DELETE | Utilisé pour supprimer une ressource. |
Vous pouvez envoyer le paramètre ?_callback=
avec les requêtes GET pour obtenir le résultat englobé dans une fonction javascript. C'est pratique dans les navigateurs pour faire des requêtes cross-domain. Les données renvoyés sont les mêmes que pour les requêtes classiques.
$ curl http://demo.camtrace.com/api/v1.2/servers?_callback=pop
pop({
"meta": {
"status": 200
},
"data": {
"servers": [...]
}
});
Les requêtes nécessitant une identification renvoient un code HTTP 401 Unauthorized
. Dans le cas où les droits de l'utilisateur ne sont pas assez élevés pour accéder à une ressource alors la réponse est 404 Not Found
.
Si vous utilisez HTTPS alors la méthode HTTP Basic est suffisante. En revanche si votre serveur n'est pas configuré en HTTPS alors vous devez savoir que vos identifiants circuleront en clair entre le client et le serveur et donc toute personne ou machine interceptant la requête pourra voir les identifiants utilisés. L'utilisation de la méthode WSSE vous assure que personne ne sera capable de s'identifier à la place de l'utilisateur même si la requête est interceptée. Il est donc préférable d'utiliser cette méthode pour les serveurs n'utilisant pas HTTPS.
Les serveurs CamTrace supportent la méthode d'identification standard HTTP Basic (voir détails sur wikipedia). Ci-dessous, un exemple de requête avec identification:
GET /api/v1.2/cameras HTTP/1.1
Host: demo.camtrace.com
Authorization: Basic ZGVtbzpkZW1v
HTTP/1.1 200 OK
Date: Wed, 12 Mar 2014 18:40:36 GMT
Server: Apache/2.2.15 (FreeBSD) mod_ssl/2.2.15 OpenSSL/0.9.8n PHP/5.3.2 with Suhosin-Patch
X-Powered-By: PHP/5.3.2
Content-Length: 14
Content-Type: application/json
{"cameras":[]}
À l'origine, l'algorithme WSSE Username Token fait parti des spécifications WS-Security de SOAP. Cette méthode est à privilégié car plus sécurisé que la méthode précédente. Pour s'identifier, il faut envoyer avec chaque requête les deux headers suivants:
Authorization: WSSE profile="UsernameToken"
X-WSSE: UsernameToken
Username="<username>",
PasswordDigest="base64(sha1(<nonce><created-at><md5-password>))",
Nonce="<nonce>",
Created="<created-at>"
<username>
correspond au nom de l'utilisateur. <nonce>
est une chaîne de caractères aléatoire générée pour chaque requête. <created-at>
est la date au format ISO-8601 du moment de la requête. Enfin PasswordDigest
contient les chaines <nonce>
, <created-at>
et le mot de passe de l'utilisateur, le tout encodé en sha1.
Ci-dessous, un exemple de calcul du mot de passe demo:
#!/usr/bin/env ruby
require 'base64'
require 'digest/sha1'
password = Digest::MD5.hexdigest('demo')
nonce = 'UHQJ5DN947AEAMPQN1H3G'
created_at = '2014-03-13T19:45:00Z'
puts Base64.encode64(Digest::SHA1.digest("#{nonce}#{created_at}#{password}"))
# => bc+AAFOSnebE96iEilMMquA7l8E=
La chaine bc+AAFOSnebE96iEilMMquA7l8E= est donc la valeur PasswordDigest
à envoyer au serveur pour l'identification. Ce mot de passe est valide pendant 10 secondes et doit être recalculé à chaque requête.
Exemple d'une requête pour l'utilisateur demo et le mot de passe demo:
GET /api/v1.2/cameras HTTP/1.1
Host: demo.camtrace.com
Authorization: WSSE profile="UsernameToken"
X-WSSE: UsernameToken Username="demo", PasswordDigest="bc+AAFOSnebE96iEilMMquA7l8E=", Nonce="UHQJ5DN947AEAMPQN1H3G", Created="2014-03-13T19:45:00Z"
HTTP/1.1 200 OK
Date: Wed, 12 Mar 2014 18:40:36 GMT
Server: Apache/2.2.15 (FreeBSD) mod_ssl/2.2.15 OpenSSL/0.9.8n PHP/5.3.2 with Suhosin-Patch
X-Powered-By: PHP/5.3.2
Content-Length: 14
Content-Type: application/json
{"cameras":[]}
Parfois, il est nécessaire de passer les paramètres de l'identification dans l'URL plutôt que dans les entêtes HTTP. Ci-dessous, le détail des paramètres pour les méthodes HTTP Basic et WSSE Username Token.
GET /api/v1.2/cameras?_username=demo&_password=demo
Nom | Description |
---|---|
_username | Nom d'utilisateur. |
_password | Mot de passe de l'utilisateur. |
GET /api/v1.2/cameras?_username=demo&_password=bc%2BAAFOSnebE96iEilMMquA7l8E%3D&_nonce=UHQJ5DN947AEAMPQN1H3G&_created_at=2014-03-13T19:45:00Z
Nom | Description |
---|---|
_username | Nom d'utilisateur. |
_password | Voir Méthode WSSE Username Token. |
_nonce | Voir Méthode WSSE Username Token. |
_created_at | Voir Méthode WSSE Username Token. |
Il est possible de choisir la langue utilisée par l'API. Pour cela, il faut utiliser l'entête HTTP Accept-Language
. Les langues actuellement acceptées sont le français (fr), l'anglais (en), l'allemand (de), l'espagnol (es), l'italien (it) et le néerlandais (nl). L'anglais est utilisé par défaut.
Exemple d'une requête sans spécifier la langue:
$ curl -i -u pop:pop http://demo.camtrace.com/api/v1.2/cameras
HTTP/1.1 401 Unauthorized
Date: Wed, 13 Mar 2014 20:40:36 GMT
Server: Apache/2.2.15 (FreeBSD) mod_ssl/2.2.15 OpenSSL/0.9.8n PHP/5.3.2 with Suhosin-Patch
X-Powered-By: PHP/5.3.2
Content-Length: 29
Content-Type: application/json
{"error":"Invalid password!"}
La même requête en demandant une réponse en français:
$ curl -i -u pop:pop -H 'Accept-Language: fr' http://demo.camtrace.com/api/v1.2/cameras
HTTP/1.1 401 Unauthorized
Date: Wed, 13 Mar 2014 20:40:36 GMT
Server: Apache/2.2.15 (FreeBSD) mod_ssl/2.2.15 OpenSSL/0.9.8n PHP/5.3.2 with Suhosin-Patch
X-Powered-By: PHP/5.3.2
Content-Length: 35
Content-Type: application/json
{"error":"Mot de passe invalide !"}
Cette requête permet d'ouvrir le bandeau à partir d'un simple lien sans que l'utilisateur ait besoin d'entrer ses identifiants. Les identifiants doivent donc être passés dans les paramètres de la requête en utilisant la méthode décrite précédemment: Utiliser l'URL plutôt que les entêtes HTTP.
GET /api/v1.2/openheadband
La liste des serveurs permet d'obtenir les ports utilisés par le serveur local ainsi que les autres serveurs du cluster CamTrace. Le serveur dont l'id est 0 est le serveur local.
GET /ap1/v1.2/servers
HTTP/1.1 200 OK
Content-Length: 126
Content-Type: application/json
{
"servers": [
{
"id": 0,
"name": "Local",
"host": "demo.camtrace.com",
"httpPort": 80,
"livePort": 8000,
"controlPort": 8001,
"recordsPort": 8002
}
]
}
Toutes les requêtes concernant les caméras doivent être effectuées avec un utilisateur et mot de passe. (voir la partie Identification).
GET /api/v1.2/cameras
HTTP/1.1 200 OK
Content-Type: application/json
{
"cameras": [
{
"id": 2,
"name": "Vivo8000",
...
},
{
"id": 3,
"name": "Axis214",
...
}
]
}
GET /api/v1.2/cameras/:camera_id
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 2,
"name": "Vivo8000",
"hdStream": "/live/view/2.1",
"hdId": "1",
"hdEncoding": "H264",
"hdWidth": 352,
"hdHeight": 288,
"mdStream": null,
"mdEncoding": null,
"mdWidth": null,
"mdHeight": null,
"ldStream": null,
"ldEncoding": null,
"ldWidth": null,
"ldHeight": null,
"alStream": "/live/view/2.2",
"alId": 2,
"alEncoding": "H264",
"alWidth": 352,
"alHeight": 288,
"rpStream": "/r?id=2",
"rpId": 2,
"rpEncoding": "H264",
"rpWidth": 352,
"rpHeight": 288,
"displayCode": null,
"isIgnored": false,
"isRecording": false,
"isRecordingAlarm": false,
"isRecordingForced": false,
"isRemote": false,
"isReplayEnabled": false,
"isUpsideDown": false,
"model": "vivo7000",
"playLiveAllowed": true,
"playRecordsAllowed": true,
"ptz": {
"click": true,
"areazoom": false,
"zoomback": true,
"continuous": true,
"presets": [
{
"id": "Button",
"name": "Button"
},
{
"id": "Light",
"name": "Light"
},
{
"id": "Webcam",
"name": "Webcam"
}
],
"tours": []
},
"ptzAllowed": false,
"refUrl": null,
"status": 2
}
Nom | Type | Description |
---|---|---|
id | entier | Identifiant Camtrace de la caméra. |
name | texte | Nom de la caméra sur le serveur. |
hdStream | texte | Path du flux haute qualité. |
hdId | entier | Id du flux HD |
hdEncoding | texte | Format du flux haute qualité (MPEG4, H264 ou JPEG). |
hdWidth | entier | Largeur du flux haute qualité. |
hdHeight | entier | Hauteur du flux haute qualité. |
mdStream | texte | Path du flux moyenne qualité. |
mdId | entier | Id du flux MD |
mdEncoding | texte | Format du flux moyenne qualité (MPEG4, H264 ou JPEG). |
mdWidth | entier | Largeur du flux moyenne qualité. |
mdHeight | entier | Hauteur du flux moyenne qualité. |
ldStream | texte | Path du flux basse qualité. |
ldId | entier | Id du flux LD |
ldEncoding | texte | Format du flux basse qualité (MPEG4, H264 ou JPEG). |
ldWidth | entier | Largeur du flux basse qualité. |
ldHeight | entier | Hauteur du flux basse qualité. |
alStream | texte | Path du flux d'alarme (le flux est actif en cas d'alarme). |
alId | entier | Id du flux d'alarme |
alEncoding | texte | Format du flux d'alarme (MPEG4, H264 ou JPEG). |
alWidth | entier | Largeur du flux d'alarme. |
alHeight | entier | Hauteur du flux d'alarme. |
rpStream | texte | Path du flux de relecture de dernière alarme. |
rpId | entier | Id du flux de relecture |
rpEncoding | texte | Format du flux de relecture de dernière alarme (MPEG4, H264 ou JPEG). |
rpWidth | entier | Largeur du flux de relecture de dernière alarme. |
rpHeight | entier | Hauteur du flux de relecture de dernière alarme. |
displayCode | entier | Code utilisé pour afficher la caméra dans un groupe. |
isIgnored | booléen | True si la caméra est ignoré dans la configuration. |
isRecording | booléen | True si la caméra est en enregistrement. |
isRecordingAlarm | booléen | True si la caméra est en enregistrement d'alarme. |
isRecordingForced | booléen | True si la caméra est en enregistrement forcé. |
isRemote | booléen | True si la caméra est une caméra distante (connecté si au moins un client regarde le flux). |
isReplayEnabled | booléen | True si le mode relecture de dernière alarme est activé ou pas. |
isUpsideDown | booléen | True si l'orientation de l'image est inversé. |
model | texte | Nom du modèle de la caméra. |
playLiveAllowed | booléen | True si la lecture du direct est autorisé pour l'utilisateur courant. |
playRecordsAllowed | booléen | True si la lecture des enregistrements est autorisé pour l'utilisateur courant. |
ptz.click | booléen | True si le clique dans l'image est supporté par la caméra. |
ptz.areazoom | booléen | True si le détourage est supporté par la caméra. |
ptz.zoomback | booléen | True si le retour au zoom initial est supporté par la caméra. |
ptz.continuous | booléen | True si les mouvements continues sont supportés par la caméra. |
ptz.presets | liste | Liste des positions prédéfinies. |
ptz.tours | liste | Liste des tours. |
ptzAllowed | booléen | True si les actions PTZ sont autorisés pour l'utilisateur courant. |
refUrl | texte | Path de l'image de référence si elle existe. |
status | entier | Etat de la caméra: -2 pour ignoré par le serveur, -1 pour erreur, 0 pour service vidéo éteint, 1 pour caméra en lecture seule et 2 pour tout ok. |
GET /api/v1.2/cameras/:camera_id/ref.jpg
La réponse est une image jpeg. Si l'image de référence n'existe pas alors le serveur répond 404 Not Found
sans contenu.
GET /api/v1.2/cameras/:camera_id/ptz
Nom | Paramètres associés | Description |
---|---|---|
area | x0, y0, x1, y1, w et h | Permet d'effectuer un zoom sur une zone. |
center | x, y, w et h | Permet de centrer la caméra sur un point. |
cptm | x, y, w et h | Permet de déplacer la caméra en continu. Les paramètres x et y doivent être compris entre -100 et 100. Si x et y valent 0 alors le mouvement s'arrête. |
czm | q | Permet de zoomer ou dézoomer en continu. Le paramètre q doit être compris entre -100 et 100. La valeur 0 permet d'arrêter le mouvement. |
preset | arg | Permet de positionner la caméra sur un point prédéfini. |
ptz | arg | Permet de déplacer la caméra dans une direction. |
tour | arg | Permet de lancer un tour de garde prédéfini dans la caméra. |
zoom | q | Permet de zoomer ou dézoomer. Le paramètre q doit être compris entre -10 et 10. |
Nom | Commandes associés | Description |
---|---|---|
cmd | La commande PTZ demandée. | |
x | center et cptm | Coordonnée x dans l'image. |
y | center et cptm | Coordonnée y dans l'image. |
x0 | area | Coordonnée x du point en haut à gauche. |
y0 | area | Coordonnée y du point en haut à gauche. |
x1 | area | Coordonnée x du point en bas à droite. |
y1 | area | Coordonnée y du point en bas à droite. |
w | center, cptm et area | Largeur de l'image. Cette dimension est utilisée pour situer les points (x,y ou x0,y0 ou x1,y1). |
h | center, cptm et area | Hauteur de l'image. Cette dimension est utilisée pour situer les points (x,y ou x0,y0 ou x1,y1). |
q | zoom et czm | Valeur du zoom à effectuer. Si q < 0 dézoom sinon zoom. Si q == 0 alors le zoom continu s'arrête. |
arg | ptz, preset et tour | Pour la commande ptz, arg peut prendre les valeurs 'down', 'left', 'right', 'up', 'plus' et 'minus'. Pour les commandes preset et tour, arg correspond à l'id du preset ou du tour demandé. |
$ curl -u demo:demo 'http://demo.camtrace.com/api/v1.2/cameras/2/ptz?cmd=center&w=640h=480&x=200&y=400'
$ curl -u demo:demo 'http://demo.camtrace.com/api/v1.2/cameras/2/ptz?cmd=zoom&q=4'
$ curl -u demo:demo 'http://demo.camtrace.com/api/v1.2/cameras/2/ptz?cmd=preset&arg=Porte'
Toutes les requêtes concernant les groupes doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
pour la création ou la suppression de groupes. Pour la consultation ou la modification, le profil utilisateur doit avoir le droit correspondant associé défini pour chaque groupe. Il faut également veiller à ce que l'utilisateur ait les droits de Visualisation
sur les caméras insérées dans les cycles.
Seuls les groupes pour lesquels l'utilisateur à les droits de visualisation
apparaissent dans la réponse (systématiquement tous pour le profil Admin).
GET /api/v1.2/groups
HTTP/1.1 200 OK
Content-Type: application/json
{
"groups": [
{
"id": 1,
"name": "Four",
"rows": 2,
"cols": 2,
"fullScreen": false,
"stayOnTop": false,
"displayCode": null,
"pushMode": false,
"href": "/api/v1.2/groups/1"
}
]
}
Voir la description des attributs des groupes pour plus d'informations.
GET /api/v1.2/groups/:group_id
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Four",
"rows": 2,
"cols": 2,
"fullScreen": false,
"stayOnTop": false,
"displayCode": null,
"pushMode": false,
"layout": [
[0,1],
[2,3]
],
"levels": [
{
"name": "Four 0",
"duration": 10,
"elements": [
{
"position": 0,
"serverId": 0,
"cameraId": 2,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}, {
"position": 1,
"serverId": 0,
"cameraId": 1,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}, {
"position": 2,
"serverId": 0,
"cameraId": 1,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}, {
"position": 3,
"serverId": 0,
"cameraId": 2,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}
]
}
]
}
Voir la description des attributs des groupes pour plus d'informations.
Nécessite le profil Admin
.
POST /api/v1.2/groups
Nom | Description |
---|---|
group | Contenu du groupe |
POST /api/v1.2/groups
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"group" : {
"name": "AllCamera",
"rows": 3,
"cols": 3,
"fullScreen": false,
"pushMode": false,
"layout": [
[
0,
0,
1
],
[
0,
0,
2
],
[
3,
4,
5
]
],
"levels": [
{
"name": "AllCamera 0",
"duration": 10,
"elements": [
{
"position": 0,
"serverId": 0,
"cameraId": 15,
"streamId": 45,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 1,
"serverId": 0,
"cameraId": 10,
"streamId": 30,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 2,
"serverId": 0,
"cameraId": 9,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 3,
"serverId": 0,
"cameraId": 8,
"streamId": 24,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 4,
"serverId": 0,
"cameraId": 2,
"quality": 2,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 5,
"serverId": 0,
"cameraId": 4,
"streamId": 12,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}
]
}
]
}
}
Voir la description des attributs des plans pour plus d'informations.
HTTP/1.1 201 Created
Content-length: 180
Content-Type: application/json
Location: /api/v1.2/groups/2
{
"group": {
"id": 2,
"name": "AllCamera",
"rows": 3,
"cols": 3,
"fullScreen": false,
"pushMode": false
}
}
Le lien vers la ressource crée se trouve dans le header Location
.
Nécessite le profil Admin
ou que le droit édition
soit coché pour ce groupe dans le profil utilisateur. Il existe 2 niveaux de modification d'un groupe :
PUT /api/v1.2/goups/:group_id
Pour la modification profonde :
Nom | Description |
---|---|
group | Contenu du groupe. Le contenu précédent est intégralement remplacé par le nouveau contenu. |
Pour la modification de cycle :
Nom | Description |
---|---|
levels | Definition du nouveau cycle |
PUT /api/v1.2/groups/5
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"group" : {
"name": "AllCameraBis",
"pushMode": true,
"layout": [
[
0,
0,
1
],
[
0,
0,
2
],
[
3,
4,
5
]
],
"levels": [
{
"name": "AllCamera 0",
"duration": 10,
"elements": [
{
"position": 0,
"serverId": 0,
"cameraId": 15,
"quality": 2,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 1,
"serverId": 0,
"cameraId": 10,
"streamId": 31,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 2,
"serverId": 0,
"cameraId": 9,
"streamId": 27,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 3,
"serverId": 0,
"cameraId": 8,
"quality": 3,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 4,
"serverId": 0,
"cameraId": 2,
"quality": 1,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
},
{
"position": 5,
"serverId": 0,
"cameraId": 4,
"quality": 1,
"streamId": 12,
"mode": "v",
"type": "c",
"url": null,
"showMargin": true,
"showMenu": true,
"keepRatio": true,
"alignment": 0
}
]
}
]
}
}
Voir la description des attributs des groupes pour plus d'informations.
PUT /api/v1.2/groups/5
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"levels": [
{
"name": "AllCamera 0",
"duration": 10,
"elements": [
{
"position": 0,
"serverId": 0,
"cameraId": 15,
"streamId": 46,
},
{
"position": 1,
"serverId": 0,
"cameraId": 10,
"streamId": 30,
},
{
"position": 2,
"serverId": 0,
"cameraId": 9,
"streamId": 27,
},
{
"position": 3,
"serverId": 0,
"cameraId": 8,
"streamId": 26,
},
{
"position": 4,
"serverId": 0,
"cameraId": 2,
"streamId": 10,
},
{
"position": 5,
"serverId": 0,
"cameraId": 4,
"streamId": 12,
}
]
}
]
}
HTTP/1.1 200 OK
Content-length: 180
Content-Type: application/json
Content-Location: /api/v1.2/groups/2
{
"group": {
"id": 2,
"name": "AllCameraBis",
"rows": 3,
"cols": 3,
"fullScreen": false,
"stayOnTop": false,
"displayCode": 201,
"pushMode": true
}
}
Le lien vers la ressource modifiée se trouve dans le header Content-Location
.
Nom | Type | Description | Ajout | Modification |
---|---|---|---|---|
id | entier | Identifiant Camtrace du groupe | Non | Non |
name | texte | Nom du groupe | Obligatoire | Optionnel |
pushMode | booléen | Si le groupe accepte le mode Push ou non, faux par défaut | Optionnel | Optionnel |
rows | entier | Nombre de positions (avant éventuel merge) horizontales | Obligatoire | Optionnel |
cols | entier | Nombre de positions (avant éventuel merge) verticales | Obligatoire | Optionnel |
defaultLevelDuration | entier | Durée par défaut d'un niveau | Optionnel | Optionnel |
displayCode | entier | Code vue du groupe | Optionnel | Optionnel |
layout | tableau | Positionnement des cellules, tableau à 2 dimensions de respectivement de tailles cols et rows |
Obligatoire | Optionnel |
levels | tableau | Liste des niveaux constituant l'enchaînement des flux | Obligatoire | Optionnel |
fullScreen | booléen | Sans objet | Optionnel | Optionnel |
stayOnTop | booléen | Sans objet | Optionnel | Optionnel |
comments | texte | Description ou commentaire concernant le groupe | Optionnel | Optionnel |
Layout est un tableau de rows
* cols
positions. On assigne à chaque position un identifiant numérique entier correspondant à une cellule en commençant par 0. Une cellule peut occuper plusieurs positions dans le tableau afin de faire une fusion (aussi bien verticale qu'horizontale). Le nombre de cellules final est donc inférieur ou égal à cols
* rows
. Chaque position doit recevoir un identifiant de cellule.
Liste des différents attributs qui figurent dans la définition de chaque niveau (levels
) du groupe.
Nom | Type | Description | Obligatoire |
---|---|---|---|
name | texte | Identifiant du niveau | Oui |
duration | entier | Durée d'affichage du niveau avant le passage au niveau suivant | Non |
elements | tableau | Propriétés du niveau pour chaque cellule du groupe | Oui * |
*
Attribut obligatoire mais éventuellement vide. Si une définition de cellule (identifiée par sa position) n'est pas présente dans le tableau, elle restera vide lors de l'affichage de ce niveau.
Liste des différents attributs qui figurent dans la définition de chaque cellule d'un niveau (levels
) du groupe.
Nom | Type | Description | Présence (mod. profonde) | Présence (mod. cycles) |
---|---|---|---|---|
position | entier | position de la cellule | Obligatoire | Obligatoire |
serverId | entier | Id du server dans le cas d'un cluster | Optionnelle | Optionnelle |
cameraId | entier | Identifiant Camtrace de la caméra en cas de type c |
Optionnelle | Obligatoire |
streamId | entier | Identifiant du flux correspondant à la caméra à utiliser | Obligatoire * si mode v |
Obligatoire quality | entier | Qualité du flux (1 à 3) | Optionnelle |
*
Un des 2 champs au moins doit être présent. Si les deux sont présents, le champ quality sera pris préférentiellement. A terme et dans un soucis de cohérence, le champ streamId sera obligatoire.
La modification en temps réel permet d'altérer, temporairement ou non, le comportement d'un groupe en cours de visualisation afin d'y afficher un flux de caméra. Nécessite le profil Admin
ou que le droit édition
soit coché pour ce groupe dans le profil utilisateur.
GET /api/v1.2/goups/:group_id/override
Nom | Description | Remarque |
---|---|---|
position | Identifiant de la cellule surchargée | Obligatoire |
cameraId | Identifiant de la Caméra à visionner | Facultatif |
streamId | Identifiant du flux de la Caméra à visionner | Obligatoire si cameraId est présent |
duration | Durée d'affichage en secondes avant retour à la normal du cycle pour cette cellule | Facultatif |
Si duration
est absent, la surcharge est permanente pendant toute la durée de visualisation du groupe sans recharge de la configuration. Pour annuler une surcharge d'une cellule (par exemple dans le cas des surcharge à durée indéterminée), il faut appeler la méthode pour le groupe uniquement avec le paramètre position
.
GET /api/v1.2/groups/2/override?position=0&cameraId=15&streamId=34&duration=20
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 204 No Content
Content-Type: text/html
Toutes les requêtes concernant les écrans passifs doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification).
GET /api/v1.2/screens
HTTP/1.1 200 OK
Content-Length: 161
Content-Type: application/json
{
"screens": [
{
"id": 1,
"num": 2,
"name": "PassScreen1",
"host": "10.5.0.38",
"serverId": 0,
"cameraId": 1,
"groupId": null,
"displayCode": null,
"href": "/api/v1.2/screens/1"
}
]
}
GET /api/v1.2/screens/:screen_id
HTTP/1.1 200 OK
Content-Length: 116
Content-Type: application/json
{
"id": 1,
"num": 2,
"name": "PassScreen1",
"host": "10.5.0.38",
"serverId": 0,
"cameraId": 1,
"groupId": null,
"displayCode": null
}
PUT /api/v1.2/screens/:screen_id
Nom | Description |
---|---|
serverId | L'id du serveur du cluster où trouver la caméra ou le groupe à afficher. |
cameraId | L'id de la caméra à afficher. |
groupId | L'id du groupe à afficher. |
PUT /api/v1.2/screens/1
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"screen": {
"serverId": 0,
"groupId": 2
}
}
HTTP/1.1 200 OK
Content-Length: 116
Content-Type: application/json
{
"id": 1,
"num": 2,
"name": "PassScreen1",
"host": "10.5.0.38",
"serverId": 0,
"cameraId": null,
"groupId": 2,
"displayCode": null
}
Toutes les requêtes concernant les commandes doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification).
GET /api/v1.2/exturls
HTTP/1.1 200 OK
Content-Length: 373
Content-Type: application/json
{
"exturls": [
{
"id": 7,
"name": "Allume_Etteind",
"href": "/api/v1.2/exturls/7"
},
{
"id": 2,
"name": "Allume_ProjoIR_Prise1",
"href": "/api/v1.2/exturls/2"
},
{
"id": 3,
"name": "Eteint_ProjoIR_Prise1",
"href": "/api/v1.2/exturls/3"
},
{
"id": 4,
"name": "Allume_Halogène_Prise2",
"href": "/api/v1.2/exturls/4"
},
{
"id": 5,
"name": "Eteint_Halogène_Prise2",
"href": "/api/v1.2/exturls/5"
}
]
}
GET /api/v1.2/exturls/:exturls_id
HTTP/1.1 200 OK
Content-Length: 198
Content-Type: application/json
{
"exturls": {
"id": 7,
"name": "Allume_Eteint",
"urls": [
"http://10.2.50.100/tgi/control.tgi?l=p:admin:admin&port=u1uu",
"delay=10",
"http://10.2.50.100/tgi/control.tgi?l=p:admin:admin&port=u0uu"
]
}
}
GET /api/v1.2/exturls/:exturls_id/trigger
HTTP/1.1 200 OK
Content-Length: 18
Content-Type: application/json
{"triggered": true}
Toutes les requêtes concernant les alarmes doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification) excepté pour les vignettes.
GET /api/v1.2/cameras[/:camera_id]alarms
Le paramètre camera_id
est facultatif. Si il est présent la recherche se fera uniquement sur les alarmes de la caméras correspondante sinon toutes les caméras seront prisent en compte.
HTTP/1.1 200 OK
Content-Length: 5106
Content-Type: application/json
Link: <//demo.camtrace.com/api/v1.2/cameras/alarms?limit=20&offset=20>; rel="next"
{
"alarms": [
{
"id": 219739,
"time": "2014-09-12T09:44:21Z",
"recordTime": null,
"cameraId": 21,
"description": "MOTION Alarm",
"snapshot": "/api/v1.2/cameras/alarms/219739.jpg",
"thumbnail": "/api/v1.2/cameras/alarms/219739.jpg?w=50&h=50"
},
{
"id": 219738,
"time": "2014-09-12T09:44:12Z",
"recordTime": "2014-09-12T09:44:07Z",
"cameraId": 31,
"description": "MOTION Alarm starts at 12/09/2014 at 11:44:07, with 5s pre-alarm",
"snapshot": "/api/v1.2/cameras/alarms/219738.jpg",
"thumbnail": "/api/v1.2/cameras/alarms/219738.jpg?w=50&h=50"
},
{
"id": 219737,
"time": "2014-09-12T09:44:11Z",
"recordTime": null,
"cameraId": 21,
"description": "MOTION Alarm",
"snapshot": "/api/v1.2/cameras/alarms/219737.jpg",
"thumbnail": "/api/v1.2/cameras/alarms/219737.jpg?w=50&h=50"
}
]
}
Nom | Type | Description |
---|---|---|
q | texte | Filtre à appliquer sur le champ description . |
from | texte | Date GMT de début au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
to | texte | Date GMT de fin au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
limit | entier | Nombre de résultats demandés. |
offset | entier | Position dans l'ensemble des résultats après application des filtres. Zero correspond aux alarmes les plus récentes. |
# Toutes les alarmes depuis 14h00 le 12 septembre 2014:
$ curl -u demo:demo 'http://demo.camtrace.com/api/v1.2/cameras/alarms?from=2014-09-12T14:00:00Z'
# Toutes les alarmes de la caméra d'id 2 le 12 septembre 2014:
$ curl -u demo:demo 'http://demo.camtrace.com/api/v1.2/cameras/2/alarms?from=2014-09-12T00:00:00Z&to=2014-09-12T23:59:59Z'
GET /api/v1.2/cameras/alarms/trigger?cameraId=:camera_id1[,:camera_id2,...,:camera_idN]
Le paramètre camera_id1
est obligatoire et indique l'identifiant de la caméra dont l'alarme est déclenchée. Les paramètres :camera_id2,...,:camera_idN
sont optionnels et permettent de déclencher plusieurs alarmes simultanément.
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html
GET /api/v1.2/cameras/alarms/untrigger?cameraId=:camera_id1[,:camera_id2,...,:camera_idN]
Le paramètre camera_id1
est obligatoire et indique l'identifiant de la caméra dont l'alarme est acquittée. Les paramètres :camera_id2,...,:camera_idN
sont optionnels et permettent d'acquitter plusieurs alarmes simultanément.
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html
Toutes les requêtes concernant les exports doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
ou Protection
. Dans ce dernier cas, il doit également avoir les droits de visualisation sur la caméra correspondant à l'export.
GET /api/v1.2/exports/disks
Aucun
GET /api/v1.2/exports/disks
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{
"disks": [
{
"id": 1,
"name": "newVol",
"fstype": "ext4",
"totalSpace": 32737501184,
"freeSpace": 32737501184,
}
]
}
GET /api/v1.2/exports
Nom | Description |
---|---|
CameraId | Le ou les id de camera séparés par des , pour lesquelles trouver les exports (optionnel) |
from | Filtre sur une date de début de recherche au format ISO8601 (optionnel) |
to | Filtre sur une date de fin de recherche au format ISO8601 (optionnel) |
GET /api/v1.2/exports?cameraId=1,2&from=2018-09-17T13:19:57Z&to=2018-09-18T00:00:00Z
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{
"exports": [
{
"id": 5,
"cameraId": 1,
"diskId": null,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:32:56Z",
"type": "a",
"comment": "",
"downloadUrl": "/api/v1.2/exports/5/download",
"size": 0,
"p100": 100,
"md5sum": null,
"archived": false,
"createdAt": "2018-09-17T13:36:37Z",
"url": "/api/v1.2/exports/5"
},
{
"id": 6,
"cameraId": 1,
"diskId": null,
"from": "2018-09-17T13:19:57Z",
"to": "2018-09-17T13:39:57Z",
"type": "r",
"comment": "",
"downloadUrl": "/api/v1.2/exports/6/download",
"size": 0,
"p100": 100,
"md5sum": null,
"archived": false,
"createdAt": "2018-09-17T13:40:10Z",
"url": "/api/v1.2/exports/6"
}
]
}
Nom | Type | Description |
---|---|---|
id | entier | Identifiant Camtrace de l'export |
cameraId | entier | Identifiant Camtrace de la caméra |
diskId | entier | Identifiant Camtrace du support externe sur lequel est stocké l'export. Si ce champ est null, l'export est stocké dans la répertoire monté par défaut sur le serveur) |
from | date | Date ISO8021 de début de la séquence |
to | date | Date ISO8021 de fin de la séquence |
type | char | Identifiant du type d'export |
comment | texte | Commentaire sur l'export |
downloadUrl | texte | URL de téléchargement de l'export |
size | entier | Taille de l'export en octets |
p100 | entier | Pourcentage de creation de l'export (vaut 100 quand la création de l'export est terminée) |
md5sum | text | Hash MD5 du fichier d'export |
archived | booleen | Indique si l'export a été archivé ou non |
createdAt | texte | Date ISO8021 de création de l'export |
url | texte | URL de récupération des détails de l'export voir Détails d'un export |
GET /api/v1.2/exports/:export_id
Aucun
GET /api/v1.2/exports/5
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{
"export": {
"id": 5,
"cameraId": 1,
"diskId": null,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:32:56Z",
"type": "a",
"comment": "",
"downloadUrl": "/api/v1.2/exports/5/download",
"size": 0,
"p100": 100,
"md5sum": null,
"archived": false,
"createdAt": "2018-09-17T13:36:37Z",
"url": "/api/v1.2/exports/5"
}
}
Voir la description des attributs de l'export pour plus d'informations.
POST /api/v1.2/exports
Nom | Description |
---|---|
CameraId | L'id de camera pour laquelle l'export est créé |
from | Date de début de la séquence au format ISO8601 |
to | Date de fin de la séquence au format ISO8601 |
type | Type d'export (optionnel) : vaut "a" (alarme) ou "r" (régulier), "r" est la valeur par défaut |
diskId | id Camtrace de support (disk) externe sur lequel créer l'export (optionnel) |
comment | un texte de commentaire concernant l'export (optionnel) |
POST /api/v1.2/exports
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"export": {
"cameraId": 1,
"from": "2018-09-17T13:24:25Z"
"to": "2018-09-17T13:26:00Z"
}
}
HTTP/1.1 201 CREATED
Content-Type: application/json
{
"export": {
"id": 8,
"cameraId": 1,
"diskId": null,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:26:00Z",
"type": "r",
"comment": "",
"downloadUrl": "/api/v1.2/exports/8/download",
"size": 0,
"p100": 0,
"md5sum": null,
"archived": false,
"createdAt": "2018-09-17T13:36:37Z",
"url": "/api/v1.2/exports/8"
}
}
Voir la description des attributs de l'export pour plus d'informations.
GET /api/v1.2/exports/:export_id/download
Aucun
GET /api/v1.2/exports/8/download
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/zip
Cet appel permet de calculer le hash MD5 du fichier export sur le disque
GET /api/v1.2/exports/:export_id/md5sum
Aucun
GET /api/v1.2/exports/8/md5sum
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{
"md5sum": "d41d8cd98f00b204e9800998ecf8427e"
}
DELETE /api/v1.2/exports/:export_id
Aucun
DELETE /api/v1.2/exports/8
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 204 NO CONTENT
Content-Type: text/html
Cet appel permet d'archiver l'export et supprime le fichier export sur le disque concerné.
PUT /api/v1.2/exports/:export_id
Nom | Description |
---|---|
archived | ce champ doit prendre un équivalent de "true" pour archiver l'export |
PUT /api/v1.2/exports/9
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"export": {
"archived": 1,
}
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"export": {
"id": 9,
"cameraId": 1,
"diskId": null,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:32:56Z",
"type": "a",
"comment": "",
"downloadUrl": "/api/v1.2/exports/9/download",
"size": 0,
"p100": 100,
"md5sum": null,
"archived": true,
"createdAt": "2018-09-17T13:36:37Z",
"url": "/api/v1.2/exports/9"
}
}
Voir la description des attributs de l'export pour plus d'informations.
Toutes les requêtes concernant les séquences protégées doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir les droits de visualisation sur la caméra correspondant à la séquence à protéger.
L'utilisateur doit avoir un profil avec le niveau spécifique Admin
ou Protection
.
POST /api/v1.2/precords
Nom | Description |
---|---|
CameraId | L'id de camera pour laquelle la séquence doit être protégée |
from | Date de début de la séquence au format ISO8601 |
to | Date de fin de la séquence au format ISO8601 |
type | Type d'enregistrement (optionnel) : vaut "a" (alarme) ou "r" (régulier), "r" est la valeur par défaut |
comment | commentaire associé à la séquence protégée (optionnel) |
POST /api/v1.2/precords
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"precord": {
"cameraId": 1,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:26:00Z",
"comment": "Test de séquence protégée"
}
}
HTTP/1.1 201 CREATED
Content-Type: application/json
{
"precord": {
"cameraId": 1,
"from": "2018-09-17T13:24:25Z",
"to": "2018-09-17T13:26:00Z",
"type": "r"
}
}
Toutes les requêtes concernant les plans doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
pour la création ou la suppression de plans. Pour la consultation ou la modification, le profil utilisateur doit avoir le droit correspondant associé défini pour chaque plan. Les éléments (caméras et presets ptz associés, groupes, commandes, écrans passifs ou plans) pour lesquels l'utilisateur n'a pas les droits de visualisation n'apparaîtront pas sur le plan, même si l'utilisateur a le droit de visualisation sur le plan en question. Pour que ce service soit disponible, le serveur Camtrace doit disposer d'une licence permettant l'utilisation des plans.
Seuls les plans pour lesquels l'utilisateur à les droits de visualisation apparaissent dans la réponse (systématiquement tous pour le profil Admin
)
GET /api/v1.2/maps
HTTP/1.1 200 OK
Content-Type: application/json
{
"maps": [
{
"uuid": "edeb519a-9e02-4766-84bc-13dea79b61c8",
"name": "Parking",
"version": 4,
"detailUrl": "/api/v1.2/maps/edeb519a-9e02-4766-84bc-13dea79b61c8"
},
{
"uuid": "5f20a627-c915-42be-895e-865101763dc0",
"name": "Entrée",
"version": 9,
"detailUrl": "/api/v1.2/maps/5f20a627-c915-42be-895e-865101763dc0"
}
]
}
Nécessite le profil Admin
ou que le droit visualisation
soit coché pour ce plan dans le profil utilisateur.
GET /api/v1.2/maps/:uuid
HTTP/1.1 200 OK
Content-Type: application/json
{
"map" : {
"uuid": "edeb519a-9e02-4766-84bc-13dea79b61c8",
"name": "Parking",
"version": 4,
"scale": 1,
"items": [
{
"posX": 336,
"posY": 279,
"type": "camera",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "15",
"node": "0",
"angle": 15.489200556287,
"range": 327.07491496598,
"direction": 17.018305445794
}
},
{
"posX": 1310,
"posY": 519,
"type": "map",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "5f20a627-c915-42be-895e-865101763dc0"
}
}
],
"backgrounds": [
{
"posX": 622,
"posY": 154,
"image": "<binary data>",
"width": 1175,
"height": 744,
"zIndex": 0
}
]
}
}
Voir la description des attributs des plans pour plus d'informations.
Nécessite le profil Admin
ou que le droit visualisation
soit coché pour ce plan dans le profil utilisateur. Seuls les éléments (caméras et presets ptz associés, groupes, commandes, écrans passifs ou plans) pour lequel l'utilisateur à le droit visualisation
seront renvoyés.
GET /api/v1.2/maps/:uuid/items
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"posX": 336,
"posY": 279,
"type": "camera",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "15",
"node": "0",
"angle": 15.489200556287,
"range": 327.07491496598,
"direction": 17.018305445794
}
},
{
"posX": 1310,
"posY": 519,
"type": "map",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "5f20a627-c915-42be-895e-865101763dc0"
}
}
]
}
Voir la description des attributs des plans pour plus d'informations.
Nécessite le profil Admin
.
POST /api/v1.2/maps
Nom | Description |
---|---|
map | Contenu du plan |
POST /api/v1.2/maps
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"map" : {
"name": "Batiment 2",
"items": [
{
"posX": 332,
"posY": 271,
"type": "camera",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "5",
"node": "0",
"angle": 16.49,
"range": 288.1,
"direction": 32
}
},
{
"posX": 1310,
"posY": 519,
"type": "command",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "1"
}
}
],
"backgrounds": [
{
"posX": 20,
"posY": 19,
"image": "<binary data>",
"width": 1280,
"height": 770,
"zIndex": 0
}
]
}
Voir la description des attributs des plans pour plus d'informations.
HTTP/1.1 201 CREATED
Content-Type: application/json
{
"map": {
"uuid": "6d20a627-d916-41be-835a-865101763ef5",
"version": 1,
"name": "Batiment 2",
"detailUrl": "/api/v1.2/maps/6d20a627-d916-41be-835a-865101763ef5"
}
}
Nécessite le profil Admin
ou que le droit édition
soit coché pour ce plan dans le profil utilisateur.
PUT /api/v1.2/maps/:uuid
Nom | Description |
---|---|
map | Contenu du plan. Le contenu précédent est intégralement remplacé par le nouveau contenu. |
PUT /api/v1.2/maps/6d20a627-d916-41be-835a-865101763ef5
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"map" : {
"name": "Batiment 2",
"scale": 1.2,
"items": [
{
"posX": 332,
"posY": 271,
"type": "camera",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "5",
"node": "0",
"angle": 16.49,
"range": 288.1,
"direction": 32
}
},
{
"posX": 888,
"posY": 412,
"type": "camera",
"width": 40,
"height": 40,
"zIndex": 1,
"properties": {
"id": "6",
"node": "0",
"angle": 16.49,
"range": 288.1,
"direction": 256
}
},
{
"posX": 1310,
"posY": 519,
"type": "command",
"width": 60,
"height": 60,
"zIndex": 1,
"properties": {
"id": "1"
}
}
],
"backgrounds": [
{
"posX": 20,
"posY": 19,
"image": "<binary data>",
"width": 1280,
"height": 770,
"zIndex": 0
}
]
}
Voir la description des attributs des plans pour plus d'informations.
HTTP/1.1 200 OK
Content-Type: application/json
{
"map": {
"uuid": "6d20a627-d916-41be-835a-865101763ef5",
"version": 2,
"name": "Batiment 2",
"detailUrl": "/api/v1.2/maps/6d20a627-d916-41be-835a-865101763ef5"
}
}
DELETE /api/v1.2/maps/:uuid
Aucun
DELETE /api/v1.2/maps/6d20a627-d916-41be-835a-865101763ef5
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 204 NO CONTENT
Content-Type: text/html
Nom | Type | Description | Ajout | Modification |
---|---|---|---|---|
uuid | uuid | Identifiant Camtrace du plan | Non | Non |
name | texte | Identifiant Camtrace de la caméra | Obligatoire | Obligatoire |
scale | décimal | Facteur de zoom global pour tous les éléments du plan | Optionnel | Optionnel |
version | entier | Numéro de version autoincrémental | Non | Non |
items | tableau | Liste des éléments composant le plan | Obligatoire * | Optionnel |
backgrounds | tableau | Liste des images constituant le fond du plan | Obligatoire * | Optionnel |
*
Attribut obligatoire mais éventuellement vide.
Ce sont les différents éléments susceptibles d'être contenus dans le tableau items
d'un plan
Nom | Description | Propriétés |
---|---|---|
camera | Représente une caméra déclarée sur le serveur Camtrace (ou hiérarchique) | id, node, angle, range, direction, items |
group | Représente un groupe déclaré sur le serveur Camtrace | id |
command | Représente une commande déclarée sur le serveur Camtrace | id, node |
map | Représente un plan déclaré sur le serveur Camtrace | id |
screen | Représente un écran passif déclaré sur le serveur Camtrace | id |
Ce sont les différents éléments susceptibles d'être contenus dans le tableau items
d'une caméra.
Nom | Description | Propriétés |
---|---|---|
preset | Représente un preset ptz d'une caméra donnée | id, node |
Liste des différents attributs associés aux éléments (items) d'un plan ou d'une caméra.
Nom | Type | Description | Obligatoire |
---|---|---|---|
type | texte | Type d'élément | Oui |
posX | entier | Abscisse absolue (point haut gauche) de l'élément dans le plan en pixels | Oui |
posY | entier | Ordonnée absolue (point haut gauche) de l'élément dans le plan en pixels | Oui |
width | entier | Largeur de l'élément en pixels | Oui |
height | entier | Hauteur de l'élément en pixels | Oui |
zIndex | décimal | Profondeur relative de l'élément | Oui |
Liste des différents attributs associés aux fonds (backgrounds) d'un plan.
Nom | Type | Description | Obligatoire |
---|---|---|---|
posX | entier | Abscisse absolue (point haut gauche) de l'élément dans le plan en pixels | Oui |
posY | entier | Ordonnée absolue (point haut gauche) de l'élément dans le plan en pixels | Oui |
width | entier | Largeur de l'élément en pixels | Oui |
height | entier | Hauteur de l'élément en pixels | Oui |
zIndex | décimal | Profondeur relative de l'élément | Oui |
image | binaire | image, propriété de fond de plan | Oui |
Liste des attributs possibles pour le champ propriétés (properties
) des éléments (items
) d'un plan ou d'une caméra.
Nom | Type | Description | Obligatoire |
---|---|---|---|
id | entier ou uuid | Oui | |
node | entier | serveur sur lequel est situé l'élément | Oui |
angle | décimal | angle du faisceau de la caméra en degrés | Oui |
range | décimal | profondeur du faisceau de la caméra en pixels | Oui |
direction | décimal | direction de la caméra en degrés | Oui |
items | tableau | sous-éléments de l'élément | Non |
Toutes les requêtes concernant les sélections doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
pour la création, la modification ou la suppression de sélections. Tous les utilisateurs peuvent voir une sélection mais les éléments (caméras et presets ptz associés, groupes, commandes, écrans passifs ou plans) pour lesquels l'utilisateur n'a pas les droits de visualisation n'apparaîtront pas lors de la visualisation de la sélection.
GET /api/v1.2/folders
Nom | Description |
---|---|
details | Booléen permettant de recevoir directement tous les éléments des sélections quand sa valeur est à vrai (Optionnel, faux par défaut) |
HTTP/1.1 200 OK
Content-Type: application/json
{
"folders": [
{
"uuid": "edeb519a-9e02-4766-84bc-13dea79b61c8",
"name": "Sélection 1",
"detailUrl": "/api/v1.2/folders/edeb519a-9e02-4766-84bc-13dea79b61c8"
},
{
"uuid": "5f20a627-c915-42be-895e-865101763dc0",
"name": "Sélection 2",
"detailUrl": "/api/v1.2/folders/5f20a627-c915-42be-895e-865101763dc0"
}
]
}
GET /api/v1.2/folders/:uuid
HTTP/1.1 200 OK
Content-Type: application/json
{
"folder" : {
"uuid": "edeb519a-9e02-4766-84bc-13dea79b61c8",
"name": "Sélection 1",
"regex": {
"id": 1,
"name": "critères 1",
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [6,7]
}
},
"items": [
{
"serverId": 0,
"type": "map",
"uuid": "cc34693f-1e02-336f-34ac-3367d67c31fd",
"weight": -25
},
{
"type": "folder",
"name": "folder1",
"weight": -12,
"items": [
{
"serverId": 0,
"type": "camera",
"id": 1,
"weight": 0
},
{
"serverId": 0,
"type": "map",
"uuid": "ab34693c-9e02-556f-34aa-3467d67c88ec",
"weight": 0
}
]
},
{
"name": "folder2",
"type": "folder",
"weight": 3,
"items": [
{
"serverId": 0,
"type": "camera",
"id": 1,
"weight": 1
},
{
"serverId": 0,
"type": "group",
"id": 1,
"weight": 2
},
{
"type": "folder",
"name": "folder21",
"weight": 3,
"items": [
]
}
]
}
]
}
}
Voir la description des attributs des sélections pour plus d'informations.
Nécessite le profil Admin
.
POST /api/v1.2/folders
Nom | Description |
---|---|
folder | Contenu d'une sélection |
POST /api/v1.2/folders
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"folder" : {
"name": "Sélection 3",
"regexId": 1,
"items": [
{
"type": "map",
"uuid": "cc34693f-1e02-336f-34ac-3367d67c31fd"
},
{
"type": "folder",
"name": "folder1",
"weight": -50,
"items": [
{
"serverId": 1,
"type": "camera",
"id": 1
},
{
"type": "map",
"uuid": "ab34693c-9e02-556f-34aa-3467d67c88ec",
"weight": 10
},
{
"type": "group",
"id": 2
}
]
}
]
}
}
Voir la description des attributs des sélections pour plus d'informations.
HTTP/1.1 201 CREATED
Content-Type: application/json
{
"folder": {
"uuid": "8b6aa627-e455-aabf-4573-865101745dfc",
"name": "Sélection 3",
"detailUrl": "/api/v1.2/folders/8b6aa627-e455-aabf-4573-865101745dfc"
}
}
Nécessite le profil Admin
.
PUT /api/v1.2/folders/:uuid
Nom | Description |
---|---|
folder | Contenu de le sélection. Le contenu du champ items précédent est intégralement remplacé par le nouveau contenu. |
PUT /api/v1.2/folders/8b6aa627-e455-aabf-4573-865101745dfc
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"folder" : {
"regexId": 2,
"items": [
{
"type": "map",
"uuid": "cc34693f-1e02-336f-34ac-3367d67c31fd"
},
{
"type": "folder",
"name": "folder1",
"weight": -50,
"items": [
{
"serverId": 1,
"type": "camera",
"id": 1
},
{
"type": "map",
"uuid": "ab34693c-9e02-556f-34aa-3467d67c88ec",
"weight": 10
},
{
"type": "group",
"id": 2
}
]
},
{
"type": "folder",
"name": "folder2",
"weight": -60,
"items": [
]
}
]
}
}
Voir la description des attributs des sélections pour plus d'informations.
HTTP/1.1 200 OK
Content-Type: application/json
{
"folder": {
"uuid": "8b6aa627-e455-aabf-4573-865101745dfc",
"name": "Sélection 3",
"detailUrl": "/api/v1.2/folders/8b6aa627-e455-aabf-4573-865101745dfc"
}
}
Nécessite le profil Admin
.
PATCH /api/v1.2/folders
Nom | Description |
---|---|
folders | Tableau de couplesuuid / weight à modifier. |
PATCH /api/v1.2/folders
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"folders" : [
{
"uuid": "d8590675-ade4-4fa2-9b8f-b9a64ead479d",
"weight": 12
},
{
"uuid": "add3e16f-bf23-438e-ac0b-b216277918e7",
"weight": -3
}
]
}
HTTP/1.1 204 NO CONTENT
Content-Type: application/json
Nécessite le profil Admin
.
DELETE /api/v1.2/folders/:uuid
Aucun
DELETE /api/v1.2/folders/8b6aa627-e455-aabf-4573-865101745dfc
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 204 NO CONTENT
Content-Type: text/html
Nom | Type | Description | Ajout | Modification |
---|---|---|---|---|
uuid | uuid | Identifiant Camtrace de la sélection | Non | Non |
name | texte | Nom de la sélection | Obligatoire | Optionnel |
regexId | entier | Id de du critère de tri associée | Optionnel | Optionnel |
regex | objet | Paramètres du critère de tri associée | Non | Non |
items | tableau | Liste des éléments composant le plan | Obligatoire * | Optionnel |
*
Attribut obligatoire mais éventuellement vide.
Ce sont les différents types d'éléments contenus dans le tableau items
de la sélection
Nom | Description |
---|---|
folder | Représente une sous sélection de la sélection, les sous sélections peuvent s'imbriquer en plusieurs niveaux |
camera | Représente une caméra déclarée sur le serveur Camtrace (ou hiérarchique) |
group | Représente un groupe déclaré sur le serveur Camtrace |
map | Représente un plan déclaré sur le serveur Camtrace |
screen | Représente un écran passif déclaré sur le serveur Camtrace |
device | Représente un connecteur metadata |
Liste des différents attributs associés aux éléments (items) d'une sélection
Nom | Type | Description | Type | Présence |
---|---|---|---|---|
type | texte | Type d'élément | Tous | Obligatoire |
serverId | entier | Id du serveur ou se trouve l'élément | camera, group, map, screen, device | Optionnel |
name | texte | Nom de l'élément | folder | Obligatoire |
id | entier | Identifiant de l'élément | camera, group, screen | Obligatoire |
uuid | uuid | Identifiant unique de l'élément | map, device | Obligatoire |
weight | entier | Poids relatif de l'élément | Tous | Optionnel |
items | tableau | Liste des éléments contenus dans l'élément | folder | Obligatoire * |
*
Attribut obligatoire mais éventuellement vide.
Toutes les requêtes concernant les critères de tris doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
pour la création, la modification ou la suppression des critères de tris.
GET /api/v1.2/regex
Aucun
HTTP/1.1 200 OK
Content-Type: application/json
{
"regex": [
{
"id": 1,
"name": "Critères 1",
"default": false,
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [6,7]
}
},
{
"id": 2,
"name": "Critères 2",
"default": true,
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [2,1]
}
}
]
}
Voir la description des attributs des critères de tris pour plus d'informations.
Nécessite le profil Admin
.
POST /api/v1.2/regex
Nom | Description |
---|---|
regex | Définition du critère de tri |
POST /api/v1.2/regex
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"regex" : {
"name": "Critères 3",
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [3,4]
}
}
}
Voir la description des attributs des critères de tris pour plus d'informations.
HTTP/1.1 201 CREATED
Content-Type: application/json
{
"regex": {
"id": 3,
"name": "Critères 3",
"default": false,
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [3,4]
}
}
}
Nécessite le profil Admin
.
PUT /api/v1.2/regex/:id
Nom | Description |
---|---|
regex | Définition du critère de tri. Le contenu du champ params précédent est intégralement remplacé par le nouveau. |
PUT /api/v1.2/regex/3
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"regex" : {
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [3,5]
}
}
}
Voir la description des attributs des critères de tris pour plus d'informations.
HTTP/1.1 200 OK
Content-Type: application/json
{
"regex": {
"id": 3,
"name": "Critères 3",
"default": false,
"params": {
"value": "([-]*)-([^-]*)-([^-]*)-([^_]*)_([^_]*)_([^ ]*) ([^_]*)",
"group": [3,5]
}
}
}
Nécessite le profil Admin
.
DELETE /api/v1.2/regex/:id
Aucun
DELETE /api/v1.2/regex/3
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 204 NO CONTENT
Content-Type: text/html
Nom | Type | Description | Ajout | Modification |
---|---|---|---|---|
id | entier | Identifiant du critère de recherche | Non | Non |
name | texte | Nom du critère de recherhce | Obligatoire | Optionnel |
default | booléen | tri par défaut du serveur (unique) | Optionnel (false par défaut) | Optionnel |
params | objet | Liste des paramètres du tri | Obligatoire | Optionnel |
Liste des différents attributs constituant les éléments (items) des tris.
Nom | Type | Description | Présence |
---|---|---|---|
value | texte | Expression régulière constituée d'un ou plusieurs groupes définissant les critères de tris | Obligatoire |
group | tableau | liste ordonnée des index des différents groupes de value à prendre en compte pour la recherche |
Obligatoire |
Toutes les requêtes concernant le monitoring doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir un profil avec le niveau spécifique Admin
ou Monitor
.
Renvoie les informations concernant le license actuellement en cours pour le serveur.
GET /api/v1.2/license
Aucun
GET /api/v1.2/license
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"license": {
"active_modules": [
"interface_cluster",
"local_video_relay",
"maps",
"messages",
"metadata",
"record",
"scenarios",
"tags",
"video_relay"
],
"build": 20210531,
"current_metadata_sources": 1,
"current_video_sources": 9,
"hardware_id": "B6CE4BD4",
"license_creation_date": "20210210",
"license_valid": true,
"licensed_to": "CAMTRACE TEST",
"max_metadata_sources": 30,
"max_screens": 30,
"max_space_usage": 100,
"max_video_sources": 30,
"postal_code": "92100",
"serial_number": "1117",
"upgrade_expiration_date": "20220225",
"uuid": "aa0cd092-555f-4b83-8f73-386dbc6eebb7",
"version": "8.15.2.0"
}
}
Nécessite le profil Admin
.
POST /api/v1.2/license
Nom | Description |
---|---|
license | Le contenu du fichier license |
POST /api/v1.2/license
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"license" : "contenu_du_fichier_license"
}
HTTP/1.1 201 CREATED
Content-Type: application/json
Renvoie les informations matérielles (hardware) du serveur.
GET /api/v1.2/sysinfo
Aucun
GET /api/v1.2/sysinfo
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"CPU": [
"Intel(R) Pentium(R) Gold G5400 CPU @ 3.70GHz"
],
"Memory": [
"3,9G"
],
"Network": [
"I211 Gigabit Network Connection (enp1s0)",
"I211 Gigabit Network Connection (enp2s0)"
],
"Controller": [
"Cannon Lake PCH SATA AHCI Controller"
],
"Disk": [
"WDC WD20EFRX-68EUZN0 (sda)",
"FORESEE 128GB SSD (sdb)"
],
"Partition": [
"1863GiB WDC WD20EFRX-68E (/dev/sda)",
"93MiB Windows FAT volume (/dev/sdb1)",
"477MiB EXT4 volume (/dev/sdb2)",
"14GiB EXT4 volume (/dev/sdb3)",
"14GiB EXT4 volume (/dev/sdb4)",
"14GiB EXT4 volume (/dev/sdb5)",
"3814MiB Linux swap volume (/dev/sdb6)",
"70GiB EXT4 volume (/dev/sdb7)"
]
}
L'état de santé du serveur est constitué de 3 sections différentes: recorder
qui surveille le service vidéo et la base de données, cameras
qui surveille l'état des caméras et de l'enregistrement vidéo sur le disque et hardware
qui surveille l'état du matériel serveur.
GET /ap1/v1.2/health
Aucun
HTTP/1.1 200 OK
Content-Length: 126
Content-Type: application/json
{
"health":
{
"recorder": false,
"cameras": false,
"hardware": true,
"errorDetails":
{
"recorder": [
"Video service is inactive"
],
"cameras": [
{
"id": 1,
"name": "Caméra 1",
"streamName": "Flux HD",
"error": "Pas d'images"
}
]
}
}
}
Nom | Type | Description |
---|---|---|
recorder | booléen | état de service video (scamd) et de la base de données |
cameras | booléen | état des caméras et de l'enregistrement sur disque |
hardware | booléen | État matériel du serveur et notamment le rapport SMART |
errorDetails | tableau | Détail des erreurs éventuelles par section (recorder, cameras, hardware) |
Toutes les requêtes concernant la consulation de journeaux doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir le profil spécifique Admin
.
Nécessite le profil Admin
.
GET /api/v1.2/users/actions
GET /api/v1.2/users/:id/actions
Nom | Type | Description |
---|---|---|
from | texte | Date GMT de début au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
to | texte | Date GMT de fin au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
limit | entier | Nombre de résultats demandés. |
offset | entier | Position dans l'ensemble des résultats après application des filtres. Zero correspond aux alarmes les plus récentes. |
POST /api/v1.2/users/1/actions?from=2021-07-17T09:38:53Z&to=2021-07-17T10:43:53Z
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"actions": [
{
"id": 927,
"userId": 1,
"userName": "admin",
"dateTime": "2021-07-17T10:43:53Z",
"ipAddress": "102.156.162.9",
"action": "LogUserLogin",
"description": "Identification de l'utilisateur."
},
{
"id": 926,
"userId": 1,
"userName": "admin",
"dateTime": "2021-07-17T10:02:06Z",
"ipAddress": "102.156.162.9",
"action": "LogUserLogin",
"description": "Identification de l'utilisateur."
},
{
"id": 925,
"userId": 1,
"userName": "admin",
"dateTime": "2021-07-17T10:01:21Z",
"ipAddress": "102.156.162.9",
"action": "LogUserLogin",
"description": "Identification de l'utilisateur."
},
{
"id": 924,
"userId": 1,
"userName": "admin",
"dateTime": "2021-07-17T09:39:24Z",
"ipAddress": "102.156.162.9",
"action": "LogUserLogin",
"description": "Identification de l'utilisateur."
}
],
"paging": {
"total": 4,
"offset": 4,
"limit": 0
}
}
Nécessite le profil Admin
.
GET /api/v1.2/cameras/connections
GET /api/v1.2/cameras/:id/connections
Nom | Type | Description |
---|---|---|
id_cams | liste | Liste d'identifiants de caméras séparées par des virgules |
connected | booléen | Etat de la caméra : connectée (vrai) ou déconnectée (faux) |
from | texte | Date GMT de début au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
to | texte | Date GMT de fin au format ISO-8601 (voir Wikipedia, ex: 2014-09-12T06:00:00Z). |
limit | entier | Nombre de résultats demandés. |
offset | entier | Position dans l'ensemble des résultats après application des filtres. Zero correspond aux alarmes les plus récentes. |
POST /api/v1.2/cameras/2/connections?limit=4
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"connections": [
{
"id": 207,
"cameraId": 2,
"cameraName": "CCDM8EF01_24",
"streamId": 4,
"streamName": "MsMediaProfile1",
"dateTime": "2021-07-13T09:41:08Z",
"connected": true
},
{
"id": 208,
"cameraId": 2,
"cameraName": "CCDM8EF01_24",
"streamId": 6,
"streamName": "MsMediaProfile3",
"dateTime": "2021-07-13T09:41:08Z",
"connected": true
},
{
"id": 209,
"cameraId": 2,
"cameraName": "CCDM8EF01_24",
"streamId": 5,
"streamName": "MsMediaProfile2",
"dateTime": "2021-07-13T09:41:08Z",
"connected": true
},
{
"id": 194,
"cameraId": 2,
"cameraName": "CCDM8EF01_24",
"streamId": 4,
"streamName": "MsMediaProfile1",
"dateTime": "2021-07-12T16:10:08Z",
"connected": true
}
],
"paging": {
"total": 41,
"offset": 4,
"limit": 4
}
}
Nécessite le profil Admin
.
GET /api/v1.2/system/logs
Nom | Type | Description |
---|---|---|
all | booléen | Renvoyer également les logs d'information. |
search | text | Recherche search dans les logs. |
negative | booléen | search ne doit pas être présent dans les logs. |
noCase | booléen | Ne pas tenir compte de la casse pour search . |
regex | booléen | search est une expréssion régulière. |
POST /api/v1.2/system/logs?limit=4
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
{
"systemLogs": [
{
"dateTime": "2021-07-26T17:47:30+02:00",
"name": "Connect@Connection.cpp",
"type": "WARNING",
"event": "connect() to 8383838:4000: Invalid argument [22]"
},
{
"dateTime": "2021-07-26T17:47:12+02:00",
"name": "SetStatus@SourceStream.cpp",
"type": null,
"event": "[4.11] stream status : connected and received frames"
},
{
"dateTime": "2021-07-26T17:47:11+02:00",
"name": "CheckTimeout@SourceStream.cpp",
"type": null,
"event": "[4.11] WARNING: no frame received for 10 seconds"
},
...
],
"paging": {
"total": 2102,
"offset": 20,
"limit": 20
}
}
Toutes les requêtes concernant les tâches doivent être effectuées avec un utilisateur et mot de passe (voir la partie Identification). L'utilisateur doit avoir le profil spécifique Admin
.
La liste des tâches permet de connaitres quelles sont les tâches serveur qui sont en cours d'exécution, ont été effectuées ou sont en attente.
GET /ap1/v1.2/tasks
Nom | Description | Remarque |
---|---|---|
type | Type de tâche | Facultatif. Vvaleurs possibles : 'concat', 'postindex', 'purgecam', 'repaircam','sum','kill' |
status | Statut de la tâche | Facultatif. Valeurs possibles : 'new', 'running', 'aborted', 'killed', 'done' |
GET /api/v1.2/tasks?type=concat
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Length: 2423
Content-Type: application/json
{
"tasks": [
{
"id": 26,
"type": "concat",
"status": "done",
"updated": "2021-10-01T14:18:15Z",
"progress": "100%",
"userId": 1,
"userName": "Admin"
},
{
"id": 25,
"type": "concat",
"status": "done",
"updated": "2021-09-29T16:36:35Z",
"progress": "100%",
"userId": 12,
"userName": "norbert_t"
},
{
"id": 24,
"type": "concat",
"status": "done",
"updated": "2021-09-29T16:36:27Z",
"progress": "100%",
"userId": 1,
"userName": "Admin"
},
...
La récupération d'une tâche permet d'obtenir ses informations en fournissant l'identifiant de la tâche.
GET /api/v1.2/tasks/:id
GET /api/v1.2/tasks/26
Authorization: Basic YWRtaW46Y2FtdHJhY2U=
Content-Type: application/json
HTTP/1.1 200 OK
Content-Length: 2423
Content-Type: application/json
{
"id": 26,
"type": "concat",
"status": "done",
"updated": "2021-10-01T14:18:15Z",
"progress": "100%",
"userId": 1,
"userName": "Admin"
}