Schéma CameraLiveStream

Nest Cam (ancienne) Nest Cam (Extérieur ou intérieur, batterie) Nest Cam avec projecteur Nest Cam (Intérieur - Nest filaire) 00}0} Doorbell0}.

sdm.devices.traits.CameraLiveStream

Cette caractéristique appartient à n'importe quel appareil compatible 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"]

Résolution vidéo (maxVideoResolution)

Champ Description Type de données
width Largeur maximale de la résolution d'image. Peut également être utilisé comme paramètre de requête dans l'URL de téléchargement. int32
Exemple: 640
height Hauteur maximale de la résolution d'image. 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 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 simultanément le flux d'une même caméra, des commandes RTSP doivent être envoyées pour chacun d'eux, et chacun d'eux 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 diffusions en direct RTSP. object
streamExtensionToken Jeton à utiliser pour étendre le streamToken pour un flux 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 d'URL de diffusion en direct RTSP pour remplacer un jeton d'accès RTSP valide avant son expiration. Il sert également à remplacer un jeton RTSP valide d'une requête de commande ExtendRtspStream précédente.

Les sessions de streaming en direct de la caméra ne sont valides que pendant 5 minutes. Si vous avez besoin de prolonger la durée de vie d'une diffusion en direct, utilisez la commande ExtendFormatStream appropriée de la caractéristique CameraLiveStream pour le format de flux 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 un flux en direct RTSP existant et pour 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

Nest Cam (ancienne) Nest Cam (Extérieur ou intérieur, batterie) Nest Cam avec projecteur Nest Cam (Intérieur - Filaire) Nest Doorbell (batterie) Nest Doorbell (filaire) 

Générer 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" : "QW_yv1uYh-WRDT6K8ZFuVywm5v..."
  }
}

Champs de requête GenerateWebRtcStream

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

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

  • Seul le format "Unifié" est accepté. Le forfait B n'est pas accepté.
  • Toutes les lignes multimédias (m=) doivent être incluses dans l'offre et dans cet ordre:
    1. avec l'audio multilingue
    2. Vidéo
    3. application
  • La fonctionnalité ICE Trickle est compatible, mais n'est 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 retour à la 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

Avec mise en forme:

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 Une offre SDP spécifique à l'appareil local qui affichera le flux en direct WebRTC. string
Exemple: "offerSdp"

Champs de réponse GenerateWebRtcStream

L'answerSdp doit être utilisé pour générer la diffusion en direct dans les 30 secondes suivant la réception de la réponse. Dans le cas contraire, elle expire. S'il expire, exécutez à nouveau la commande GenerateWebRtcStream pour recevoir un nouveau answerSdp.

Lorsque vous ouvrez des chaînes WebRTC pour la diffusion en direct, veillez à créer un canal de données et 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 d'expiration de l'accès au flux en direct WebRTC, 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: "QW_yv1uYh-WRDT6K8ZFuVywm5v..."

ExtendWebRtcStream

Nest Cam (ancienne) Nest Cam (Extérieur ou intérieur, batterie) Nest Cam avec projecteur Nest Cam (Intérieur - Filaire) Nest Doorbell (filaire)   Filaire   

Demander que l'accès à une diffusion en direct WebRTC existante soit prolongé avant son expiration.

Un flux WebRTC ne peut être étendu que sur des caméras filaires. Une caméra sur batterie est considérée comme alimentée par un fil lorsqu'elle est branchée pour la charge. Si la caméra est sur batterie, toute demande d'extension d'un flux WebRTC actif sera ignorée.

Les sessions de streaming en direct de la caméra ne sont valides que pendant 5 minutes. Si vous avez besoin de prolonger la durée de vie d'une diffusion en direct, utilisez la commande ExtendFormatStream appropriée de la caractéristique CameraLiveStream pour le format de flux 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" : "QW_yv1uYh-WRDT6K8ZFuVywm5v..."
  }
}

Réponse

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

Champs de requête ExtendWebRtcStream

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

Champs de réponse ExtendWebRtcStream

Champ Description Type de données
expiresAt Nouvelle heure d'expiration de l'accès au flux en direct WebRTC, au format RFC 3339. string
Exemple: "2018-01-04T18:30:00.000Z"
mediaSessionId ID de session multimédia de la diffusion en direct WebRTC qui a été prolongée. string
Exemple: "QW_yv1uYh-WRDT6K8ZFuVywm5v..."

StopWebRtcStream

Nest Cam (ancienne) Nest Cam (Extérieur ou intérieur, batterie) Nest Cam avec projecteur Nest Cam (Intérieur - 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" : "QW_yv1uYh-WRDT6K8ZFuVywm5v..."
  }
}

Réponse

{}

Champs de la 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: "QW_yv1uYh-WRDT6K8ZFuVywm5v..."

Erreurs

Le ou les codes d'erreur suivants peuvent être renvoyés par rapport à cette caractéristique:

Message d'erreur RPC Dépannage
La commande n'est pas compatible avec la sonnette. FAILED_PRECONDITION Le flux WebRTC ne peut pas être étendu sur des sonnettes sur batterie. Si le flux d'une sonnette doit être visionné au-delà de la durée initiale de la session, arrêtez le flux existant et générez-en un nouveau.
Autorisation refusée. PERMISSION_DENIED user n'a pas accordé à developerles autorisations au niveau de l'appareil requises dans le gestionnaire des connexions partenaires (PCM) pour exécuter une commande.

Lors de la génération d'une diffusion en direct WebRTC, cette erreur peut également signifier que le paramètre audio dans 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.