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)
값: ["H264"]
audioCodecs 라이브 스트림에 지원되는 오디오 코덱입니다. array(string)
값: ["AAC"]
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" : ["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
예: 'CjY5Y3VKaTZwR3o4Y19YbTVfMF...'
streamToken RTSP 라이브 스트림에 액세스하는 데 사용할 토큰입니다. string
예: 'g.0.streamingToken'
expiresAt streamExtensionTokenstreamToken가 모두 만료되는 시간입니다(RFC 3339 형식). string
예: '2018-01-04T18:30:00.000Z'

ExtendRtspStream

Nest Cam (기존) Nest Hub Max Nest Doorbell (기존) 

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

카메라 라이브 스트림 세션은 5분 동안만 유효합니다. 라이브 스트림의 전체 기간을 연장해야 하는 경우 생성한 스트림 형식에 적절한 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 streamExtensionTokenstreamToken가 모두 만료되는 시간입니다(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 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" : "c8rgcgkWX2c6pXol2EJaLoDgLy..."
  }
}

GenerateWebRtcStream 요청 필드

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

Nest 카메라용 SDP 제품은 다음 제한사항을 충족해야 합니다.

  • 통합 형식만 지원됩니다. Plan B는 지원되지 않습니다.
  • 모든 미디어 라인 (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 WebRTC 라이브 스트림을 표시할 로컬 기기에 관한 SDP 오퍼입니다. string
예: 'offerSdp'

GenerateWebRtcStream 응답 필드

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

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

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

ExtendWebRtcStream

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

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

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

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

ExtendWebRtcStream 요청 및 응답

요청

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

응답

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

ExtendWebRtcStream 요청 필드

필드 설명 데이터 유형
mediaSessionId WebRTC 라이브 스트림의 미디어 세션 ID가 연장됩니다. string
예: 'c8rgcgkWX2c6pXol2EJaLoDgLy...'

ExtendWebRtcStream 응답 필드

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

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" : "c8rgcgkWX2c6pXol2EJaLoDgLy..."
  }
}

응답

{}

StopWebRtcStream 요청 필드

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

오류

이 트레잇과 관련하여 다음과 같은 오류 코드가 반환될 수 있습니다.

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

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

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