Schema CameraLiveStream

Nest Cam (legacy) Nest Cam (per esterni o interni, a batteria) Nest Cam con faretto Nest Cam (per interni, con cavo) Nest Hub Max Nest Doorbell (legacy) Nest Doorbell (a batteria) Nest Doorbell (con cavo) 

sdm.devices.traits.CameraLiveStream

Questo tratto appartiene a qualsiasi dispositivo che supporta il live streaming.

Campi

Campo Descrizione Tipo di dati
maxVideoResolution Risoluzione massima dello stream video live. VideoResolution
videoCodecs Codec video supportati per il live streaming. array(string)
Value: ["H264"]
audioCodecs Codec audio supportati per il live streaming. array(string)
Value: ["AAC"]
supportedProtocols Protocolli di streaming supportati dal dispositivo. Il valore di questo campo indica quali comandi sono supportati per il dispositivo. Ad esempio, se questo campo contiene WEB_RTC, sono supportati solo i comandi WEB_RTC. array(string)
Value: ["RTSP", "WEB_RTC"]

VideoResolution (maxVideoResolution)

Campo Descrizione Tipo di dati
width Larghezza massima della risoluzione dell'immagine. Può essere utilizzato anche come parametro di query nell'URL di download. int32
Esempio: 640
height Altezza massima della risoluzione dell'immagine. Può essere utilizzato anche come parametro di query nell'URL di download. int32
Esempio: 480

Richiesta GET e risposta di esempio

Richiesta

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

Risposta

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

Comandi

GenerateRtspStream

Nest Cam (legacy) Nest Hub Max Nest Doorbell (legacy) 

Richiedi un token per accedere a un URL di live streaming RTSP.

Gli URL dei live streaming RTSP non possono essere condivisi tra i client. Un URL di stream può essere utilizzato da un solo client alla volta. Se più client vogliono eseguire lo streaming dalla stessa videocamera contemporaneamente, i comandi RTSP devono essere inviati per ogni singolo client e ogni singolo client deve utilizzare il proprio URL di streaming.

Richiesta e risposta GenerateRtspStream

Richiesta

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

Risposta

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

Campi di risposta GenerateRtspStream

Campo Descrizione Tipo di dati
streamUrls Mappa degli URL dei live streaming RTSP. object
streamExtensionToken Token da utilizzare per estendere streamToken per un live streaming RTSP. string
Esempio: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
streamToken Token da utilizzare per accedere a un live streaming RTSP. string
Esempio: "g.0.streamingToken"
expiresAt Ora in cui scadono sia streamExtensionToken che streamToken, nel formato RFC 3339. string
Esempio: "2018-01-04T18:30:00.000Z"

ExtendRtspStream

Nest Cam (legacy) Nest Hub Max Nest Doorbell (legacy) 

Richiedi un nuovo token di accesso all'URL del live streaming RTSP per sostituire un token di accesso RTSP valido prima della scadenza. Viene utilizzato anche per sostituire un token RTSP valido da una precedente richiesta del comando ExtendRtspStream.

Le sessioni di live streaming della videocamera sono valide solo per 5 minuti. Se devi estendere la durata di un live streaming, utilizza il comando ExtendFormatStream appropriato del tratto CameraLiveStream per il formato dello stream che hai generato.

Richiesta e risposta ExtendRtspStream

Richiesta

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

Risposta

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

Campi della richiesta ExtendRtspStream

Campo Descrizione Tipo di dati
streamExtensionToken Token da utilizzare per richiedere un'estensione del token di streaming RTSP. string
Esempio: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

Campi di risposta ExtendRtspStream

Campo Descrizione Tipo di dati
streamExtensionToken Token da utilizzare per visualizzare un live streaming RTSP esistente e per richiedere un'estensione del token di streaming. string
Esempio: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..."
streamToken Nuovo token da utilizzare per accedere a un live streaming RTSP esistente. string
Esempio: "g.0.newStreamingToken"
expiresAt Ora in cui scadono sia streamExtensionToken che streamToken, nel formato RFC 3339. string
Esempio: "2018-01-04T18:30:00.000Z"

StopRtspStream

Nest Cam (legacy) Nest Hub Max Nest Doorbell (legacy) 

Invalida un token di accesso RTSP valido e interrompe il live streaming RTSP associato a quel token di accesso.

Richiesta e risposta StopRtspStream

Richiesta

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

Risposta

{}

Campi della richiesta StopRtspStream

Campo Descrizione Tipo di dati
streamExtensionToken Token da utilizzare per invalidare un live streaming RTSP esistente. string
Esempio: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

GenerateWebRtcStream

Nest Cam (legacy) Nest Cam (per esterni o interni, a batteria) Nest Cam con faretto Nest Cam (per interni, con cavo) Nest Doorbell (a batteria) Nest Doorbell (con cavo) 

Genera un live streaming WebRTC per un dispositivo.

Richiesta e risposta GenerateWebRtcStream

Richiesta

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

Risposta

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

Campi della richiesta GenerateWebRtcStream

Ti consigliamo di utilizzare l'esempio di applicazione web per scoprire come generare una live streaming di successo. Questo esempio genera un offerSdp valido che soddisfa tutte le limitazioni dell'offerta SDP per le videocamere Nest.

