CameraLiveStream 스키마

Nest Cam(이전 버전) Nest Cam(실내용 또는 실외용, 배터리) Nest Cam(투광등 번들) Nest Cam(실내용, 유선) Nest Hub Max Nest Doorbell(이전 버전) Nest Doorbell(배터리) Nest Doorbell(유선) 

sdm.devices.traits.CameraLiveStream

이 특성은 라이브 스트리밍을 지원하는 모든 기기에 적용됩니다.

필드

필드 설명 데이터 유형
maxVideoResolution 동영상 라이브 스트림의 최대 해상도입니다. VideoResolution
videoCodecs 라이브 스트림에 지원되는 동영상 코덱입니다. array(string)
Value: ["H264"]
audioCodecs 라이브 스트림에 지원되는 오디오 코덱입니다. array(string)
Value: ["AAC"]
supportedProtocols 기기에서 지원하는 스트리밍 프로토콜입니다. 이 필드의 값은 기기에 지원되는 명령어를 나타냅니다. 예를 들어 이 필드에 WEB_RTC가 포함되어 있으면 WEB_RTC 명령어만 지원됩니다. array(string)
Value: ["RTSP", "WEB_RTC"]

VideoResolution (maxVideoResolution)

필드 설명 데이터 유형
width 최대 이미지 해상도 너비입니다. 다운로드 URL에서 쿼리 매개변수로도 사용할 수 있습니다. int32
Example: 640
height 최대 이미지 해상도 높이입니다. 다운로드 URL에서 쿼리 매개변수로도 사용할 수 있습니다. int32
Example: 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" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    }
  }
}

명령어

GenerateRtspStream

Nest Cam (이전 버전) Nest Hub Max Nest Doorbell (이전 버전) 

RTSP 라이브 스트림 URL에 액세스하기 위한 토큰을 요청합니다.

RTSP 라이브 스트림 URL은 클라이언트 간에 공유할 수 없습니다. 스트림 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 RTSP 라이브 스트림 URL의 지도입니다. object
streamExtensionToken RTSP 라이브 스트림의 streamToken을 확장하는 데 사용할 토큰입니다. string
Example: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
streamToken RTSP 라이브 스트림에 액세스하는 데 사용할 토큰입니다. string
Example: "g.0.streamingToken"
expiresAt streamExtensionTokenstreamToken이 모두 만료되는 시간입니다(RFC 3339 형식). string
Example: "2018-01-04T18:30:00.000Z"

ExtendRtspStream

Nest Cam (이전 버전) Nest Hub Max Nest Doorbell (이전 버전) 

만료되기 전에 유효한 RTSP 액세스 토큰을 대체할 새 RTSP 라이브 스트림 URL 액세스 토큰을 요청합니다. 이전 ExtendRtspStream 명령어 요청의 유효한 RTSP 토큰을 대체하는 데도 사용됩니다.

카메라 라이브 스트림 세션은 5분 동안만 유효합니다. 라이브 스트림의 수명을 연장해야 하는 경우 생성한 스트림 형식에 맞는CameraLiveStream특성의 적절한 ExtendFormatStream 명령어를 사용하세요.

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
Example: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

ExtendRtspStream 응답 필드

필드 설명 데이터 유형
streamExtensionToken 기존 RTSP 라이브 스트림을 보고 스트리밍 토큰에 대한 확장을 요청하는 데 사용할 토큰입니다. string
Example: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..."
streamToken 기존 RTSP 라이브 스트림에 액세스하는 데 사용할 새 토큰입니다. string
Example: "g.0.newStreamingToken"
expiresAt streamExtensionTokenstreamToken이 모두 만료되는 시간입니다(RFC 3339 형식). string
Example: "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
Example: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

GenerateWebRtcStream

Nest Cam(이전 버전) Nest Cam(실내용 또는 실외용, 배터리) Nest Cam(투광등 번들) Nest Cam(실내용, 유선) Nest Doorbell(배터리) 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" : "Tp-TEPvJ8Qseo3FShZCAFjXopl..."
  }
}

GenerateWebRtcStream 요청 필드

성공적인 라이브 스트림을 생성하는 방법을 알아보려면 웹 애플리케이션 샘플을 사용하는 것이 좋습니다. 이 샘플 은 Nest 카메라의 모든 SDP offer 제한사항을 충족하는 유효한 offerSdp를 생성합니다.

Nest 카메라의 SDP offer는 다음 제한사항을 충족해야 합니다.

  • 통합 형식만 지원됩니다. Plan B는 지원되지 않습니다.
  • 모든 미디어 행 (m=)은 offer에 있어야 하며 다음 순서로 있어야 합니다:
    1. 오디오
    2. 동영상
    3. 애플리케이션
  • Trickle ICE는 지원되지만 필수는 아닙니다.
  • 오디오에는 Opus 코덱만 지원됩니다.
  • 오디오 설정은 a=recvonly (수신 전용)로 설정해야 합니다.
  • offer는 \r\n 또는 \n의 줄바꿈 문자로 끝나야 합니다.

