ยินดีต้อนรับสู่ Google Home Developer Center แหล่งใหม่เรียนรู้วิธีพัฒนาการดําเนินการในบ้านอัจฉริยะ หมายเหตุ: คุณจะสร้างการดําเนินการต่างๆ ต่อไปในคอนโซลการดําเนินการ
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

สคีมาของฟีเจอร์สตรีมกล้องสมาร์ทโฮม

action.devices.traits.CameraStream - ลักษณะเฉพาะนี้อธิบายวิธีควบคุมสตรีมกล้องของอุปกรณ์

ลักษณะนี้เป็นของอุปกรณ์ที่มีความสามารถในการสตรีมวิดีโอฟีดไปยังจออัจฉริยะ อุปกรณ์ที่พร้อมใช้งาน Chromecast หรือสมาร์ทโฟน ส่วนใหญ่แล้วนี่ก็คือกล้องรักษาความปลอดภัยหรือกล้องทารก แต่ลักษณะเฉพาะนี้ยังมีผลกับอุปกรณ์ที่ซับซ้อนกว่าซึ่งมีกล้องอยู่ด้วย (เช่น อุปกรณ์การประชุมทางวิดีโอหรือหุ่นยนต์ดูดฝุ่นที่มีกล้อง)

แอตทริบิวต์อุปกรณ์

อุปกรณ์ที่มีลักษณะเฉพาะนี้อาจรายงานแอตทริบิวต์ต่อไปนี้เป็นส่วนหนึ่งของการดําเนินการ SYNC ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent ของ SYNC ได้ที่การดําเนินการตามความตั้งใจ

แอตทริบิวต์ ประเภท คำอธิบาย
cameraStreamSupportedProtocols อาร์เรย์

ต้องระบุ

ประเภทสื่อที่รองรับสําหรับสตรีมกล้อง โดยเรียงลําดับตามค่ากําหนด โดยปกติแล้ว ระบบจะขอโปรโตคอลแรกในอาร์เรย์นี้ที่เข้ากันได้กับแพลตฟอร์มเป้าหมาย

[item, ...] สตริง

ประเภทสื่อ

ค่าที่รองรับมีดังต่อไปนี้

hls
สตรีมมิงแบบสดใน HTTP
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
สตรีมมิงที่ราบรื่น
progressive_mp4
Progressive MP4 (ใช้มากที่สุดสําหรับคลิป)
webrtc
WebR
cameraStreamNeedAuthToken บูลีน

ต้องระบุ

จะระบุโทเค็นการตรวจสอบสิทธิ์ผ่าน cameraStreamAuthToken เพื่อให้แพลตฟอร์มเป้าหมายสตรีมฟีดกล้องหรือไม่

ตัวอย่าง

กล้องที่รองรับโปรโตคอลหลายแบบที่ไม่ต้องใช้โทเค็นการตรวจสอบสิทธิ์

{
  "cameraStreamSupportedProtocols": [
    "webrtc",
    "hls",
    "dash",
    "smooth_stream",
    "progressive_mp4"
  ],
  "cameraStreamNeedAuthToken": false
}

กล้องที่รองรับโปรโตคอลเดียวต้องใช้โทเค็นการตรวจสอบสิทธิ์

{
  "cameraStreamSupportedProtocols": [
    "hls"
  ],
  "cameraStreamNeedAuthToken": true
}

โปรโตคอลสตรีมมิงที่รองรับ

ลักษณะเฉพาะนี้รองรับโปรโตคอลสตรีมมิงต่อไปนี้

สถานะอุปกรณ์

ไม่มี

คําสั่งของอุปกรณ์

อุปกรณ์ที่มีลักษณะเฉพาะนี้อาจตอบสนองต่อคําสั่งต่อไปนี้ซึ่งเป็นส่วนหนึ่งของการดําเนินการ EXECUTE ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ Intent ของ EXECUTE ได้ที่การดําเนินการตามความตั้งใจ

action.devices.commands.GetCameraStream

พารามิเตอร์

พารามิเตอร์ ประเภท คำอธิบาย
StreamToChromecast บูลีน

ต้องระบุ

สตรีมจะเล่นในอุปกรณ์ Chromecast ไหม

SupportedStreamProtocols อาร์เรย์

ต้องระบุ

ประเภท/รูปแบบสื่อที่ปลายทางรองรับ

[item, ...] สตริง

ประเภทสื่อ

ค่าที่รองรับมีดังต่อไปนี้

