Schéma CameraLiveStream
Nest Cam (ancienne version)
sdm.devices.traits.CameraLiveStream
Ce trait appartient à tout appareil compatible avec la diffusion en direct.
Champs
| Champ | Description | Type de données |
|---|---|---|
maxVideoResolution |
Résolution maximale de la diffusion en direct. | VideoResolution |
videoCodecs |
Codecs vidéo compatibles avec la diffusion en direct. | array(string)Value: ["H264"] |
audioCodecs |
Codecs audio compatibles avec la diffusion en direct. | array(string)Value: ["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 compatibles. | array(string)Value: ["RTSP", "WEB_RTC"] |
VideoResolution (maxVideoResolution)
| Champ | Description | Type de données |
|---|---|---|
width |
Largeur maximale de la résolution de l'image. Peut également être utilisé comme paramètre de requête dans l'URL de téléchargement. | int32Example: 640 |
height |
Hauteur maximale de la résolution de l'image. Peut également être utilisé comme paramètre de requête dans l'URL de téléchargement. | int32Example: 480 |
Exemple de requête GET et de réponse
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 version)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 des contenus depuis la même caméra en même temps, des commandes RTSP doivent être envoyées pour chaque client individuel, et chaque client individuel 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 le streamToken d'une diffusion en direct RTSP. |
stringExample: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." |
streamToken |
Jeton à utiliser pour accéder à une diffusion en direct RTSP. | stringExample: "g.0.streamingToken" |
expiresAt |
Heure d'expiration de streamExtensionToken et de streamToken, au format RFC 3339. |
stringExample: "2018-01-04T18:30:00.000Z" |
ExtendRtspStream
Nest Cam (ancienne version)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 est également utilisé pour remplacer un jeton RTSP valide d'une requête de commande ExtendRtspStream précédente.
Les sessions de diffusion en direct de la 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 CameraLiveStream trait 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. | stringExample: "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. | stringExample: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..." |
streamToken |
Nouveau jeton à utiliser pour accéder à une diffusion en direct RTSP existante. | stringExample: "g.0.newStreamingToken" |
expiresAt |
Heure d'expiration de streamExtensionToken et de streamToken, au format RFC 3339. |
stringExample: "2018-01-04T18:30:00.000Z" |
StopRtspStream
Nest Cam (ancienne version)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. | stringExample: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." |
GenerateWebRtcStream
Nest Cam (ancienne version)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" : "p_BMo-wc8f5fYgwz5BOCjYhLvY..."
}
}
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 les caméras Nest doit respecter les restrictions suivantes :
- Seul le format unifié est accepté. Le plan B n'est pas accepté.
- Toutes les lignes de média (
m=) doivent être présentes dans l'offre et dans cet ordre :- audio
- vidéo
- application
- Le protocole Trickle ICE est accepté, mais pas obligatoire.
- Seul le codec Opus est accepté pour 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\nou\n.
Consultez un exemple d'offre valide
Non formaté :
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 la diffusion en direct WebRTC. | stringExample: "offerSdp" |
Champs de réponse GenerateWebRtcStream
Le answerSdp doit être utilisé pour générer la diffusion en direct dans les 30 secondes suivant la réception de la réponse, sinon il expire. S'il 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 la diffusion en direct WebRTC. | stringExample: "answerSdp" |
expiresAt |
Heure d'expiration de l'accès à la diffusion en direct WebRTC, au format RFC 3339. | stringExample: "2020-01-04T18:30:00.000Z" |
mediaSessionId |
ID de session média de la diffusion en direct WebRTC générée. | stringExample: "p_BMo-wc8f5fYgwz5BOCjYhLvY..." |
ExtendWebRtcStream
Nest Cam (ancienne version)Demandez que l'accès à une diffusion en direct WebRTC existante soit prolongé avant son expiration.
Un flux WebRTC ne peut être étendu que sur les caméras filaires. Une caméra sur batterie est considérée comme filaire lorsqu'elle est branchée pour être rechargée. Si la caméra fonctionne sur batterie, une demande d'extension d'un flux WebRTC actif sera ignorée.
Les sessions de diffusion en direct de la 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 CameraLiveStream trait 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" : "p_BMo-wc8f5fYgwz5BOCjYhLvY..."
}
}
Réponse
{
"results" : {
"expiresAt" : "2018-01-04T18:30:00.000Z",
"mediaSessionId" : "p_BMo-wc8f5fYgwz5BOCjYhLvY..."
}
}
Champs de requête ExtendWebRtcStream
| Champ | Description | Type de données |
|---|---|---|
mediaSessionId |
ID de session média de la diffusion en direct WebRTC à étendre. | stringExample: "p_BMo-wc8f5fYgwz5BOCjYhLvY..." |
Champs de réponse ExtendWebRtcStream
| Champ | Description | Type de données |
|---|---|---|
expiresAt |
Nouvelle heure d'expiration de l'accès à la diffusion en direct WebRTC, au format RFC 3339. | stringExample: "2018-01-04T18:30:00.000Z" |
mediaSessionId |
ID de session média de la diffusion en direct WebRTC qui a été étendue. | stringExample: "p_BMo-wc8f5fYgwz5BOCjYhLvY..." |
StopWebRtcStream
Nest Cam (ancienne version)Invalide une session mé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" : "p_BMo-wc8f5fYgwz5BOCjYhLvY..."
}
}
Réponse
{}
Champs de requête StopWebRtcStream
| Champ | Description | Type de données |
|---|---|---|
mediaSessionId |
ID de session média de la diffusion en direct WebRTC à arrêter. | stringExample: "p_BMo-wc8f5fYgwz5BOCjYhLvY..." |
Erreurs
Le ou les codes d'erreur suivants peuvent être renvoyés en relation avec ce trait :
| 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 session initiale, arrêtez le flux existant et générez-en un nouveau. |
| Autorisation refusée. | PERMISSION_DENIED |
Le user n'a pas accordé au developer
les autorisations appropriées au niveau de l'appareil dans le Gestionnaire des connexions partenaires (PCM) requises 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 le offerSdp est incorrect. |