유효한 offer의 예 보기

형식 지정되지 않음:

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 WebRTC 라이브 스트림을 표시할 로컬 기기 전용 SDP offer입니다. string
Example: "offerSdp"

GenerateWebRtcStream 응답 필드

answerSdp는 응답을 받은 후 30초 이내에 라이브 스트림을 생성하는 데 사용해야 하며, 그렇지 않으면 만료됩니다. 만료되면 GenerateWebRtcStream 명령어를 다시 실행하여 새 answerSdp를 받습니다.

라이브 스트림의 WebRTC 채널을 열 때는 동영상 채널뿐만 아니라 데이터 채널도 만들어야 합니다.

필드 설명 데이터 유형
answerSdp WebRTC 라이브 스트림을 표시할 로컬 기기와 함께 사용할 SDP answer입니다. string
Example: "answerSdp"
expiresAt WebRTC 라이브 스트림에 대한 액세스가 만료되는 시간입니다(RFC 3339 형식). string
Example: "2020-01-04T18:30:00.000Z"
mediaSessionId 생성된 WebRTC 라이브 스트림의 미디어 세션 ID입니다. string
Example: "Tp-TEPvJ8Qseo3FShZCAFjXopl..."

ExtendWebRtcStream

Nest Cam(이전 버전) Nest Cam(실내용 또는 실외용, 배터리) Nest Cam(투광등 번들) Nest Cam(실내용, 유선) Nest Doorbell(유선)   유선   

만료되기 전에 기존 WebRTC 라이브 스트림에 대한 액세스를 연장하도록 요청합니다.

WebRTC 스트림은 유선 전원 카메라에서만 연장할 수 있습니다. 배터리 전원 카메라는 충전을 위해 연결되어 있는 동안 유선 전원 카메라로 간주됩니다. 카메라가 배터리 전원을 사용하는 경우 활성 WebRTC 스트림을 연장하라는 요청은 무시됩니다.

카메라 라이브 스트림 세션은 5분 동안만 유효합니다. 라이브 스트림의 수명을 연장해야 하는 경우 생성한 스트림 형식에 맞는CameraLiveStream특성의 적절한 ExtendFormatStream 명령어를 사용하세요.

ExtendWebRtcStream 요청 및 응답

요청

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

응답

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

ExtendWebRtcStream 요청 필드

필드 설명 데이터 유형
mediaSessionId 연장할 WebRTC 라이브 스트림의 미디어 세션 ID입니다. string
Example: "Tp-TEPvJ8Qseo3FShZCAFjXopl..."

ExtendWebRtcStream 응답 필드

필드 설명 데이터 유형
expiresAt WebRTC 라이브 스트림에 대한 액세스가 만료되는 새 시간입니다(RFC 3339 형식). string
Example: "2018-01-04T18:30:00.000Z"
mediaSessionId 연장된 WebRTC 라이브 스트림의 미디어 세션 ID입니다. string
Example: "Tp-TEPvJ8Qseo3FShZCAFjXopl..."

StopWebRtcStream

Nest Cam(이전 버전) Nest Cam(실내용 또는 실외용, 배터리) Nest Cam(투광등 번들) Nest Cam(실내용, 유선) Nest Doorbell(배터리) Nest Doorbell(유선) 

유효한 WebRTC 미디어 세션을 무효화하고 해당 세션에 연결된 WebRTC 라이브 스트림을 중지합니다.

StopWebRtcStream 요청 및 응답

요청

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

응답

{}

StopWebRtcStream 요청 필드

필드 설명 데이터 유형
mediaSessionId 중지할 WebRTC 라이브 스트림의 미디어 세션 ID입니다. string
Example: "Tp-TEPvJ8Qseo3FShZCAFjXopl..."

오류

이 특성과 관련하여 다음 오류 코드가 반환될 수 있습니다.

오류 메시지 RPC 문제 해결
카메라를 스트리밍할 수 없습니다. FAILED_PRECONDITION 기술적 문제로 인해 카메라가 오프라인 상태이거나 스트리밍할 수 없습니다.
Doorbell에는 명령어가 지원되지 않습니다. FAILED_PRECONDITION WebRTC 스트림은 배터리 전원 Doorbell에서 연장할 수 없습니다. Doorbell의 스트림을 초기 세션 길이 이상으로 보려면 기존 스트림을 중지하고 새 스트림을 생성하세요.
권한이 거부되었습니다. PERMISSION_DENIED user 에서 명령어를 실행하는 데 필요한 적절한 기기 수준 권한을 파트너 연결 관리자 (PCM)에서 부여하지 않았습니다.

WebRTC 라이브 스트림을 생성할 때 이 오류는 offerSdp의 오디오 설정이 잘못되었음을 의미할 수도 있습니다. developer

전체 API 오류 코드 목록은 API 오류 코드 참조에서 확인하세요.