Схема CameraLiveStream
Nest Cam (устаревшая)
sdm.devices.traits.CameraLiveStream
Эта черта относится к любому устройству, которое поддерживает прямые трансляции.
Поля
| Поле | Описание | Тип данных |
|---|---|---|
maxVideoResolution |
Максимальное разрешение видео в прямой трансляции. | VideoResolution |
videoCodecs |
Видеокодеки, поддерживаемые для прямой трансляции. | array(string)Значение: ["H264"] |
audioCodecs |
Аудиокодеки, поддерживаемые для трансляции. | array(string)Значение: ["OPUS"] |
supportedProtocols |
Протоколы потоковой передачи, поддерживаемые устройством. Значение этого поля указывает, какие команды поддерживаются устройством. Например, если в этом поле указано WEB_RTC, поддерживаются только команды WEB_RTC. | array(string)Значение: ["RTSP", "WEB_RTC"] |
VideoResolution (maxVideoResolution)
| Поле | Описание | Тип данных |
|---|---|---|
width |
Максимальная ширина изображения. Также может использоваться как параметр запроса в URL для скачивания. | int32Пример: 640. |
height |
Максимальная высота изображения. Также может использоваться как параметр запроса в URL для скачивания. | int32Пример: 480. |
Пример запроса GET и ответа
Запрос
GET /enterprises/project-id/devices/device-id
Ответ
{
"name" : "enterprises/project-id/devices/device-id",
"traits" : {
"sdm.devices.traits.CameraLiveStream" : {
"maxVideoResolution" : {
"width" : 640,
"height" : 480
},
"videoCodecs" : ["H264"],
"audioCodecs" : ["OPUS"],
"supportedProtocols" : ["WEB_RTC"]
}
}
}Команды
GenerateRtspStream
Nest Cam (устаревшая модель)Запросите токен для доступа к URL прямой трансляции RTSP.
URL трансляций RTSP нельзя передавать между клиентами. URL трансляции может одновременно использоваться только одним клиентом. Если несколько клиентов хотят одновременно получать трансляцию с одной камеры, команды RTSP должны быть отправлены для каждого отдельного клиента, и каждый отдельный клиент должен использовать свой собственный URL-адрес потока.
Запрос и ответ GenerateRtspStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
"params" : {}
}
Ответ
{
"results" : {
"streamUrls" : {
"rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
},
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
"streamToken" : "g.0.streamingToken",
"expiresAt" : "2018-01-04T18:30:00.000Z"
}
}
Поля ответа GenerateRtspStream
| Поле | Описание | Тип данных |
|---|---|---|
streamUrls |
Карта URL трансляций RTSP. | object |
streamExtensionToken |
Токен, который используется для продления streamToken для трансляции RTSP. |
stringПример: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." |
streamToken |
Токен для доступа к трансляции RTSP. | stringПример: "g.0.streamingToken" |
expiresAt |
Время, когда истекает срок действия streamExtensionToken и streamToken, в формате RFC 3339. |
stringПример: "2018-01-04T18:30:00.000Z". |
ExtendRtspStream
Nest Cam (устаревшая модель)Запросите новый токен доступа к URL трансляции RTSP, чтобы заменить действительный токен доступа RTSP до истечения срока его действия. Он также используется для замены действительного токена RTSP из предыдущего запроса команды ExtendRtspStream.
Трансляция с камеры длится только пять минут. Если вам нужно продлить трансляцию, используйте команду ExtendFormatStream из CameraLiveStream для сгенерированного вами формата трансляции.
Запрос и ответ ExtendRtspStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Ответ
{
"results" : {
"streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
"streamToken" : "g.0.newStreamingToken",
"expiresAt" : "2018-01-04T18:30:00.000Z"
}
}
Поля запроса ExtendRtspStream
| Поле | Описание | Тип данных |
|---|---|---|
streamExtensionToken |
Токен, который используется для запроса на продление токена потоковой передачи RTSP. | stringПример: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." |
Поля ответа ExtendRtspStream
| Поле | Описание | Тип данных |
|---|---|---|
streamExtensionToken |
Токен, который используется для просмотра существующей трансляции RTSP и запроса на продление токена трансляции. | stringПример: dGNUlTU2CjY5Y3VKaTZwR3o4Y1... |
streamToken |
Новый токен для доступа к существующей трансляции RTSP. | stringПример: "g.0.newStreamingToken". |
expiresAt |
Время, когда истекает срок действия streamExtensionToken и streamToken, в формате RFC 3339. |
stringПример: "2018-01-04T18:30:00.000Z". |
StopRtspStream
Nest Cam (устаревшая модель)Аннулирует действительный токен доступа RTSP и останавливает трансляцию RTSP, связанную с этим токеном доступа.
Запрос и ответ StopRtspStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Ответ
{}
Поля запроса StopRtspStream
| Поле | Описание | Тип данных |
|---|---|---|
streamExtensionToken |
Токен, который используется для аннулирования существующей трансляции RTSP. | stringПример: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." |
GenerateWebRtcStream
Nest Cam (предыдущая модель)Создать прямую трансляцию WebRTC для устройства.
Запрос и ответ GenerateWebRtcStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream",
"params" : {
"offerSdp" : "offerSdp"
}
}
Ответ
{
"results" : {
"answerSdp" : "answerSdp",
"expiresAt" : "2020-01-04T18:30:00.000Z",
"mediaSessionId" : "B95ou048NIMAQ7bLT1g-P_P8mp..."
}
}
Поля запроса GenerateWebRtcStream
Чтобы узнать, как создать трансляцию, рекомендуем использовать образец веб-приложения. Этот пример генерирует действительный offerSdp, который соответствует всем ограничениям предложения SDP для камер Nest.
Предложение SDP для камер Nest должно соответствовать следующим ограничениям:
- Поддерживается только единый формат. План B не поддерживается.
- В предложении должны быть указаны все строки медиаданных (
m=) в следующем порядке:- аудио
- видео
- приложение
- Поддержка Trickle ICE не обязательна.
- Для аудио поддерживается только кодек Opus.
- Для параметра audio должно быть задано значение
a=recvonly(только получение). - Предложение должно заканчиваться символом новой строки
\r\nили\n.
Пример действительного предложения
Без форматирования:
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
Форматирование:
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
| Поле | Описание | Тип данных |
|---|---|---|
offerSdp |
Предложение SDP, относящееся к локальному устройству, на котором будет показываться прямая трансляция WebRTC. | stringПример: offerSdp. |
Поля ответа GenerateWebRtcStream
answerSdp нужно использовать для создания трансляции в течение 30 секунд после получения ответа, иначе он станет недействительным. Если срок действия истек, выполните команду GenerateWebRtcStream ещё раз, чтобы получить новый токен answerSdp.
При открытии каналов WebRTC для прямой трансляции обязательно создайте канал данных и видеоканал.
| Поле | Описание | Тип данных |
|---|---|---|
answerSdp |
Ответ SDP, который будет использоваться на локальном устройстве, где будет показываться прямая трансляция WebRTC. | stringПример: answerSdp. |
expiresAt |
Время, когда истекает доступ к трансляции WebRTC, в формате RFC 3339. | stringПример: "2020-01-04T18:30:00.000Z". |
mediaSessionId |
Идентификатор медиасеанса сгенерированной прямой трансляции WebRTC. | stringПример: "B95ou048NIMAQ7bLT1g-P_P8mp..." |
ExtendWebRtcStream
Nest Cam (устаревшая)Запросите продление доступа к существующей трансляции WebRTC до истечения срока ее действия.
Продлить трансляцию WebRTC можно только на камерах, подключенных к сети электропитания. Камера с батареей считается подключенной к сети, когда она заряжается. Если камера работает от батареи, запрос на продление активной трансляции WebRTC будет проигнорирован.
Сеансы трансляции с камеры действительны только в течение пяти минут. Если вам нужно продлить время работы трансляции, используйте команду ExtendFormatStream CameraLiveStream для нужного формата.
Запрос и ответ ExtendWebRtcStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.ExtendWebRtcStream",
"params" : {
"mediaSessionId" : "B95ou048NIMAQ7bLT1g-P_P8mp..."
}
}
Ответ
{
"results" : {
"expiresAt" : "2018-01-04T18:30:00.000Z",
"mediaSessionId" : "B95ou048NIMAQ7bLT1g-P_P8mp..."
}
}
Поля запроса ExtendWebRtcStream
| Поле | Описание | Тип данных |
|---|---|---|
mediaSessionId |
Идентификатор сеанса воспроизведения трансляции WebRTC, которую нужно продлить. | stringПример: "B95ou048NIMAQ7bLT1g-P_P8mp..." |
Поля ответа ExtendWebRtcStream
| Поле | Описание | Тип данных |
|---|---|---|
expiresAt |
Новое время, когда истекает доступ к трансляции WebRTC, в формате RFC 3339. | stringПример: "2018-01-04T18:30:00.000Z". |
mediaSessionId |
Идентификатор сеанса воспроизведения продленной трансляции WebRTC. | stringПример: "B95ou048NIMAQ7bLT1g-P_P8mp..." |
StopWebRtcStream
Nest Cam (предыдущая модель)Аннулирует действительный сеанс медиа WebRTC и останавливает прямую трансляцию WebRTC, связанную с этим сеансом.
Запрос и ответ StopWebRtcStream
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopWebRtcStream",
"params" : {
"mediaSessionId" : "B95ou048NIMAQ7bLT1g-P_P8mp..."
}
}
Ответ
{}
Поля запроса StopWebRtcStream
| Поле | Описание | Тип данных |
|---|---|---|
mediaSessionId |
Идентификатор сеанса воспроизведения прямой трансляции WebRTC, которую нужно остановить. | stringПример: "B95ou048NIMAQ7bLT1g-P_P8mp..." |
Ошибки
Для этого атрибута могут возвращаться следующие коды ошибок:
| Сообщение об ошибке | Доход от клика | Устранение неполадок |
|---|---|---|
| Камера недоступна для трансляции. | FAILED_PRECONDITION |
Камера отключена или недоступна для трансляции из-за технической проблемы. |
| Команда не поддерживается для дверного звонка. | FAILED_PRECONDITION |
Потоков WebRTC нельзя продлевать на дверных звонках с питанием от батареи. Если вам нужно просматривать трансляцию с дверного звонка дольше, чем длится сеанс, остановите текущую трансляцию и запустите новую. |
| Доступ запрещен. | PERMISSION_DENIED |
user не предоставил developerнеобходимые разрешения на уровне устройства в Управлении партнерским доступом (PCM), чтобы выполнить команду. При создании трансляции WebRTC эта ошибка также может означать, что в offerSdp неправильно заданы настройки аудио. |
Полный список кодов ошибок API приведен в справочнике.