Connecter des appareils à Azure Video Analyzer

Icône de cloud
Vous pouvez également consulter les rubriques sous Créer des applications vidéo intelligentes à la périphérie.


Notes

Nous retirons le service Azure Video Analyzer en préversion. Nous vous conseillons de transférer vos applications hors de Video Analyzer d’ici le 1er décembre 2022.

Azure Video Analyzer for Media n’est pas affecté par cette mise hors service. Il est maintenant renommé Azure Video Indexer. Cliquez ici pour en savoir plus.

Action requise : pour réduire la perturbation de vos charges de travail, transférez votre application hors de Video Analyzer en suivant les suggestions décrites dans ce guide avant le 1er décembre 2022. Après le 1er décembre 2022, votre compte Azure Video Analyzer ne fonctionnera plus. À compter du 2 mai 2022, vous ne pourrez plus créer de comptes Video Analyzer.

Pour capturer et enregistrer des vidéos à partir d’un appareil, le service Azure Video Analyzer doit établir une connexion RTSP à celui-ci. Si l’appareil se trouve derrière un pare-feu, ces connexions sont bloquées et il n’est pas toujours possible de créer des règles pour autoriser les connexions entrantes à partir d’Azure. Pour prendre en charge ces appareils, vous pouvez créer et installer une implémentation de l’appareil Azure IoT Plug and Play, qui écoute les commandes envoyées via IoT Hub à partir de Video Analyzer, puis ouvre un tunnel WebSocket sécurisé vers le service. Une fois ce tunnel établi, Video Analyzer peut alors se connecter au serveur RTSP.

Vue d’ensemble

Cet article fournit des concepts généraux sur la création d’une implémentation d’appareil Azure IoT PnP qui peut permettre à Video Analyzer de capturer et d’enregistrer des vidéos à partir d’un appareil.

L’application doit :

  1. S’exécuter en tant qu’appareil IoT
  2. Implémenter l’interface IoT PnP avec une commande spécifique (tunnelOpen)
  3. Lors de la réception d’une telle commande :
    • Valider les arguments reçus
    • Ouvrir une connexion WebSocket sécurisée à l’URL indiquée à l’aide du jeton fourni
    • Transférer les octets WebSocket vers la connexion TCP du serveur RTSP de l’appareil photo

Connecter des appareils au cloud

S’exécuter en tant qu’appareil IoT

L’application Video Analyzer sera déployée en tant que plug-in PnP Video Analyzer. Cela nécessite l’utilisation de l’un des kits Azure IoT device SDK pour créer votre implémentation d’appareil IoT PnP. Inscrivez l’appareil IoT auprès de votre hub IoT pour obtenir l’ID de l’appareil IoT Hub et la chaîne de connexion de l’appareil.

Configuration du client de l’appareil IoT

  • Définissez OPTION_MODEL_ID sur “dtmi:azure:videoanalyzer:WebSocketTunneling;1” pour prendre en charge les requêtes PnP
  • Vérifiez que votre appareil utilise le protocole MQTT ou MQTT sur WebSockets pour se connecter à Azure IoT Hub
    • Connectez-vous à IoT Hub via un proxy HTTPS s’il est configuré sur l’appareil IoT
  • Inscrivez un rappel pour la méthode directe tunnelOpen

Implémenter l’interface IoT PnP pour Video Analyzer

Le modèle Digital Twins Definition Language (DTDL) suivant décrit un appareil qui peut se connecter à Video Analyzer.

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:azure:videoanalyzer:WebSocketTunneling;1",
  "@type": "Interface",
  "displayName": "Azure Video Analyzer Web Socket Tunneling",
  "description": "This interface enables media publishing to Azure Video Analyzer service from a RTSP compatible device which is located behind a firewall or NAT device.",
  "contents": [
    {
      "@type": "Command",
      "displayName": "Tunnel Open",
      "name": "tunnelOpen",
      "request": {
        "@type": "CommandPayload",
        "displayName": "Parameters",
        "name": "parameters",
        "schema": {
          "@type": "Object",
          "fields": [
            {
              "displayName": "Remote Endpoint",
              "description": "The remote endpoint for the web socket tunnel.",
              "name": "remoteEndpoint",
              "schema": "string"
            },
            {
              "displayName": "Remote Authorization Token",
              "description": "The bearer token for the web socket authentication.",
              "name": "remoteAuthorizationToken",
              "schema": "string"
            },
            {
              "displayName": "Local Port",
              "description": "The local port where web socket data should be tunneled to.",
              "name": "localPort",
              "schema": "integer"
            }
          ]
        }
      }
    }
  ]
}

