CameraLiveStream 스키마

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

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

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

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

GenerateWebRtcStream 요청 필드

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

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

  • 통합 형식만 지원됩니다. 요금제 B는 지원되지 않습니다.
  • 혜택에는 모든 미디어 라인 (m=)이 있어야 하며 다음 순서를 따라야 합니다.
    1. audio
    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 응답 필드

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

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

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

ExtendWebRtcStream

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

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

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

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

ExtendWebRtcStream 요청 및 응답

요청

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

대응

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

ExtendWebRtcStream 요청 필드

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

ExtendWebRtcStream 응답 필드

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

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

대응

{}

StopWebRtcStream 요청 필드

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

오류

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

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

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

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