Schéma CameraLiveStream

Nest Cam (ancienne) Nest Cam (extérieur ou intérieur, batterie) Nest Cam avec projecteur Nest Cam (intérieur, filaire) Nest Hub Max Nest Doorbell (ancienne) Nest Doorbell (batterie) Nest Doorbell (filaire) 

sdm.devices.traits.CameraLiveStream

Cette caractéristique appartient à tous les appareils compatibles avec le streaming en direct.

Champs

Champ Description Type de données
maxVideoResolution Résolution maximale du flux vidéo en direct. VideoResolution
videoCodecs Codecs vidéo compatibles avec la diffusion en direct. array(string)
Valeur: ["H264"]
audioCodecs Codecs audio compatibles avec la diffusion en direct. array(string)
Valeur: ["AAC"]
supportedProtocols Protocoles de streaming compatibles avec l'appareil. La valeur de ce champ indique les commandes compatibles avec l'appareil. Par exemple, si ce champ contient WEB_RTC, seules les commandes WEB_RTC sont acceptées. array(string)
Valeur: ["RTSP", "WEB_RTC"]

VideoResolution (maxVideoResolution)

Champ Description Type de données
width Largeur de la résolution d'image maximale. Peut également être utilisé comme paramètre de requête dans l'URL de téléchargement. int32
Exemple: 640
height Hauteur de la résolution d'image maximale. Peut également être utilisé comme paramètre de requête dans l'URL de téléchargement. int32
Exemple: 480

Exemple de requête et de réponse GET

Requête

GET /enterprises/project-id/devices/device-id

Réponse

{
  "name" : "enterprises/project-id/devices/device-id",
  "traits" : {
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    }
  }
}

Commandes

GenerateRtspStream

Nest Cam (ancienne) Nest Hub Max Nest Doorbell (ancienne) 

Demandez un jeton pour accéder à une URL de diffusion en direct RTSP.

Les URL de diffusion en direct RTSP ne peuvent pas être partagées entre les clients. Une URL de flux ne peut être utilisée que par un seul client à la fois. Si plusieurs clients souhaitent diffuser du contenu en streaming à partir de la même caméra en même temps, des commandes RTSP doivent être envoyées pour chaque client, et chaque client doit utiliser sa propre URL de flux.

Requête et réponse GenerateRtspStream

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

Champs de réponse GenerateRtspStream

Champ Description Type de données
streamUrls Carte des URL de diffusion en direct RTSP. object
streamExtensionToken Jeton à utiliser pour étendre streamToken pour une diffusion en direct RTSP. string
Exemple: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
streamToken Jeton à utiliser pour accéder à une diffusion en direct RTSP. string
Exemple: "g.0.streamingToken"
expiresAt Heure à laquelle streamExtensionToken et streamToken expirent, au format RFC 3339. string
Exemple: "2018-01-04T18:30:00.000Z"

ExtendRtspStream

Nest Cam (ancienne) Nest Hub Max Nest Doorbell (ancienne) 

Demandez un nouveau jeton d'accès à l'URL de diffusion en direct RTSP pour remplacer un jeton d'accès RTSP valide avant son expiration. Il permet également de remplacer un jeton RTSP valide à partir d'une requête de commande ExtendRtspStream précédente.

Les sessions de diffusion en direct de caméra ne sont valides que pendant cinq minutes. Si vous devez prolonger la durée de vie d'une diffusion en direct, utilisez la commande ExtendFormatStream appropriée du trait CameraLiveStream pour le format de diffusion que vous avez généré.

Requête et réponse ExtendRtspStream

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

Champs de requête ExtendRtspStream

Champ Description Type de données
streamExtensionToken Jeton à utiliser pour demander une extension du jeton de streaming RTSP. string
Exemple: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

Champs de réponse ExtendRtspStream

