สคีมาลักษณะของ CameraStream ในสมาร์ทโฮม
action.devices.traits.CameraStream
- ลักษณะนี้ครอบคลุมวิธีควบคุมสตรีมกล้องของอุปกรณ์
ลักษณะนี้เป็นของอุปกรณ์ที่สามารถสตรีมฟีดวิดีโอไปยัง Smart Display, อุปกรณ์ที่พร้อมใช้งาน Chromecast หรือสมาร์ทโฟน โดยทั่วไปก็คือกล้องรักษาความปลอดภัยหรือกล้องเด็ก แต่ลักษณะนี้ยังมีผลกับอุปกรณ์ที่มีความซับซ้อนมากยิ่งขึ้นซึ่งมีกล้องอยู่ (เช่น อุปกรณ์การประชุมทางวิดีโอหรือหุ่นยนต์ดูดฝุ่นที่มีกล้องอยู่)
แอตทริบิวต์ของอุปกรณ์
อุปกรณ์ที่มีลักษณะเช่นนี้อาจรายงานแอตทริบิวต์ต่อไปนี้ซึ่งเป็นส่วนหนึ่งของการดำเนินการ SYNC
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent SYNC
ได้ที่การดำเนินการตาม Intent
Attributes | Type | คำอธิบาย |
---|---|---|
cameraStreamSupportedProtocols |
อาร์เรย์ |
ต้องระบุ ประเภทสื่อที่รองรับสำหรับสตรีมจากกล้อง เรียงลำดับตามค่ากำหนด โดยปกติแล้วจะมีการขอโปรโตคอลแรกในอาร์เรย์นี้ที่เข้ากันได้กับแพลตฟอร์มเป้าหมาย |
[item, ...] |
String |
ประเภทสื่อ ค่าที่รองรับ
|
cameraStreamNeedAuthToken |
บูลีน |
ต้องระบุ กำหนดว่าจะมีการส่งโทเค็นการตรวจสอบสิทธิ์ผ่าน |
ตัวอย่าง
กล้องที่รองรับโปรโตคอลหลายโปรโตคอล โดยไม่จำเป็นต้องใช้โทเค็นการตรวจสอบสิทธิ์
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
กล้องที่รองรับโปรโตคอลเดียวซึ่งต้องมีโทเค็นการตรวจสอบสิทธิ์
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
โปรโตคอลสตรีมมิงที่รองรับ
ลักษณะนี้รองรับโปรโตคอลสตรีมมิงต่อไปนี้
webrtc
: WebRTChls
: สตรีมมิงแบบสดของ HTTPdash
: Dynamic Adaptive Streamingผ่าน HTTPsmooth_stream
: Smooth Streamingprogressive_mp4
: MP4 แบบโปรเกรสซีฟ (ส่วนใหญ่ใช้กับคลิป)
เมื่อสตรีมโปรโตคอล hls
,dash
,smooth_stream
และ progressive_mp4
ไปยังอุปกรณ์แคสต์ (Chromecast, จออัจฉริยะ และสมาร์ททีวีที่พร้อมใช้งาน Chromecast) ระบบจะเปิดใช้ตัวรับสัญญาณเว็บแคสต์เพื่อประมวลผลสตรีมและแสดงผลในอุปกรณ์ ขอแนะนำให้นักพัฒนาซอฟต์แวร์สร้างเว็บรีซีฟเวอร์ที่กำหนดเองเพื่อเปิดใช้การเข้าถึงเครื่องมือแก้ไขข้อบกพร่อง ปรับแต่งลักษณะการทำงานของโปรแกรมเล่น ปรับแต่งการสร้างแบรนด์ UI และรวมข้อมูลวิเคราะห์ หากต้องการเปิดใช้ตัวรับสัญญาณที่กำหนดเองและเลือกไม่ใช้เครื่องรับเริ่มต้น ให้ตั้งรหัสแอปของผู้รับที่สร้างขึ้นเมื่อคุณลงทะเบียนแอปพลิเคชัน Cast ในช่อง cameraStreamReceiverAppId
ของการตอบกลับ EXECUTE
ดูข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชัน Web Receiver ที่กำหนดเองได้ในคู่มือเว็บไซต์ของนักพัฒนาแอป
สถานะอุปกรณ์
ไม่มี
COMMANDS ของอุปกรณ์
อุปกรณ์ที่มีลักษณะเช่นนี้อาจตอบสนองต่อคำสั่งต่อไปนี้ซึ่งเป็นส่วนหนึ่งของการดำเนินการ EXECUTE
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent EXECUTE
ได้ที่การดำเนินการตาม Intent
action.devices.commands.GetCameraStream
พารามิเตอร์
พารามิเตอร์ | Type | คำอธิบาย |
---|---|---|
StreamToChromecast |
บูลีน |
ต้องระบุ เลือกว่าจะเล่นสตรีมในอุปกรณ์ Chromecast ไหม |
SupportedStreamProtocols |
อาร์เรย์ |
ต้องระบุ ประเภท/รูปแบบสื่อที่ปลายทางที่ต้องการรองรับ |
[item, ...] |
String |
ประเภทสื่อ ค่าที่รองรับ
|
ผลลัพธ์
ผลลัพธ์ | Type | คำอธิบาย |
---|---|---|
cameraStreamAuthToken |
String |
โทเค็นการตรวจสอบสิทธิ์สำหรับผู้รับที่ระบุเพื่อให้สิทธิ์เข้าถึงสตรีม หาก |
cameraStreamProtocol |
String |
ต้องระบุ รูปแบบสื่อที่ URL สตรีมชี้ไป ซึ่งควรเป็นหนึ่งในโปรโตคอลที่ระบุไว้ในพารามิเตอร์คำสั่ง ค่าที่รองรับ
|
ผลลัพธ์ที่ไม่ใช่ WebRTC
ผลลัพธ์ | Type | คำอธิบาย |
---|---|---|
cameraStreamAccessUrl |
String |
ต้องระบุ ปลายทางของ URL สำหรับการเรียกข้อมูลสตรีมแบบเรียลไทม์ในรูปแบบที่ |
cameraStreamReceiverAppId |
String |
รหัสตัวรับการแคสต์เพื่อประมวลผลสตรีมจากกล้องเมื่อพารามิเตอร์ |
ผลลัพธ์ของ WebRTC
ผลลัพธ์ | Type | คำอธิบาย |
---|---|---|
cameraStreamSignalingUrl |
String |
ต้องระบุ ปลายทางของ URL สำหรับการดึงข้อมูลและแลกเปลี่ยนโปรโตคอลคำอธิบายเซสชัน (SDP) ของกล้องและไคลเอ็นต์ ไคลเอ็นต์ควรแสดงผล URL การส่งสัญญาณซึ่งใช้ |
cameraStreamOffer |
String |
โปรโตคอลคำอธิบายเซสชันของข้อเสนอ (SDP) |
cameraStreamIceServers |
String |
แสดงเซิร์ฟเวอร์ Interactive Connectivity ผู้ใช้ทั้งหมด (ICE) โดยใช้สตริง JSON ที่เข้ารหัสพร้อมคำอธิบาย RTCIceServer หากคุณไม่ระบุเซิร์ฟเวอร์ STUN (Session Traversal Utilities for NAT) แพลตฟอร์มจะกำหนดค่าเริ่มต้นเป็นเซิร์ฟเวอร์ STUN สาธารณะของ Google จำเป็นต้องใช้เซิร์ฟเวอร์ TURN (Traversal using Relays above 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" }
ข้อผิดพลาดเกี่ยวกับอุปกรณ์
ดูรายการข้อผิดพลาดและข้อยกเว้นทั้งหมดข้อมูลจำเพาะของโปรโตคอล WebRTC
ข้อดีของการใช้ WebRTC คือมีเวลาในการตอบสนองต่ำและสามารถใช้การสื่อสารแบบทางเดียว WebRTC ใช้เมธอด POST
ที่มีเนื้อความและการตอบสนอง POST
ในรูปแบบ JSON
ปัจจุบัน WebRTC ใช้ได้กับอุปกรณ์ Smart Display ของ Google Nest และ Chromecast พร้อม Google TV
หัวข้อนี้จะอธิบายถึงข้อกำหนดเมื่อใช้โปรโตคอลสตรีม WebRTC
ประเภทข้อมูล | พารามิเตอร์/คำจำกัดความ |
---|---|
ส่วนหัวของคำขอการส่งสัญญาณ |
ส่วนหัวควรเป็นไปตามข้อกำหนดต่อไปนี้
|
พารามิเตอร์คำขอส่งสัญญาณ | คำขออาจมีพารามิเตอร์ต่อไปนี้
|
พารามิเตอร์การตอบสนองของสัญญาณ | การตอบสนองอาจมีพารามิเตอร์ต่อไปนี้
|
ข้อกำหนดและคำแนะนำของ WebRTC
- ขณะนี้ Google สนับสนุนการสื่อสารแบบทางเดียว (Half duplex)
- คุณต้องรองรับการรวมกลุ่มและ rtcp-mux
- คุณต้องใช้ (D)TLS 1.2 ขึ้นไป
- ไม่รองรับ Trickle ICE โดยต้องรวบรวมผู้สมัคร ICE ทั้งหมดก่อนส่ง SDP
- ขอแนะนำเป็นอย่างยิ่งให้คุณระบุตัวเลือก ICE ผ่าน TCP/IPv4, TCP/IPv4, UDP/IPv6 และ TCP/IPv6 เพื่อเพิ่มโอกาสในการเชื่อมต่อที่ประสบความสำเร็จ
ความละเอียดวิดีโอที่รองรับ:
- ต่ำสุด: 480p
- สูงสุด: 1080p
ตัวแปลงรหัสวิดีโอที่รองรับ:
- VP8
- H.264
ตัวแปลงสัญญาณเสียงที่รองรับ:
- Opus (ตัวแปลงรหัสที่ต้องการ)
- G.711/PCMU
- G.722
กลไกการแชร์ทรัพยากรข้ามโดเมน
Cross-Origin Resource Share (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 {}