Схема CameraLiveStream

Nest Cam (устаревшая) Nest Cam (уличная/для помещений, на батарее) Nest Cam с прожектором Nest Cam (для помещений, проводная) Nest Hub Max Nest Doorbell (устаревшая) Дверной звонок Nest (с батареей) Дверной звонок Nest (проводной) 

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 (устаревшая модель) Nest Hub Max Nest Doorbell (устаревшая модель) 

Запросите токен для доступа к 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 (устаревшая модель) Nest Hub Max Nest Doorbell (устаревшая модель) 

Запросите новый токен доступа к 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 (устаревшая модель) Nest Hub Max Nest Doorbell (устаревшая модель) 

Аннулирует действительный токен доступа 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 (устаревшая модель) Nest Cam (уличная/для помещений, на батарее) Nest Cam с прожектором Nest Cam (для помещений, проводная) дверной звонок Nest (с батареей) Nest Doorbell (проводной) 

Создание трансляции 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" : "F4EKIw7iTWiyBo3rvtg8CuI16Y..."
  }
}

Поля запроса GenerateWebRtcStream

Чтобы узнать, как создать трансляцию, рекомендуем использовать образец веб-приложения. В этом примере создается действительный offerSdp, который соответствует всем ограничениям предложения SDP для камер Nest.

Предложение SDP для камер Nest должно соответствовать следующим ограничениям:

  • Поддерживается только единый формат. План Б не поддерживается.
  • Все строки с медиаконтентом (m=) должны присутствовать в предложении и быть расположены в следующем порядке:
    1. аудио
    2. видео
    3. приложение
  • Поддержка Trickle ICE не обязательна.
  • Для аудио поддерживается только кодек Opus.
  • Для параметра "Аудио" должно быть задано значение 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
Пример: "F4EKIw7iTWiyBo3rvtg8CuI16Y..."

ExtendWebRtcStream

Nest Cam (устаревшая) Nest Cam (уличная/для помещений, на батарее) Nest Cam с прожектором Nest Cam (для помещений, проводная) Nest Doorbell (проводной)   Проводная   

Запросить продление доступа к существующей трансляции WebRTC до истечения срока его действия.

Поток WebRTC можно продлить только на камерах, подключенных к сети. Камера с батареей считается подключенной к сети, когда она заряжается. Если камера питается от батареи, запрос на продление активной трансляции WebRTC будет игнорироваться.

Сеансы трансляции с камеры действительны только в течение пяти минут. Если вам нужно продлить трансляцию, используйте команду ExtendFormatStream из CameraLiveStream для сгенерированного вами формата трансляции.

Запрос и ответ ExtendWebRtcStream

Запрос

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

Ответ

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

Поля запроса ExtendWebRtcStream

Поле Описание Тип данных
mediaSessionId Идентификатор медиасеанса прямой трансляции WebRTC, который нужно продлить. string
Пример: "F4EKIw7iTWiyBo3rvtg8CuI16Y..."

Поля ответа ExtendWebRtcStream

Поле Описание Тип данных
expiresAt Новое время, когда истекает срок доступа к трансляции WebRTC, в формате RFC 3339. string
Пример: "2018-01-04T18:30:00.000Z"
mediaSessionId Идентификатор медиасеанса прямой трансляции WebRTC, который был продлен. string
Пример: "F4EKIw7iTWiyBo3rvtg8CuI16Y..."

StopWebRtcStream

Nest Cam (устаревшая модель) Nest Cam (уличная/для помещений, на батарее) Nest Cam с прожектором Nest Cam (для помещений, проводная) дверной звонок Nest (с батареей) Nest Doorbell (проводной) 

Аннулирует действительный медиасеанс WebRTC и останавливает трансляцию WebRTC, связанную с этим сеансом.

Запрос и ответ StopWebRtcStream

Запрос

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

Ответ

{}

Поля запроса StopWebRtcStream

Поле Описание Тип данных
mediaSessionId Идентификатор медиасеанса трансляции WebRTC, которую нужно остановить. string
Пример: "F4EKIw7iTWiyBo3rvtg8CuI16Y..."

Ошибки

Для этого атрибута могут возвращаться следующие коды ошибок:

Сообщение об ошибке Доход от клика Устранение неполадок
Камера недоступна для трансляции. FAILED_PRECONDITION Камера отключена от интернета или недоступна для трансляции из-за технической проблемы.
Команда не поддерживается для дверного звонка. FAILED_PRECONDITION Потоков WebRTC нельзя продлевать на дверных звонках с питанием от батареи. Если нужно посмотреть трансляцию с дверного звонка дольше, чем длится сеанс, остановите текущую трансляцию и запустите новую.
Доступ запрещен. PERMISSION_DENIED user не предоставил developerнеобходимые разрешения на уровне устройства в Управлении партнерским доступом (PCM), чтобы выполнить команду.

При создании трансляции WebRTC эта ошибка также может означать, что в offerSdp неправильно настроен звук.

Полный список кодов ошибок API приведен в Справочнике по кодам ошибок API.