Schéma CameraLiveStream
Nest Cam (ancienne)
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)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)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)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 CamGé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:- audio
- vidéo
- 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 CamDemander à 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 CamInvalide 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.