สคีมาของฟีเจอร์สตรีมกล้องสมาร์ทโฮม
action.devices.traits.CameraStream
- ลักษณะเฉพาะนี้อธิบายวิธีควบคุมสตรีมกล้องของอุปกรณ์
ลักษณะนี้เป็นของอุปกรณ์ที่มีความสามารถในการสตรีมวิดีโอฟีดไปยังจออัจฉริยะ อุปกรณ์ที่พร้อมใช้งาน Chromecast หรือสมาร์ทโฟน ส่วนใหญ่แล้วนี่ก็คือกล้องรักษาความปลอดภัยหรือกล้องทารก แต่ลักษณะเฉพาะนี้ยังมีผลกับอุปกรณ์ที่ซับซ้อนกว่าซึ่งมีกล้องอยู่ด้วย (เช่น อุปกรณ์การประชุมทางวิดีโอหรือหุ่นยนต์ดูดฝุ่นที่มีกล้อง)
แอตทริบิวต์อุปกรณ์
อุปกรณ์ที่มีลักษณะเฉพาะนี้อาจรายงานแอตทริบิวต์ต่อไปนี้เป็นส่วนหนึ่งของการดําเนินการ SYNC
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent ของ SYNC
ได้ที่การดําเนินการตามความตั้งใจ
แอตทริบิวต์ | ประเภท | คำอธิบาย |
---|---|---|
cameraStreamSupportedProtocols |
อาร์เรย์ |
ต้องระบุ ประเภทสื่อที่รองรับสําหรับสตรีมกล้อง โดยเรียงลําดับตามค่ากําหนด โดยปกติแล้ว ระบบจะขอโปรโตคอลแรกในอาร์เรย์นี้ที่เข้ากันได้กับแพลตฟอร์มเป้าหมาย |
[item, ...] |
สตริง |
ประเภทสื่อ ค่าที่รองรับมีดังต่อไปนี้
|
cameraStreamNeedAuthToken |
บูลีน |
ต้องระบุ จะระบุโทเค็นการตรวจสอบสิทธิ์ผ่าน |
ตัวอย่าง
กล้องที่รองรับโปรโตคอลหลายแบบที่ไม่ต้องใช้โทเค็นการตรวจสอบสิทธิ์
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
กล้องที่รองรับโปรโตคอลเดียวต้องใช้โทเค็นการตรวจสอบสิทธิ์
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
โปรโตคอลสตรีมมิงที่รองรับ
ลักษณะเฉพาะนี้รองรับโปรโตคอลสตรีมมิงต่อไปนี้
webrtc
: WebRTChls
: สตรีมมิงแบบสด HTTPdash
: การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTPsmooth_stream
: สตรีมมิงที่ราบรื่นprogressive_mp4
: Progressive MP4 (ใช้มากที่สุดสําหรับคลิป)
สถานะอุปกรณ์
ไม่มี
คําสั่งของอุปกรณ์
อุปกรณ์ที่มีลักษณะเฉพาะนี้อาจตอบสนองต่อคําสั่งต่อไปนี้ซึ่งเป็นส่วนหนึ่งของการดําเนินการ EXECUTE
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent ของ EXECUTE
ได้ที่การดําเนินการตามความตั้งใจ
action.devices.commands.GetCameraStream
พารามิเตอร์
พารามิเตอร์ | ประเภท | คำอธิบาย |
---|---|---|
StreamToChromecast |
บูลีน |
ต้องระบุ สตรีมจะเล่นในอุปกรณ์ Chromecast ไหม |
SupportedStreamProtocols |
อาร์เรย์ |
ต้องระบุ ประเภท/รูปแบบสื่อที่ปลายทางรองรับ |
[item, ...] |
สตริง |
ประเภทสื่อ ค่าที่รองรับมีดังต่อไปนี้
|
ผลลัพธ์
ผลลัพธ์ | ประเภท | คำอธิบาย |
---|---|---|
cameraStreamAuthToken |
สตริง |
โทเค็นการตรวจสอบสิทธิ์สําหรับผู้รับบางรายเพื่อให้สิทธิ์เข้าถึงสตรีม หาก |
cameraStreamProtocol |
สตริง |
ต้องระบุ รูปแบบสื่อที่ URL สตรีมชี้ไป ซึ่งควรเป็นหนึ่งในโปรโตคอลที่ระบุไว้ในพารามิเตอร์คําสั่ง ค่าที่รองรับมีดังต่อไปนี้
|
ผลการค้นหาที่ไม่ใช่ WebRTC
ผลลัพธ์ | ประเภท | คำอธิบาย |
---|---|---|
cameraStreamAccessUrl |
สตริง |
ต้องระบุ ปลายทาง URL สําหรับการเรียกสตรีมแบบเรียลไทม์ในรูปแบบที่ |
cameraStreamReceiverAppId |
สตริง |
รหัสตัวรับการแคสต์เพื่อประมวลผลสตรีมกล้องเมื่อพารามิเตอร์ |
ผลการค้นหา WebRTC
ผลลัพธ์ | ประเภท | คำอธิบาย |
---|---|---|
cameraStreamSignalingUrl |
สตริง |
ต้องระบุ ปลายทาง URL สําหรับการดึงข้อมูลและแลกเปลี่ยนโปรโตคอลคําอธิบายเซสชัน (SDP) ของกล้องและไคลเอ็นต์ ไคลเอ็นต์ควรแสดงผล URL ส่งสัญญาณซึ่งใช้ |
cameraStreamOffer |
สตริง |
โปรโตคอลคําอธิบายเซสชัน (SDP) |
cameraStreamIceServers |
สตริง |
แสดงเซิร์ฟเวอร์การสร้างการเชื่อมต่อแบบอินเทอร์แอกทีฟ (ICE) ที่ใช้สตริง JSON ที่เข้ารหัสพร้อมคําอธิบาย RTCIceServer หากไม่ระบุเซิร์ฟเวอร์ STUN (Session Traversal Utilities for NAT) แพลตฟอร์มจะมีค่าเริ่มต้นเป็นเซิร์ฟเวอร์ STUN สาธารณะของ Google เซิร์ฟเวอร์ Turn (Traversal Use Relaysround NAT) ต้องใช้เฉพาะในกรณีที่ไม่สามารถรับประกันได้ว่า IP / ICE ผู้สมัครที่ให้ไว้จะเข้าถึงแบบสาธารณะได้ (เช่น ผ่านเซิร์ฟเวอร์สื่อ, ผู้สมัครรับเลือกตั้ง ICE สาธารณะ, ผู้สมัครรับเลือกตั้ง ICE ฯลฯ) |
ตัวอย่าง
แสดงกล้องที่ประตูหน้า (ตัวรับการแคสต์เริ่มต้น)
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
แสดงกล้องประตูหน้า (ตัวรับการแคสต์ที่กําหนดเอง)
{ "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" }
อุปกรณ์ ERRORS
ดูรายการข้อผิดพลาดและข้อยกเว้นทั้งหมดข้อกําหนดโปรโตคอล WebRTC
ข้อดีของการใช้ WebRTC คือเวลาในการตอบสนองต่ําและการพูดคุยแบบ 1 ทาง WebRTC จะใช้เมธอด POST
ที่มีเนื้อความ POST
และการตอบสนองในรูปแบบ JSON
ปัจจุบัน WebRTC รองรับในอุปกรณ์ Smart Display ของ Google Nest และ Chromecast ที่มี Google TV
ส่วนนี้จะอธิบายข้อกําหนดเมื่อใช้โปรโตคอลสตรีม WebRTC
ประเภทข้อมูล | พารามิเตอร์/คําจํากัดความ |
---|---|
ส่วนหัวของคําขอส่งสัญญาณ |
ส่วนหัวต้องเป็นไปตามข้อกําหนดต่อไปนี้
|
พารามิเตอร์คําขอส่งสัญญาณ | คําขออาจมีพารามิเตอร์ต่อไปนี้
|
ส่งสัญญาณพารามิเตอร์การตอบสนอง | การตอบกลับอาจมีพารามิเตอร์เหล่านี้
|
ข้อกําหนดและคําแนะนําของ WebRTC
- ปัจจุบัน Google รองรับการสื่อสารแบบทางเดียว (2 ทาง)
- คุณต้องรองรับการรวมแพ็กเกจและ rtcp-mux
- คุณต้องใช้ (D)TLS 1.2 ขึ้นไป
- ไม่รองรับ Trickle ICE ต้องรวบรวมผู้สมัคร ICE ทั้งหมดก่อนส่ง SDP
- ขอแนะนําอย่างยิ่งให้คุณใส่ผู้สมัคร UICE/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 {}