Champ Description Type de données
streamExtensionToken Jeton à utiliser pour afficher une diffusion en direct RTSP existante et demander une extension du jeton de streaming. string
Exemple: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..."
streamToken Nouveau jeton à utiliser pour accéder à une diffusion en direct RTSP existante. string
Exemple: "g.0.newStreamingToken"
expiresAt Heure à laquelle streamExtensionToken et streamToken expirent, au format RFC 3339. string
Exemple: "2018-01-04T18:30:00.000Z"

StopRtspStream

Nest Cam (ancienne) Nest Hub Max Nest Doorbell (ancienne) 

Invalide un jeton d'accès RTSP valide et arrête la diffusion en direct RTSP associée à ce jeton d'accès.

Requête et réponse StopRtspStream

Requête

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

Réponse

{}

Champs de requête StopRtspStream

Champ Description Type de données
streamExtensionToken Jeton à utiliser pour invalider une diffusion en direct RTSP existante. string
Exemple: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

GenerateWebRtcStream

Ancienne Nest Cam Nest Cam (Extérieur ou intérieur | Batterie) Nest Cam avec projecteur Nest Cam (Intérieure - Filaire) Nest Doorbell (batterie) Nest Doorbell (filaire) 

Générez une diffusion en direct WebRTC pour un appareil.

Requête et réponse GenerateWebRtcStream

Requête

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

Réponse

{
  "results" : {
    "answerSdp" : "answerSdp",
    "expiresAt" : "2020-01-04T18:30:00.000Z",
    "mediaSessionId" : "KIx9GBoVn-Ci90qlAVk4MCD9P7..."
  }
}

Champs de requête GenerateWebRtcStream

Nous vous recommandons d'utiliser l'exemple d'application Web pour découvrir comment générer une diffusion en direct réussie. Cet exemple génère un offerSdp valide qui répond à toutes les restrictions d'offre SDP pour les caméras Nest.

Une offre SDP pour des caméras Nest doit respecter les restrictions suivantes:

  • Seul le format unifié est accepté. Le plan B n'est pas accepté.
  • Toutes les lignes multimédias (m=) doivent être présentes dans l'offre et doivent être dans l'ordre suivant:
    1. audio
    2. vidéo
    3. application
  • Le Trickle ICE est accepté, mais pas obligatoire.
  • Seul le codec Opus est compatible avec l'audio.
  • Le paramètre audio doit être défini sur a=recvonly (réception uniquement).
  • L'offre doit se terminer par un caractère de nouvelle ligne, \r\n ou \n.

Voir un exemple d'offre valide

Sans mise en forme:

v=0\r\no=- 2214114893783582286 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116 37\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:122 VP9/90000\r\na=rtcp-fb:122 goog-remb\r\na=rtcp-fb:122 transport-cc\r\na=rtcp-fb:122 ccm fir\r\na=rtcp-fb:122 nack\r\na=rtcp-fb:122 nack pli\r\na=fmtp:122 profile-id=1\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:35 AV1/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\na=rtpmap:37 flexfec-03/90000\r\na=rtcp-fb:37 goog-remb\r\na=rtcp-fb:37 transport-cc\r\na=fmtp:37 repair-window=10000000\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n

Formaté:

v=0
o=- 2214114893783582286 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116 37
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:122 VP9/90000
a=rtcp-fb:122 goog-remb
a=rtcp-fb:122 transport-cc
a=rtcp-fb:122 ccm fir
a=rtcp-fb:122 nack
a=rtcp-fb:122 nack pli
a=fmtp:122 profile-id=1
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rtpmap:37 flexfec-03/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=fmtp:37 repair-window=10000000
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:262144
Champ Description Type de données
offerSdp Offre SDP spécifique à l'appareil local qui affichera le flux en direct WebRTC. string
Exemple: "offerSdp"

Champs de réponse GenerateWebRtcStream

Le answerSdp doit être utilisé pour générer le flux en direct dans les 30 secondes suivant la réception de la réponse, sinon il expire. Si elle expire, exécutez à nouveau la commande GenerateWebRtcStream pour recevoir un nouveau answerSdp.

Lorsque vous ouvrez des canaux WebRTC pour la diffusion en direct, veillez à créer un canal de données ainsi qu'un canal vidéo.

