智慧型住宅 CameraStream 特徵結構定義
action.devices.traits.CameraStream
- 這個特徵涵蓋如何控制裝置的相機串流。
這類特徵包括能夠將影片動態消息串流至智慧螢幕、支援 Chromecast 的裝置或智慧型手機的裝置。主要為監視攝影機或嬰兒攝影機。不過,這種特徵也適用於配備攝影機的較複雜裝置 (例如視訊會議裝置或有攝影機的吸塵器)。
裝置特徵
具有此特徵的裝置可能會在執行 SYNC
作業時回報下列屬性。如要進一步瞭解如何處理 SYNC
意圖,請參閱「意圖執行要求」。
屬性 | 類型 | 說明 |
---|---|---|
cameraStreamSupportedProtocols |
陣列 |
必要。 攝影機串流支援的媒體類型,依偏好設定排序。系統通常會要求這個陣列中的第一個與目標介面相容的通訊協定。 |
[item, ...] |
String |
媒體類型。 支援的值:
|
cameraStreamNeedAuthToken |
布林值 |
必要。 是否將透過 |
範例
支援多種通訊協定的相機,不需要驗證權杖。
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
相機支援單一通訊協定,需要驗證權杖。
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
支援的串流通訊協定
此特徵支援下列串流通訊協定:
webrtc
:WebRTChls
:HTTP 即時串流dash
:透過 HTTP 動態自動調整串流smooth_stream
:流暢串流progressive_mp4
:漸進式 MP4 (主要用於短片)
將 hls
、dash
、smooth_stream
和 progressive_mp4
通訊協定串流至投放裝置 (Chromecast、智慧螢幕和支援 Chromecast 的智慧型電視) 時,系統會啟動投放網路接收器,以便處理串流並在裝置上顯示。建議開發人員建立自訂網路接收端,以便存取偵錯工具、自訂玩家行為、自訂 UI 品牌宣傳,並加入數據分析。如要啟用自訂接收器並選擇不採用預設接收器,請在 EXECUTE
回應的 cameraStreamReceiverAppId
欄位中,設定註冊投放應用程式時產生的接收器應用程式 ID。
如要進一步瞭解自訂網路接收器應用程式,請參閱開發人員網站的指南。
裝置狀態
無。
裝置指令
具備此特徵的裝置可能會在 EXECUTE
作業中回應下列指令。如要進一步瞭解如何處理 EXECUTE
意圖,請參閱「意圖執行要求」。
action.devices.commands.GetCameraStream
參數
參數 | 類型 | 說明 |
---|---|---|
StreamToChromecast |
布林值 |
必要。 是否要在 Chromecast 裝置上播放串流內容。 |
SupportedStreamProtocols |
陣列 |
必要。 所需目的地支援的媒體類型/格式。 |
[item, ...] |
String |
媒體類型。 支援的值:
|
成果
成果 | 類型 | 說明 |
---|---|---|
cameraStreamAuthToken |
String |
特定接收端的驗證權杖,可用來授權存取串流。如果 |
cameraStreamProtocol |
String |
必要。 串流網址指向的媒體格式。這個值應為 支援的值:
|
非 WebRTC 結果
成果 | 類型 | 說明 |
---|---|---|
cameraStreamAccessUrl |
String |
必要。 以 |
cameraStreamReceiverAppId |
String |
在 |
WebRTC 結果
成果 | 類型 | 說明 |
---|---|---|
cameraStreamSignalingUrl |
String |
必要。 用於擷取及交換相機和用戶端工作階段說明通訊協定 (SDP) 的網址端點。用戶端應傳回信號網址,並在要求標頭中使用 |
cameraStreamOffer |
String |
優惠工作階段說明通訊協定 (SDP)。 |
cameraStreamIceServers |
String |
代表使用經過編碼的 JSON 字串和 RTCIceServer 說明的互動式連線建立 (ICE) 伺服器。如未指定 STUN (適用於 NAT 的 Session Traversal Utilities) 伺服器,該平台會預設為 Google 的公開 STUN 伺服器。只有在您無法保證所提供的 IP / ICE 可公開存取 (例如透過媒體伺服器、公用代管 ICE 候選項目、轉發 ICE 候選人等) 時,才需要使用 cent (使用 Relay 遍及 NAT) 伺服器。 |
範例
顯示前門攝影機畫面 (預設 Cast 接收器)。
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
顯示前門攝影機畫面 (自訂 Cast 接收器)。
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
顯示前門攝影機 (WebRTC 串流)。
{ "cameraStreamIceServers": "[{\"urls\": \"stun:stun.l.partner.com:19302\"},{\"urls\":\"turn:192.158.29.39:3478?transport=udp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"},{\"urls\": \"turn:192.158.29.39:3478?transport=tcp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"}]", "cameraStreamSignalingUrl": "https://example.com/signaling/answer", "cameraStreamOffer": "o=- 4611731400430051336 2 IN IP4 127.0.0.1...", "cameraStreamProtocol": "webrtc" }
裝置錯誤
請參閱錯誤和例外狀況的完整清單。WebRTC 通訊協定規格
使用 WebRTC 的優點是低延遲和單向通話。WebRTC 會使用 POST
方法,其中包含 POST
主體和 JSON 格式的回應。
WebRTC 目前支援 Google Nest 智慧螢幕和 Chromecast (支援 Google TV) 裝置。
本節說明使用 WebRTC 串流通訊協定的需求條件。
資料類型 | 參數/定義 |
---|---|
信號要求標頭 |
標頭必須符合以下規定:
|
信號要求參數 | 該要求可包含以下參數:
|
信號回應參數 | 回應可包含以下參數:
|
WebRTC 需求條件與建議
- Google 目前支援單向 (半雙工) 通訊。
- 您必須支援繫結和 rtcp-mux。
- 您必須使用 (D)TLS 1.2 以上版本。
- 不支援魔術 ICE。 請務必先收集所有 ICE 候選人,再傳送 SDP。
- 強烈建議您納入 UDP/IPv4、TCP/IPv4、UDP/IPv6 和 TCP/IPv6 ICE 候選項目,以便提高連線成功的機率。
支援的影片解析度:
- 最低解析度:480p
- 最高:1080p
支援的影片轉碼器:
- VP8
- H.264
支援的音訊轉碼器:
- Opus (建議轉碼器)
- G.711/PCMU
- G.722
跨源資源共享
跨源資源共享 (CORS) 機制會使用額外的 HTTP 標頭,指示瀏覽器允許在一個來源執行的網頁應用程式存取不同來源的所選資源。代管 cameraStreamSignalingUrl
的伺服器應回應下列標頭:
Access-Control-Allow-Origin: https://www.gstatic.com
信號要求與回應範例
以下範例顯示 Google 傳送至信號服務的要求,以及傳送至 Google 的對應回應。
Header: Authentication: Bearer <cameraStreamAuthToken> Content-Type: application/json POST body: // When camera offer SDP is provided in the execution response, Google provides an answer SDP. { "action": "answer", "deviceId": "123", "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // When camera offer SDP is not provided in execution response, Google generates and provides an offer SDP. { "action": "offer", "deviceId": "123", "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // Close the current stream session. { "action": "end" "deviceId": "123" }
// Response to accept the answer SDP in the request. Response Code : 200 {} // Response to provide the answer SDP from the service provider. Response Code : 200 { // When the camera offer SDP is not provided in the execution response, // Google provides the answer SDP via the signaling response. "action": "answer" "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // Response to close current session. Response Code : 200 {}