Display

Nest Hub Max

L'écran Google Nest Hub Max est compatible avec l'API Smart Device Management (SDM). Cet appareil renvoie un type d'appareil DISPLAY:

sdm.devices.types.DISPLAY

Google Nest Hub Max est doté d'une caméra qui fonctionne de la même manière qu'un appareil de type CAMERA.

Caractéristiques

Reference

Les caractéristiques, commandes ou événements suivants sont associés à cet appareil:

TraitDescriptionCommandesÉvénements
CameraEventImageCette caractéristique appartient à n'importe quel appareil compatible avec la génération d'images à partir d'événements.GenerateImage
CameraImageCette caractéristique appartient à n'importe quel appareil compatible avec la prise d'images.
CameraLiveStreamCette caractéristique appartient à n'importe quel appareil compatible avec le streaming en direct.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionCette caractéristique appartient à n'importe quel appareil prenant en charge les événements de détection de mouvement.Mouvement
CameraPersonCette caractéristique appartient à n'importe quel appareil compatible avec les événements de détection de personnes.Personne
CameraSoundCette caractéristique appartient à n'importe quel appareil compatible avec les événements de détection des sons.Son
InfosCette caractéristique appartient à n'importe quel appareil pour les informations liées à l'appareil.

JSON

L'absence d'un trait dans une réponse GET indique que le trait ou la caractéristique en question n'est pas disponible actuellement pour l'appareil. Pour plus d'informations, consultez la section Types d'appareils.

{
  "type" : "sdm.devices.types.DISPLAY",
  "traits" : {
    "sdm.devices.traits.CameraEventImage" : {},
    "sdm.devices.traits.CameraImage" : {
      "maxImageResolution" : {
        "width" : 1280,
        "height" : 960
      }
    },
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    },
    "sdm.devices.traits.CameraMotion" : {},
    "sdm.devices.traits.CameraPerson" : {},
    "sdm.devices.traits.CameraSound" : {},
    "sdm.devices.traits.Info" : {
      "customName" : "My device"
    }
  }
}

Gérer les événements enregistrés

Les événements suivants peuvent être déclenchés à partir d'un type d'appareil DISPLAY:

Type Élément Description
Événement Événement Motion de la caractéristique CameraMotion La caméra a détecté un mouvement.
Événement Événement Person du trait CameraPerson Une personne a été détectée par la caméra.
Événement Événement Son de la caractéristique CameraSound La caméra a détecté un son.
Dans cet exemple, la caméra a détecté un mouvement:

Charge utile

{
  "eventId" : "f698b6e9-0572-4775-99ab-554c7b944201",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "YtEkPsfcoSs8Gp7h0EJI5xvcHB...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
La charge utile de cet événement contient un eventId qui peut être utilisé avec la commande GenerateImage. Cette commande renvoie une URL de téléchargement pour l'image de la caméra liée à l'événement:

Requête

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "L8dOfhrW5F6e-LvdNK6WDW6s0W..."
  }
}

Réponse

{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}

Télécharger l'image d'un appareil photo

Envoyez un appel GET à url à partir d'une réponse de commande GenerateImage, en utilisant token dans l'en-tête d'autorisation HTTP avec une autorisation de base pour télécharger l'image de l'appareil photo:

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

Utilisez les paramètres de requête width ou height pour personnaliser la résolution de l'image téléchargée. Un seul de ces paramètres doit être spécifié. L'autre paramètre est mis à l'échelle automatiquement en fonction du format de l'appareil photo.

Par exemple, si le format de la caméra est 4:3, spécifiez la largeur ou la hauteur pour télécharger l'image de la caméra à une résolution de 480 x 360:

Largeur

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480

Taille

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360

D'autres restrictions s'appliquent à l'URL de téléchargement:

  • Si les deux paramètres sont fournis dans l'URL, width est utilisé et height est ignoré.
  • Si aucun paramètre n'est fourni dans l'URL, la valeur par défaut 480 est choisie pour width.

Consultez la caractéristique CameraImage pour en savoir plus sur les propriétés de l'image.

Accéder à une diffusion en direct

Le flux en direct d'une caméra est accessible. Les formats de flux suivants sont compatibles avec cet appareil:

  • RTSP

Pour obtenir la liste complète des caméras et des formats de flux compatibles, consultez la section Appareils compatibles.

Pour accéder à une diffusion en direct, utilisez la commande GenerateFormatStream appropriée de la caractéristiqueCameraLiveStream.

RTSP

Pour un flux RTSP, la commande GenerateRtspStream de la commande de trait CameraLiveStream renvoie l'URL du flux et le streamToken associé:

Requête

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}

Réponse

{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Utilisez ensuite l'URL du flux pour accéder au flux en direct de la caméra:

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

Les URL de flux en direct RTSP ne peuvent pas être partagées entre les clients. Une URL de flux ne peut être utilisée que par un client à la fois. Si plusieurs clients souhaitent diffuser un flux depuis la même caméra en même temps, les commandes RTSP doivent être envoyées pour chacun d'entre eux, et chacun d'eux doit utiliser sa propre URL de flux.

Prolonger une diffusion en direct

Les sessions de streaming en direct avec la caméra ne sont valides que pendant cinq minutes. Si vous avez besoin de prolonger la durée de vie d'un flux en direct, utilisez la commande ExtendFormatStream appropriée de la caractéristique CameraLiveStream pour le format de flux que vous avez généré.

RTSP

Pour étendre un flux RTSP, utilisez la commande ExtendRtspStream de la commande de trait CameraLiveStream afin d'obtenir les nouvelles valeurs streamExtensionToken et streamToken:

Requête

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Réponse

{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Mettez à jour l'URL du flux avec ces nouvelles valeurs pour continuer à regarder le flux en direct:

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

Arrêter une diffusion en direct

Chaque fois que vous n'utilisez plus le flux en direct d'une caméra, vous devez l'arrêter et l'invalider. Pour ce faire, utilisez la commande StopFormatStream appropriée de la caractéristiqueCameraLiveStreampour le format de flux que vous avez généré.

RTSP

Pour arrêter un flux RTSP, utilisez le jeton pour l'invalider avec la commande StopRtspStream de la commande de trait CameraLiveStream:

Requête

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Réponse

{}

Erreurs

Le ou les codes d'erreur suivants peuvent être renvoyés concernant cet appareil:

Message d'erreur RPC Dépannage
L'image de l'appareil photo ne peut plus être téléchargée. DEADLINE_EXCEEDED Les images d'un événement expirent 30 secondes après sa publication. Veillez à télécharger l'image avant son expiration.
L'ID d'événement n'appartient pas à la caméra. FAILED_PRECONDITION Utilisez le eventID correct renvoyé par l'événement enregistré.

Consultez la documentation de référence sur les codes d'erreur de l'API pour obtenir la liste complète des codes d'erreur de l'API.