Champ Description Type de données
answerSdp Réponse SDP à utiliser avec l'appareil local qui affichera le flux en direct WebRTC. string
Exemple: "answerSdp"
expiresAt Heure à laquelle l'accès au flux en direct WebRTC expire, au format RFC 3339. string
Exemple: "2020-01-04T18:30:00.000Z"
mediaSessionId ID de session multimédia de la diffusion en direct WebRTC générée. string
Exemple: "KIx9GBoVn-Ci90qlAVk4MCD9P7..."

ExtendWebRtcStream

Ancienne Nest Cam Nest Cam (Extérieur ou intérieur | Batterie) Nest Cam avec projecteur Nest Cam (Intérieure - Filaire) Nest Doorbell (Filaire)   Filaire   

Demander à prolonger l'accès à une diffusion en direct WebRTC existante avant qu'elle n'expire

Un flux WebRTC ne peut être étendu que sur les caméras alimentées par fil. Une caméra sur batterie est considérée comme filaire lorsqu'elle est branchée pour se recharger. Si la caméra fonctionne sur batterie, une requête visant à prolonger un flux WebRTC actif sera ignorée.

Les sessions de diffusion en direct de caméra ne sont valides que pendant cinq minutes. Si vous devez prolonger la durée de vie d'une diffusion en direct, utilisez la commande ExtendFormatStream appropriée du trait CameraLiveStream pour le format de diffusion que vous avez généré.

Requête et réponse ExtendWebRtcStream

Requête

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

Réponse

{
  "results" : {
    "expiresAt" : "2018-01-04T18:30:00.000Z",
    "mediaSessionId" : "KIx9GBoVn-Ci90qlAVk4MCD9P7..."
  }
}

Champs de requête ExtendWebRtcStream

Champ Description Type de données
mediaSessionId ID de session multimédia de la diffusion en direct WebRTC à prolonger. string
Exemple: "KIx9GBoVn-Ci90qlAVk4MCD9P7..."

Champs de réponse ExtendWebRtcStream

Champ Description Type de données
expiresAt Nouvelle heure à laquelle l'accès au streaming en direct WebRTC expire, au format RFC 3339. string
Exemple: "2018-01-04T18:30:00.000Z"
mediaSessionId ID de session multimédia de la diffusion en direct WebRTC étendue. string
Exemple: "KIx9GBoVn-Ci90qlAVk4MCD9P7..."

StopWebRtcStream

Ancienne Nest Cam Nest Cam (Extérieur ou intérieur | Batterie) Nest Cam avec projecteur Nest Cam (Intérieure - Filaire) Nest Doorbell (batterie) Nest Doorbell (filaire) 

Invalide une session multimédia WebRTC valide et arrête la diffusion en direct WebRTC associée à cette session.

Requête et réponse StopWebRtcStream

Requête

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

Réponse

{}

Champs de requête StopWebRtcStream

Champ Description Type de données
mediaSessionId ID de session multimédia de la diffusion en direct WebRTC à arrêter. string
Exemple: "KIx9GBoVn-Ci90qlAVk4MCD9P7..."

Erreurs

Le ou les codes d'erreur suivants peuvent être renvoyés en lien avec cette caractéristique:

Message d'erreur RPC Dépannage
La caméra n'est pas disponible pour le streaming. FAILED_PRECONDITION La caméra est hors connexion ou n'est pas disponible pour le streaming en raison d'un problème technique.
La commande n'est pas compatible avec la sonnette. FAILED_PRECONDITION Un flux WebRTC ne peut pas être étendu sur les sonnettes sur batterie. Si un flux sur une sonnette doit être visionné au-delà de la durée de la session initiale, arrêtez le flux existant et en générez un nouveau.
Autorisation refusée. PERMISSION_DENIED Le user n'a pas accordé au developerles autorisations appropriées au niveau de l'appareil dans le Partner Connections Manager (PCM) requises pour exécuter une commande.

Lors de la génération d'un flux en direct WebRTC, cette erreur peut également signifier que le paramètre audio dans le offerSdp est incorrect.

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.