Le registre de caméras connecte les caméras de sécurité en réseau, aidant ainsi les autorités à accéder aux preuves Genetec Clearance™. Il s'intègre à l'aide d'un protocole d'agent spécifique, compatible avec le cloud ou sur site, permettant l'affichage et l'extraction automatique des médias en fonction des demandes de registre.
Le protocole de registre est une structure de traitement des tâches basée sur les agents dans laquelle les agents (votre intégration) agissent en tant que client qui communique via REST avec le service Clearance Registry Agent (le registre). L'agent interroge le service sur les tâches disponibles à traiter. Une fois qu'une tâche est disponible, l'agent doit verrouiller la tâche et la traiter. Une fois le processus terminé, il doit terminer la tâche avec le service.
Ce document passe en revue les différentes fonctionnalités que votre agent doit mettre en œuvre pour intégrer correctement le registre.
Pour en savoir plus, consultez la documentation API complète.
Il existe actuellement trois types de tâches que l'agent peut effectuer :
Requête multimédia : l'objectif de cette tâche est d'extraire un fichier multimédia du système externe ou propriétaire.
Découverte (discovery) : l'objectif de cette tâche est de découvrir l'appareil disponible dans le système externe ou propriétaire.
Thumbnail (miniature) : l'objectif de cette tâche est d'extraire une miniature de l'appareil dans le système externe ou propriétaire.
Le mécanisme d’authentification est le même pour toutes les API Clearance, comme expliqué dans Authentification.
Tâche de requête multimédia
Le premier appel que les agents doivent effectuer consiste à récupérer les tâches disponibles pour leur agent. Si aucune tâche n'est renvoyée, l'agent n'a rien à faire pour l'instant. L'agent doit interroger ce point de terminaison à intervalles réguliers pour voir si une nouvelle tâche a été publiée.
Une fois que l'agent dispose d'une liste de tâches disponibles, il peut choisir celle qu'il souhaite occuper en fonction de ses propres critères.
Une fois la tâche sélectionnée, l’agent la verrouille afin d’éviter qu’elle ne soit traitée par deux agents en même temps.
(Facultatif) L'agent peut signaler la progression de son travail en mettant à jour la tâche. Pour ce faire, nous fournissons un taskProgress et un taskTotal. La progression est divisée par le total pour obtenir un pourcentage.
(Facultatif) L'agent est chargé de renouveler le verrou lorsqu'il approche de la date d'expiration spécifiée. Si le verrou n'est pas renouvelé, la tâche redevient disponible et la progression est perdue.
Une fois la tâche terminée, l'agent la finaliser avec un état (Terminé, Partiellement terminée ou Échec).
Le traitement réel de la tâche est expliqué dans la section Transférer un résultat de tâche ci-dessous.
Tâche de découverte d'appareil
Le processus de découverte des appareils ou des vignettes démarre de la même manière qu'une demande multimédia. Une tâche de type découverte est affichée. Ensuite, l'agent interroge les tâches. Une fois la tâche disponible, l'agent peut choisir de sélectionner cette tâche et de la verrouiller.
(Facultatif) L'agent peut fournir des mises à jour sur la progression de cette tâche.
(Facultatif) L'agent peut renouveler le verrou sur la tâche s'il approche du délai d'expiration pour éviter de perdre le verrou et la progression du travail en cours.
Une fois la tâche terminée, l'agent la finalise, comme dans le cas d'une demande multimédia.
Le traitement réel de la tâche est expliqué dans la section Transférer un résultat de tâche ci-dessous.
Tâche de miniature
Le processus de la tâche de miniature démarre de la même manière qu'une tâche de demande multimédia. Une tâche de type miniature s'affiche. Ensuite, l'agent interroge les tâches. Une fois la tâche disponible, l'agent peut choisir de sélectionner cette tâche et de la verrouiller.
(Facultatif) L'agent peut fournir des mises à jour sur la progression de cette tâche.
(Facultatif) L'agent peut renouveler le verrou sur le travail s'il approche du délai d'expiration pour éviter de perdre le verrou et la progression du travail en cours.
Une fois la tâche terminée, l'agent la finalise, comme dans le cas d'une demande multimédia.
Le traitement réel de la tâche est expliqué dans la section Transférer un résultat de tâche ci-dessous.
Transférer un résultat de tâche
Après le verrouillage d'une tâche, l'agent sait qu'il est responsable de la fourniture des fichiers demandés. Pour ce faire, l'agent utilise les API de fichiers.
Tout d'abord, l'agent appelle le InitializeUpload, un point de terminaison unique pour tout type de tâche.
L'appel de ce point de terminaison fournit trois détails importants à l'agent :
L'ID de fichier utilisé lors de l'appel des points de terminaison API.
La clé JsonWebKey utilisée pour chiffrer chaque bloc du fichier en cours de transfert.
L'URI, qui contient le jeton SAS, spécifiant où transférer le fichier.
Ensuite, l'agent chiffre le fichier et le transfère à l'aide de la clé et de l'URI fournies dans la réponse InitializeUpload.
Les données de chiffrement doivent ensuite être ajoutées au stockage de fichiers sous forme de métadonnées, en utilisant encryptiondata comme clé de métadonnées et une version sérialisée de EncryptionDataModel utilisée pour chiffrer le fichier.
Une fois le fichier chargé, l'agent appelle le CompleteMedia, le CompleteDiscovery ou le CompleteThumbnail, en fonction du type de tâche.
Une fois le transfert de fichier terminé, l'agent peut transférer d'autres fichiers pour la même tâche. S'il n'y a qu'un seul fichier, l'agent peut effectuer la tâche, comme indiqué dans les schémas précédents.
EncryptionDataModel
/// <summary>
/// Data used for the encryption of the content and the key
/// </summary>
public class EncryptionDataModel
{
/// <summary>
/// Encryption IV used for the encryption of the content
/// </summary>
public byte[] ContentEncryptionIV { get; set; }
/// <summary>
/// Encryption information of the content
/// </summary>
public EncryptionDataAgentModel EncryptionAgent { get; set; }
/// <summary>
/// Encryption information of the key used to encrypt the content
/// </summary>
public EncryptionDataContentKeyModel WrappedContentKey { get; set; }
}
public class EncryptionDataAgentModel
{
/// <summary>
/// Encryption algorithm used for the content
/// </summary>
public string EncryptionAlgorithm { get; set; } = "AES_CBC_256";
}
public class EncryptionDataContentKeyModel
{
/// <summary>
/// Algorithm used to encrypt the content encryption key
/// </summary>
public string Algorithm { get; set; } = "RSA-OAEP";
/// <summary>
/// Encrypted content encryption key
/// </summary>
public byte[] EncryptedKey { get; set; }
/// <summary>
/// Encryption key id
/// </summary>
public string KeyId { get; set; }
}Annuler une tâche
Si l'agent n'est pas en mesure d'effectuer une tâche pour une raison quelconque, il peut l'annuler. Une fois annulée, la tâche reste indisponible.
Lancer une tâche
Si l'agent n'est pas en mesure d'effectuer une tâche, mais pense pouvoir le faire plus tard, il peut choisir de libérer la tâche. Le lancement de la tâche la rend à nouveau disponible pour un autre agent. L'agent a alors la liberté de sélectionner une tâche de son choix dans la liste des tâches disponibles.
Exemple de code
Vous pouvez télécharger un échantillon de code, qui nécessite une chaîne de connexion fournie par Genetec sur demande.