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

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

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

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

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

Attributes Type คำอธิบาย
cameraStreamSupportedProtocols อาร์เรย์

ต้องระบุ

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

[item, ...] String

ประเภทสื่อ

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

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

ต้องระบุ

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

ตัวอย่าง

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

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

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

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

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

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

เมื่อสตรีมโปรโตคอล 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

ประเภทสื่อ

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

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

ผลลัพธ์

ผลลัพธ์ Type คำอธิบาย
cameraStreamAuthToken String

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

cameraStreamProtocol String

ต้องระบุ

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

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

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

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

ผลลัพธ์ Type คำอธิบาย
cameraStreamAccessUrl String

ต้องระบุ

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

cameraStreamReceiverAppId String

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

ผลลัพธ์ของ WebRTC

ผลลัพธ์ Type คำอธิบาย
cameraStreamSignalingUrl String

ต้องระบุ

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

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

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

ส่วนหัวควรเป็นไปตามข้อกำหนดต่อไปนี้

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

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

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

การตอบสนองอาจมีพารามิเตอร์ต่อไปนี้

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

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