hls
สตรีมมิงแบบสดใน HTTP
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
สตรีมมิงที่ราบรื่น
progressive_mp4
Progressive MP4 (ใช้มากที่สุดสําหรับคลิป)
webrtc
WebR

ผลลัพธ์

ผลลัพธ์ ประเภท คำอธิบาย
cameraStreamAuthToken สตริง

โทเค็นการตรวจสอบสิทธิ์สําหรับผู้รับบางรายเพื่อให้สิทธิ์เข้าถึงสตรีม หาก cameraStreamNeedAuthToken เป็นจริงและไม่ระบุค่านี้ ระบบจะใช้ข้อมูลเข้าสู่ระบบ OAuth ของผู้ใช้เป็นโทเค็นการตรวจสอบสิทธิ์

cameraStreamProtocol สตริง

ต้องระบุ

รูปแบบสื่อที่ URL สตรีมชี้ไป ซึ่งควรเป็นหนึ่งในโปรโตคอลที่ระบุไว้ในพารามิเตอร์คําสั่ง SupportedStreamProtocols

ค่าที่รองรับมีดังต่อไปนี้

hls
สตรีมมิงแบบสดใน HTTP
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
สตรีมมิงที่ราบรื่น
progressive_mp4
Progressive MP4 (ใช้มากที่สุดสําหรับคลิป)
webrtc
WebR

ผลการค้นหาที่ไม่ใช่ WebRTC

ผลลัพธ์ ประเภท คำอธิบาย
cameraStreamAccessUrl สตริง

ต้องระบุ

ปลายทาง URL สําหรับการเรียกสตรีมแบบเรียลไทม์ในรูปแบบที่ cameraStreamProtocol ระบุ

cameraStreamReceiverAppId สตริง

รหัสตัวรับการแคสต์เพื่อประมวลผลสตรีมกล้องเมื่อพารามิเตอร์ StreamToChromecast เป็น "จริง" ระบบจะใช้ตัวรับเริ่มต้นหากไม่ได้ระบุไว้

ผลการค้นหา WebRTC

ผลลัพธ์ ประเภท คำอธิบาย
cameraStreamSignalingUrl สตริง

ต้องระบุ

ปลายทาง URL สําหรับการดึงข้อมูลและแลกเปลี่ยนโปรโตคอลคําอธิบายเซสชัน (SDP) ของกล้องและไคลเอ็นต์ ไคลเอ็นต์ควรแสดงผล URL ส่งสัญญาณซึ่งใช้ cameraStreamAuthToken เป็นโทเค็นการตรวจสอบสิทธิ์ในส่วนหัวของคําขอ

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 เท่านั้น

ส่วนนี้จะอธิบายข้อกําหนดเมื่อใช้โปรโตคอลสตรีม WebRTC

ประเภทข้อมูล พารามิเตอร์/คําจํากัดความ
ส่วนหัวของคําขอส่งสัญญาณ

ส่วนหัวต้องเป็นไปตามข้อกําหนดต่อไปนี้

  • การตรวจสอบสิทธิ์: ส่วนหัวการตรวจสอบสิทธิ์ควรใช้โทเค็นการตรวจสอบสิทธิ์จากค่าการแสดงผล GetCameraStream สําหรับ cameraStreamAuthToken ที่มีโทเค็นประเภท Bearer
  • ประเภทเนื้อหา: application/json
พารามิเตอร์คําขอส่งสัญญาณ

คําขออาจมีพารามิเตอร์ต่อไปนี้

  • action: สตริง โดยค่าที่ถูกต้องมีดังนี้
    • offer: เสนอข้อความ SDP จากผู้ให้บริการ
    • answer: ตอบกลับข้อความ SDP จากผู้ให้บริการ
    • end: ปิดเซสชันปัจจุบัน
  • deviceId: สตริง รหัสอุปกรณ์ตามที่รายงานในคําขอ SYNC หรือ EXECUTE
  • sdp: สตริง มีข้อความโปรโตคอลคําอธิบายเซสชันสําหรับการเชื่อมต่อการเพียร์ เนื้อหาจะอิงตามค่าของพารามิเตอร์ action หาก action เป็น "end" พารามิเตอร์นี้จะว่างเปล่า
ส่งสัญญาณพารามิเตอร์การตอบสนอง

การตอบกลับอาจมีพารามิเตอร์เหล่านี้

  • action: สตริง ค่าคําตอบต้องเป็นประเภท answer
  • sdp: สตริง ข้อความ SDP สําหรับคําตอบ

ข้อกําหนดและคําแนะนําของ 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
{}