CameraLiveStream 結構定義

Nest Cam (舊版) Nest Cam Indoor/Outdoor (電池版) Nest Cam (搭配泛光燈) Nest Cam Indoor (有線版) Nest Hub Max Nest Doorbell (舊版) Nest Doorbell (電池版) Nest Doorbell (有線版) 

sdm.devices.traits.CameraLiveStream

凡是支援直播的裝置,都屬於這項特徵。

欄位

欄位 說明 資料類型
maxVideoResolution 影片直播的最高解析度。 VideoResolution
videoCodecs 直播支援的影片轉碼器。 array(string)
Value: ["H264"]
audioCodecs 直播支援的音訊轉碼器。 array(string)
值:["AAC"]
supportedProtocols 裝置支援的串流通訊協定。這個欄位的值會指出裝置支援哪些指令。舉例來說,如果這個欄位包含 WEB_RTC,則只支援 WEB_RTC 指令。 array(string)
值:["RTSP", "WEB_RTC"]

VideoResolution (maxVideoResolution)

欄位 說明 資料類型
width 圖片解析度寬度上限。也可以在下載網址中做為查詢參數使用。 int32
範例:640
height 圖片高度上限。也可以在下載網址中做為查詢參數使用。 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 直播網址的權杖。

RTSP 直播網址無法在用戶端之間共用。串流網址一次只能供一個用戶端使用。如果多個用戶端想同時從同一部攝影機串流,則必須為每個用戶端傳送 RTSP 指令,且每個用戶端都必須使用自己的串流網址。

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 直播網址對應。 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 直播網址存取權杖來取代。這項參數也可用於取代先前 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
示例:「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 Indoor/Outdoor (電池版) Nest Cam (搭配泛光燈) Nest Cam Indoor (有線版) 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" : "5TbN9Y7jsz58_2sX5Pnfn-R81M..."
  }
}

GenerateWebRtcStream 要求的欄位

建議您使用網頁應用程式範例,瞭解如何順利產生直播。這個範例會產生有效的 offerSdp,符合 Nest 攝影機的所有 SDP 提案限制。

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 SDP 提案,專用於顯示 WebRTC 直播串流的本機裝置。 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
示例:「5TbN9Y7jsz58_2sX5Pnfn-R81M...」

ExtendWebRtcStream

Nest Cam (舊版) Nest Cam Indoor/Outdoor (電池版) Nest Cam (搭配泛光燈) Nest Cam Indoor (有線版) 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" : "5TbN9Y7jsz58_2sX5Pnfn-R81M..."
  }
}

回應

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

ExtendWebRtcStream 要求欄位

欄位 說明 資料類型
mediaSessionId 要延長的 WebRTC 直播媒體工作階段 ID。 string
示例:「5TbN9Y7jsz58_2sX5Pnfn-R81M...」

ExtendWebRtcStream 回應欄位

欄位 說明 資料類型
expiresAt WebRTC 直播串流存取權的新到期時間,採用 RFC 3339 格式。 string
示例:「2018-01-04T18:30:00.000Z」
mediaSessionId 已延長的 WebRTC 直播媒體工作階段 ID。 string
示例:「5TbN9Y7jsz58_2sX5Pnfn-R81M...」

StopWebRtcStream

Nest Cam (舊版) Nest Cam Indoor/Outdoor (電池版) Nest Cam (搭配泛光燈) Nest Cam Indoor (有線版) Nest Doorbell (電池版) Nest Doorbell (有線版) 

使有效的 WebRTC 媒體工作階段失效,並停止與該工作階段相關聯的 WebRTC 直播。

StopWebRtcStream 要求和回應

要求

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

回應

{}

StopWebRtcStream 要求欄位

欄位 說明 資料類型
mediaSessionId 要停止的 WebRTC 直播媒體工作階段 ID。 string
示例:「5TbN9Y7jsz58_2sX5Pnfn-R81M...」

錯誤

系統可能會傳回下列與這項特徵相關的錯誤代碼:

錯誤訊息 單次點擊收益 疑難排解
攝影機無法串流播放畫面。 FAILED_PRECONDITION 攝影機離線或發生技術問題,因此無法串流。
門鈴不支援這項指令。 FAILED_PRECONDITION 使用電池供電的門鈴無法延長 WebRTC 串流。如要觀看門鈴的串流超過初始工作階段長度,請停止現有串流並產生新的串流。
權限遭拒。 PERMISSION_DENIED user 尚未在合作夥伴連結管理工具 (PCM) 中授予 developer執行指令所需的適當裝置層級權限。

產生 WebRTC 直播時,這個錯誤也可能表示 offerSdp 中的音訊設定不正確。

如需完整的 API 錯誤代碼清單,請參閱 API 錯誤代碼參考資料