Un'offerta SDP per le videocamere Nest deve soddisfare le seguenti limitazioni:

  • È supportato solo il formato Unified. Il piano B non è supportato.
  • Tutte le righe dei contenuti multimediali (m=) devono essere presenti nell'offerta e devono essere in questo ordine:
    1. audio
    2. video
    3. applicazione
  • Trickle ICE è supportato, ma non obbligatorio.
  • Per l'audio è supportato solo il codec Opus.
  • L'impostazione audio deve essere impostata su a=recvonly (solo ricezione).
  • L'offerta deve terminare con un carattere di nuova riga \r\n o \n.

Visualizza un esempio di offerta valida

Non formattato:

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

Formattato:

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
Campo Descrizione Tipo di dati
offerSdp Un'offerta SDP specifica per il dispositivo locale che visualizzerà il live streaming WebRTC. string
Esempio: "offerSdp"

Campi di risposta GenerateWebRtcStream

answerSdp deve essere utilizzato per generare il live streaming entro 30 secondi dalla ricezione della risposta, altrimenti scade. Se scade, esegui di nuovo il comando GenerateWebRtcStream per ricevere un nuovo answerSdp.

Quando apri i canali WebRTC per il live streaming, assicurati di creare un canale di dati e un canale video.

Campo Descrizione Tipo di dati
answerSdp Una risposta SDP da utilizzare con il dispositivo locale che visualizzerà lo stream live WebRTC. string
Esempio: "answerSdp"
expiresAt Ora in cui scade l'accesso al live streaming WebRTC, nel formato RFC 3339. string
Esempio: "2020-01-04T18:30:00.000Z"
mediaSessionId ID sessione multimediale del live streaming WebRTC generato. string
Esempio: "A_anD5X1F7SwyERCI7EA2sAoI5..."

ExtendWebRtcStream

Nest Cam (legacy) Nest Cam (per esterni o interni, a batteria) Nest Cam con faretto Nest Cam (per interni, con cavo) Nest Doorbell (con cavo)   Con cavo   

Richiedi l'estensione dell'accesso a un live streaming WebRTC esistente prima della scadenza.

Uno stream WebRTC può essere esteso solo sulle videocamere alimentate a cavo. Una videocamera alimentata a batteria viene considerata alimentata con cavo quando è collegata per la ricarica. Se la videocamera è alimentata a batteria, una richiesta di estensione di uno stream WebRTC attivo verrà ignorata.

Le sessioni di live streaming della videocamera sono valide solo per 5 minuti. Se devi estendere la durata di un live streaming, utilizza il comando ExtendFormatStream appropriato del tratto CameraLiveStream per il formato dello stream che hai generato.

Richiesta e risposta ExtendWebRtcStream

Richiesta

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

Risposta

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

Campi della richiesta ExtendWebRtcStream

Campo Descrizione Tipo di dati
mediaSessionId L'ID sessione multimediale del live streaming WebRTC da estendere. string
Esempio: "A_anD5X1F7SwyERCI7EA2sAoI5..."

Campi di risposta ExtendWebRtcStream

Campo Descrizione Tipo di dati
expiresAt La nuova ora in cui scade l'accesso al live streaming WebRTC, nel formato RFC 3339. string
Esempio: "2018-01-04T18:30:00.000Z"
mediaSessionId L'ID sessione media del live streaming WebRTC che è stato esteso. string
Esempio: "A_anD5X1F7SwyERCI7EA2sAoI5..."

StopWebRtcStream

Nest Cam (legacy) Nest Cam (per esterni o interni, a batteria) Nest Cam con faretto Nest Cam (per interni, con cavo) Nest Doorbell (a batteria) Nest Doorbell (con cavo) 

Invalida una sessione multimediale WebRTC valida e interrompe il live streaming WebRTC associato a quella sessione.

Richiesta e risposta StopWebRtcStream

Richiesta

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

Risposta

{}

Campi della richiesta StopWebRtcStream

Campo Descrizione Tipo di dati
mediaSessionId ID sessione multimediale del live streaming WebRTC da interrompere. string
Esempio: "A_anD5X1F7SwyERCI7EA2sAoI5..."

Errori

Per questo attributo potrebbero essere restituiti i seguenti codici di errore:

Messaggio di errore RPC Risoluzione dei problemi
La videocamera non è disponibile per lo streaming. FAILED_PRECONDITION La videocamera è offline o non disponibile per lo streaming a causa di un problema tecnico.
Il comando non è supportato per il campanello. FAILED_PRECONDITION Uno stream WebRTC non può essere esteso sui campanelli alimentati a batteria. Se uno stream su un campanello deve essere visualizzato oltre la durata della sessione iniziale, interrompi lo stream esistente e generane uno nuovo.
Autorizzazione negata. PERMISSION_DENIED L' user non ha concesso all' developer le autorizzazioni a livello di dispositivo appropriate in Partner Connections Manager (PCM) necessarie per eseguire un comando.

Quando viene generato uno stream live WebRTC, questo errore può anche significare che l'impostazione audio nel offerSdp non è corretta.

Consulta i riferimenti ai codici di errore dell'API per l'elenco completo dei codici di errore dell'API.