L’appareil IoT inscrit une méthode directe tunnelOpen, où le corps de la demande aura les paramètres remoteEndpoint, remoteAuthorizationToken et localPort comme indiqué ci-dessus.

Implémentez la méthode directe tunnelOpen

Lorsque la méthode directe tunnelOpen est appelée par le service Video Analyzer, l’application doit effectuer les opérations suivantes :

  1. Obtenir le ou les ports RTSP disponibles de l’appareil
  2. Comparer la valeur localPort spécifiée dans l’appel de méthode directe aux ports disponibles
    • Retourner BadRequest si aucune correspondance n’est trouvée (voir la section Réponses d’erreur ci-dessous)
  3. Ouvrir une connexion TCP à « (IP ou nom d’hôte de l’appareil photo) :localPort »
    • Retourner BadRequest si la connexion échoue
    • REMARQUE : Le nom d’hôte est généralement localhost
  4. Ouvrez une connexion de socket web au remoteEndpoint (via un proxy s’il est configuré sur l’appareil)
    • Définissez l’en-tête HTTP « Authorization » sur « Bearer (remoteAuthorizationToken) »
    • Définissez l’en-tête « TunnelConnectionSource » avec la valeur « PnpDevice »
    • Définissez User-Agent sur une valeur appropriée qui vous aidera à identifier votre implémentation.
      • Par exemple, vous pouvez capturer l’architecture de l’UC, le système d’exploitation, le modèle/la marque de l’appareil.
    • Retournez 200 OK si la connexion de socket web a réussi, sinon retournez le code d’erreur approprié
  5. Retournez une réponse (pas de blocage)
  6. L’implémentation d’un appareil IoT PnP commence à envoyer des données TCP de manière bidirectionnelle entre le WebSocket et la connexion TCP du serveur RTSP

Le service Video Analyzer retente les demandes tunnelOpen en cas d’échec, si bien que les nouvelles tentatives ne sont pas nécessaires dans l’application.

Réponses d’erreur

Si la demande tunnelOpen échoue, le corps de la réponse doit se présenter comme suit

{
    "code": "<errorCode>", // Use HTTP status error codes
    "target": "<uri>", // The target URI experiencing the issue
    "message": "<Error message>",  // Short error message describing issue. Do not include end user identifiable information.
}

Voici quelques exemples de ces réponses d’erreur :

  • Le port local n’est pas disponible en tant que port RTSP ou RTSPS {« code » : « 400 », « cible » : « (IP ou nom d’hôte de l’appareil photo) : {localPort} », « message » : « Le port local n’est pas disponible »}
  • Délai d’attente/Impossible de se connecter au point de terminaison RTSP {« code » : « 400 », « cible » : « (IP ou nom d’hôte de l’appareil photo) : {localPort} », « message » : « Impossible de se connecter au point de terminaison RTSP »}
  • Délai d’attente/Réponse d’erreur de la tentative de connexion de socket web {« code » : « {code de réponse WebSocket} », « cible » : « {remoteEndpoint} », « message » : « {message d’erreur de réponse de socket web} »}

Ingestion dans Video Analyzer

Pour capturer et enregistrer des vidéos sur Video Analyzer, une topologie de pipeline avec activation du tunneling doit être créée. À partir de cette topologie, un pipeline en direct doit être créé et activé. Les instructions pour ce processus sont décrites ici.

Exemple d'implémentation

Contactez videoanalyzerhelp@microsoft.com si vous souhaitez implémenter une application sur votre appareil pour la connecter à Video Analyzer.

Voir aussi

Qu’est ce qu’IoT Plug-and-Play ?