Esquema de CameraLiveStream
Nest Cam (heredado)
sdm.devices.traits.CameraLiveStream
Este atributo pertenece a cualquier dispositivo que admita la transmisión en vivo.
Campos
Campo | Descripción | Tipo de datos |
---|---|---|
maxVideoResolution |
Es la resolución máxima de la transmisión de video en vivo. | VideoResolution |
videoCodecs |
Códecs de video compatibles para la transmisión en vivo | array(string) Valor: ["H264"] |
audioCodecs |
Códecs de audio compatibles con la transmisión en vivo | array(string) Valor: ["AAC"] |
supportedProtocols |
Protocolos de transmisión que admite el dispositivo. El valor de este campo indica qué comandos son compatibles con el dispositivo. Por ejemplo, si este campo contiene WEB_RTC, solo se admiten los comandos WEB_RTC. | array(string) Valor: ["RTSP", "WEB_RTC"] |
VideoResolution (maxVideoResolution)
Campo | Descripción | Tipo de datos |
---|---|---|
width |
Ancho máximo de resolución de imagen. También se puede usar como parámetro de consulta en la URL de descarga. | int32 Ejemplo: 640 |
height |
Altura máxima de resolución de imagen. También se puede usar como parámetro de consulta en la URL de descarga. | int32 Ejemplo: 480 |
Ejemplo de solicitud y respuesta GET
Solicitud
GET /enterprises/project-id/devices/device-id
Respuesta
{
"name" : "enterprises/project-id/devices/device-id",
"traits" : {
"sdm.devices.traits.CameraLiveStream
" : {
"maxVideoResolution" : {
"width" : 640,
"height" : 480
},
"videoCodecs" : ["H264"],
"audioCodecs" : ["AAC"],
"supportedProtocols" : ["WEB_RTC"]
}
}
}
Comandos
GenerateRtspStream
Nest Cam (heredada)Solicita un token para acceder a una URL de transmisión en vivo RTSP.
Las URLs de transmisión en vivo RTSP no se pueden compartir entre clientes. Solo un cliente a la vez puede usar una URL de transmisión. Si varios clientes quieren transmitir desde la misma cámara al mismo tiempo, se deben enviar comandos RTSP para cada cliente individual, y cada uno de ellos debe usar su propia URL de transmisión.
Solicitud y respuesta GenerateRtspStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream
",
"params" : {}
}
Respuesta
{ "results" : { "streamUrls" : { "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken" }, "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "streamToken" : "g.0.streamingToken", "expiresAt" : "2018-01-04T18:30:00.000Z" } }
Campos de respuesta de GenerateRtspStream
Campo | Descripción | Tipo de datos |
---|---|---|
streamUrls |
Mapa de URLs de transmisión en vivo de RTSP. | object |
streamExtensionToken |
El token que se usa para extender el streamToken de una transmisión en vivo de RTSP. |
string Ejemplo: “CjY5Y3VKaTZwR3o4Y19YbTVfMF...” |
streamToken |
Es el token que se usa para acceder a una transmisión en vivo de RTSP. | string Ejemplo: “g.0.streamingToken” |
expiresAt |
Hora en la que vencen streamExtensionToken y streamToken , en formato RFC 3339. |
string Ejemplo: "2018-01-04T18:30:00.000Z" |
ExtendRtspStream
Nest Cam (heredada)Solicita un nuevo token de acceso a la URL de transmisión en vivo del RTSP para reemplazar uno válido antes de que venza. También se usa para reemplazar un token RTSP válido de una solicitud de comando ExtendRtspStream anterior.
Las sesiones de transmisión en vivo de la cámara solo son válidas por 5 minutos. Si necesitas extender la vida útil de una transmisión en vivo, usa el comando ExtendFormatStream adecuado de la función CameraLiveStream para el formato de transmisión que generaste.
Solicitud y respuesta de ExtendRtspStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream
",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Respuesta
{ "results" : { "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...", "streamToken" : "g.0.newStreamingToken", "expiresAt" : "2018-01-04T18:30:00.000Z" } }
Campos de solicitud de ExtendRtspStream
Campo | Descripción | Tipo de datos |
---|---|---|
streamExtensionToken |
Es el token que se usará para solicitar una extensión del token de transmisión RTSP. | string Ejemplo: "CjY5Y3VKaTZwR3o4Y19YbTVfMF…" |
Campos de respuesta de ExtendRtspStream
Campo | Descripción | Tipo de datos |
---|---|---|
streamExtensionToken |
Es el token que se usa para ver una transmisión en vivo de RTSP existente y solicitar una extensión para el token de transmisión. | string Ejemplo: “dGNUlTU2CjY5Y3VKaTZwR3o4Y1...” |
streamToken |
Es un token nuevo que se usará para acceder a una transmisión en vivo de RTSP existente. | string Ejemplo: "g.0.newStreamingToken" |
expiresAt |
Hora en la que vencen streamExtensionToken y streamToken , en formato RFC 3339. |
string Ejemplo: "2018-01-04T18:30:00.000Z" |
StopRtspStream
Nest Cam (heredada)Invalida un token de acceso RTSP válido y detiene la transmisión en vivo de RTSP vinculada a ese token de acceso.
Solicitud y respuesta StopRtspStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream
",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Respuesta
{}
Campos de la solicitud StopRtspStream
Campo | Descripción | Tipo de datos |
---|---|---|
streamExtensionToken |
El token que se usa para invalidar una transmisión en vivo de RTSP existente. | string Ejemplo: “CjY5Y3VKaTZwR3o4Y19YbTVfMF...” |
GenerateWebRtcStream
Nest Cam (heredada)Generar una transmisión en vivo de WebRTC para un dispositivo
Solicitud y respuesta de GenerateWebRtcStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream
",
"params" : {
"offerSdp" : "offerSdp"
}
}
Respuesta
{ "results" : { "answerSdp" : "answerSdp", "expiresAt" : "2020-01-04T18:30:00.000Z", "mediaSessionId" : "FE9WD8BAMcjViRNZrJm9tMJF0Q..." } }
Campos de solicitud de GenerateWebRtcStream
Te recomendamos que uses la muestra de aplicación web para aprender a generar una transmisión en vivo exitosa. Esta muestra
genera un offerSdp
válido que cumpla con todas las restricciones de ofertas de SDP para cámaras Nest.
Una oferta de SDP para cámaras Nest debe cumplir con las siguientes restricciones:
- Solo se admite el formato unificado. No se admite el plan B.
- Todas las líneas de medios (
m=
) deben estar presentes en la oferta y en este orden:- Audio
- video
- aplicación
- Trickle ICE es compatible, pero no es obligatorio.
- Solo se admite el códec Opus para el audio.
- La configuración de audio debe establecerse en
a=recvonly
(solo recepción). - La oferta debe terminar con un carácter de salto de línea
\r\n
o\n
.
Consulta un ejemplo de una oferta válida
Sin formato:
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
Con formato:
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 | Descripción | Tipo de datos |
---|---|---|
offerSdp |
Una oferta de SDP específica para el dispositivo local que mostrará la transmisión en vivo de WebRTC | string Ejemplo: “offerSdp” |
Campos de respuesta de GenerateWebRtcStream
Se debe usar answerSdp
para generar la transmisión en vivo dentro de los 30 segundos posteriores a la recepción de la respuesta; de lo contrario, vencerá. Si vence, vuelve a ejecutar el comando GenerateWebRtcStream para recibir un answerSdp
nuevo.
Cuando abras canales de WebRTC para la transmisión en vivo, asegúrate de crear un canal de datos y un canal de video.
Campo | Descripción | Tipo de datos |
---|---|---|
answerSdp |
Es una respuesta SDP que se usará con el dispositivo local que mostrará la transmisión en vivo de WebRTC. | string Ejemplo: “answerSdp” |
expiresAt |
Hora en la que vence el acceso a la transmisión en vivo de WebRTC, en formato RFC 3339. | string Ejemplo: "2020-01-04T18:30:00.000Z" |
mediaSessionId |
Es el ID de la sesión multimedia de la transmisión en vivo de WebRTC generada. | string Ejemplo: “FE9WD8BAMcjViRNZrJm9tMJF0Q...” |
ExtendWebRtcStream
Nest Cam (heredada)Solicita que se extienda el acceso a una transmisión en vivo existente de WebRTC antes de que venza.
Una transmisión de WebRTC solo se puede extender en cámaras con cable. Una cámara que funciona con batería se considera que funciona con cable mientras está enchufada para cargarse. Si la cámara funciona con batería, se ignorará una solicitud para extender una transmisión activa de WebRTC.
Las sesiones de transmisión en vivo de la cámara solo son válidas durante 5 minutos. Si necesitas extender la vida útil de una transmisión en vivo, usa el comando ExtendFormatStream adecuado de la función CameraLiveStream para el formato de transmisión que generaste.
Solicitud y respuesta de ExtendWebRtcStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.ExtendWebRtcStream
",
"params" : {
"mediaSessionId" : "FE9WD8BAMcjViRNZrJm9tMJF0Q..."
}
}
Respuesta
{ "results" : { "expiresAt" : "2018-01-04T18:30:00.000Z", "mediaSessionId" : "FE9WD8BAMcjViRNZrJm9tMJF0Q..." } }
Campos de solicitud de ExtendWebRtcStream
Campo | Descripción | Tipo de datos |
---|---|---|
mediaSessionId |
ID de la sesión multimedia de la transmisión en vivo de WebRTC que se extenderá. | string Ejemplo: "FE9WD8BAMcjViRNZrJm9tMJF0Q…" |
Campos de respuesta de ExtendWebRtcStream
Campo | Descripción | Tipo de datos |
---|---|---|
expiresAt |
La nueva hora a la que vence el acceso a la transmisión en vivo de WebRTC, en formato RFC 3339. | string Ejemplo: “2018-01-04T18:30:00.000Z” |
mediaSessionId |
Es el ID de sesión multimedia de la transmisión en vivo de WebRTC que se extendió. | string Ejemplo: "FE9WD8BAMcjViRNZrJm9tMJF0Q…" |
StopWebRtcStream
Nest Cam (heredada)Invalida una sesión multimedia de WebRTC válida y detiene la transmisión en vivo de WebRTC vinculada a esa sesión.
Solicitud y respuesta de StopWebRtcStream
Solicitud
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopWebRtcStream
",
"params" : {
"mediaSessionId" : "FE9WD8BAMcjViRNZrJm9tMJF0Q..."
}
}
Respuesta
{}
Campos de la solicitud StopWebRtcStream
Campo | Descripción | Tipo de datos |
---|---|---|
mediaSessionId |
ID de la sesión multimedia de la transmisión en vivo de WebRTC que se debe detener. | string Ejemplo: “FE9WD8BAMcjViRNZrJm9tMJF0Q...” |
Errores
Se pueden mostrar los siguientes códigos de error en relación con esta característica:
Mensaje de error | RPC | Solución de problemas |
---|---|---|
La cámara no está disponible para la transmisión. | FAILED_PRECONDITION |
La cámara está sin conexión o no está disponible para la transmisión debido a un problema técnico. |
El comando no es compatible con el timbre. | FAILED_PRECONDITION |
No se puede extender una transmisión de WebRTC en los timbres que funcionan con batería. Si se necesita ver una transmisión en un timbre más allá de la duración de la sesión inicial, detén la transmisión existente y genera una nueva. |
Permiso denegado. | PERMISSION_DENIED |
user no concedió developer
los permisos de dispositivo adecuados en el Administrador de conexiones de socios (PCM) necesarios para ejecutar un
cuando se genera una transmisión en vivo de WebRTC. Cuando se genera una transmisión en vivo de WebRTC, este error también puede significa que la configuración de audio en offerSdp no es correcta. |
Consulta la referencia de códigos de error de API para la lista completa de códigos de error de API.