สคีมาลักษณะของ CameraStream สมาร์ทโฮม

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

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

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

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

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

ต้องระบุ

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

[item, ...] String

ประเภทสื่อ

ค่าที่รองรับ

hls
HTTP Live Streaming
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
Smooth Streaming
progressive_mp4
MP4 แบบโปรเกรสซีฟ (ใช้กับคลิปเป็นส่วนใหญ่)
webrtc
WebRTC
cameraStreamNeedAuthToken บูลีน

ต้องระบุ

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

ตัวอย่าง

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

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

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

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

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

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

เมื่อสตรีมโปรโตคอล hls,dash,smooth_stream และ progressive_mp4 ไปยังอุปกรณ์แคสต์ (Chromecast, จออัจฉริยะ และสมาร์ททีวีที่พร้อมใช้งาน Chromecast) ระบบจะเปิด Cast Web Receiver เพื่อประมวลผลสตรีมและแสดงผลบนอุปกรณ์ เราขอแนะนำให้นักพัฒนาซอฟต์แวร์สร้างWeb Receiver ที่กําหนดเองเพื่อเปิดใช้การเข้าถึงเครื่องมือแก้ไขข้อบกพร่อง ปรับแต่งลักษณะการทํางานของโปรแกรมเล่น ปรับแต่งการสร้างแบรนด์ UI และรวมข้อมูลวิเคราะห์ หากต้องการเปิดใช้ตัวรับที่กำหนดเองและเลือกไม่ใช้ตัวรับเริ่มต้น ให้ตั้งค่ารหัสแอปของตัวรับซึ่งสร้างขึ้นเมื่อคุณลงทะเบียนแอปพลิเคชัน Cast ในช่อง cameraStreamReceiverAppId ของEXECUTEการตอบกลับ

ดูข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชัน Custom Web Receiver ได้ที่คู่มือสำหรับเว็บไซต์ของนักพัฒนาซอฟต์แวร์

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

ไม่มี

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

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

action.devices.commands.GetCameraStream

พารามิเตอร์

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

ต้องระบุ

การเล่นสตรีมบนอุปกรณ์ Chromecast

SupportedStreamProtocols อาร์เรย์

ต้องระบุ

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

[item, ...] String

ประเภทสื่อ

ค่าที่รองรับ

hls
HTTP Live Streaming
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
Smooth Streaming
progressive_mp4
MP4 แบบโปรเกรสซีฟ (ใช้กับคลิปเป็นส่วนใหญ่)
webrtc
WebRTC

ผลลัพธ์

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

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

cameraStreamProtocol String

ต้องระบุ

รูปแบบสื่อที่ URL สตรีมชี้ถึง โดยควรเป็นโปรโตคอลใดโปรโตคอลหนึ่งที่แสดงอยู่ในพารามิเตอร์คำสั่ง SupportedStreamProtocols

ค่าที่รองรับ

hls
HTTP Live Streaming
dash
การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP
smooth_stream
Smooth Streaming
progressive_mp4
MP4 แบบโปรเกรสซีฟ (ใช้กับคลิปเป็นส่วนใหญ่)
webrtc
WebRTC

ผลลัพธ์ที่ไม่ใช่ WebRTC

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

ต้องระบุ

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

cameraStreamReceiverAppId String

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

ผลการค้นหา WebRTC

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

ต้องระบุ

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

cameraStreamOffer String

โปรโตคอลคำอธิบายเซสชันของข้อเสนอ (SDP)

cameraStreamIceServers String

แสดงเซิร์ฟเวอร์ Interactive Connectivity Generatement (ICE) โดยใช้สตริง JSON ที่เข้ารหัสโดยมีคำอธิบาย RTCIceServer หากคุณไม่ได้ระบุเซิร์ฟเวอร์ STUN (Session Traversal Utilities for NAT) แพลตฟอร์มจะใช้เซิร์ฟเวอร์ STUN สาธารณะของ Google เป็นค่าเริ่มต้น คุณต้องใช้เซิร์ฟเวอร์ TURN (Traversal Using Relays around NAT) เฉพาะในกรณีที่ไม่สามารถรับประกันว่า IP/ผู้สมัคร ICE ที่ระบุจะเข้าถึงได้แบบสาธารณะ (เช่น ผ่านเซิร์ฟเวอร์สื่อ ผู้สมัคร ICE ของโฮสต์สาธารณะ ผู้สมัคร ICE ของรีเลย์ ฯลฯ)

ตัวอย่าง

แสดงกล้องประตูหน้า (ตัวรับ 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 คือเวลาในการตอบสนองต่ำและการพูดแบบ 1 ทาง WebRTC ใช้เมธอด POST ที่มีเนื้อหา POST และการตอบกลับในรูปแบบ JSON

ปัจจุบัน WebRTC รองรับอุปกรณ์ Smart Display ของ Google Nest และ Chromecast พร้อม Google TV

ส่วนนี้อธิบายข้อกำหนดเมื่อใช้โปรโตคอลสตรีม 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 รองรับการสื่อสารแบบ 1 ทิศทาง (ครึ่งดูเพล็กซ์)
  • คุณต้องรองรับการรวมกลุ่มและ rtcp-mux
  • คุณต้องใช้ (D)TLS 1.2 ขึ้นไป
  • ไม่รองรับ Trickle 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
{}