Giản đồ Trait CameraStream của nhà thông minh

action.devices.traits.CameraStream – Đặc điểm này hướng dẫn cách điều khiển luồng camera của thiết bị.

Đặc điểm này thuộc về các thiết bị có khả năng truyền trực tuyến nguồn cấp dữ liệu video đến màn hình thông minh, thiết bị có hỗ trợ Chromecast hoặc điện thoại thông minh. Nhìn chung, đây là camera an ninh hoặc camera em bé. Tuy nhiên, đặc điểm này cũng áp dụng cho các thiết bị phức tạp hơn có camera (ví dụ: thiết bị hội nghị truyền hình hoặc rô bốt máy hút bụi có camera trên đó).

ĐẶC ĐIỂM của thiết bị

Các thiết bị có đặc điểm này có thể báo cáo các thuộc tính sau trong thao tác SYNC. Để tìm hiểu thêm về cách xử lý ý định SYNC, vui lòng xem bài viết Phương thức thực hiện ý định.

Thuộc tính Loại Nội dung mô tả
cameraStreamSupportedProtocols Mảng

Bắt buộc.

Các loại nội dung nghe nhìn được hỗ trợ cho luồng camera, được sắp xếp theo tùy chọn. Thông thường, hệ thống sẽ yêu cầu giao thức đầu tiên trong mảng tương thích với nền tảng mục tiêu.

[item, ...] Chuỗi

Loại phương tiện.

Các giá trị được hỗ trợ:

hls
Phát trực tuyến dựa trên HTTP
dash
Truyền phát thích ứng động qua HTTP
smooth_stream
Phát trực tuyến mượt mà
progressive_mp4
MP4 tăng tiến (chủ yếu dùng cho các đoạn video)
webrtc
WebRTC
cameraStreamNeedAuthToken Boolean

Bắt buộc.

Liệu mã thông báo xác thực có được cung cấp qua cameraStreamAuthToken cho nền tảng đích để truyền trực tuyến nguồn cấp dữ liệu máy ảnh hay không.

Ví dụ

Máy ảnh hỗ trợ nhiều giao thức, không yêu cầu mã xác thực.

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

Máy ảnh hỗ trợ một giao thức duy nhất, cần có mã xác thực.

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

Giao thức truyền trực tuyến được hỗ trợ

Trait này hỗ trợ các giao thức phát trực tuyến sau:

Khi truyền trực tuyến các giao thức hls,dash,smooth_streamprogressive_mp4 tới thiết bị truyền (Chromecast, màn hình thông minh và TV thông minh có hỗ trợ Chromecast), Bộ thu web truyền được chạy để xử lý và kết xuất luồng trên thiết bị. Nhà phát triển nên tạo Trình thu nhận web tuỳ chỉnh để cho phép truy cập vào các công cụ gỡ lỗi, tuỳ chỉnh hành vi của người chơi, tuỳ chỉnh thương hiệu giao diện người dùng và thêm số liệu phân tích. Để cho phép sử dụng trình thu nhận tuỳ chỉnh và chọn không sử dụng trình thu nhận mặc định, hãy đặt mã ứng dụng trình thu nhận được tạo khi bạn đăng ký ứng dụng Truyền trong trường cameraStreamReceiverAppId của phản hồi EXECUTE.

Để tìm hiểu thêm về các ứng dụng Trình thu nhận web tuỳ chỉnh, hãy truy cập vào hướng dẫn trang web dành cho nhà phát triển.

TÌNH TRẠNG của thiết bị

Không nội dung nào.

Lệnh trên thiết bị

Các thiết bị có đặc điểm này có thể phản hồi các lệnh sau trong thao tác EXECUTE. Để tìm hiểu thêm về cách xử lý ý định EXECUTE, vui lòng xem bài viết Phương thức thực hiện ý định.

action.devices.commands.GetCameraStream

Các tham số

Các tham số Loại Nội dung mô tả
StreamToChromecast Boolean

Bắt buộc.

Liệu luồng có được phát trên thiết bị Chromecast hay không.

SupportedStreamProtocols Mảng

Bắt buộc.

Các loại/định dạng nội dung đa phương tiện được đích đến mong muốn hỗ trợ.

[item, ...] Chuỗi

Loại phương tiện.

Các giá trị được hỗ trợ:

hls
Phát trực tuyến dựa trên HTTP
dash
Truyền phát thích ứng động qua HTTP
smooth_stream
Phát trực tuyến mượt mà
progressive_mp4
MP4 tăng tiến (chủ yếu dùng cho các đoạn video)
webrtc
WebRTC

Kết quả

Kết quả Loại Mô tả
cameraStreamAuthToken Chuỗi

Mã thông báo xác thực cho receiver cụ thể để uỷ quyền truy cập vào luồng. Nếu cameraStreamNeedAuthToken là true và giá trị này không được cung cấp, thì thông tin xác thực OAuth của người dùng sẽ được dùng làm mã thông báo xác thực.

cameraStreamProtocol Chuỗi

Bắt buộc.

Định dạng nội dung đa phương tiện mà URL của luồng trỏ đến. Đây phải là một trong các giao thức được liệt kê trong tham số lệnh SupportedStreamProtocols.

Các giá trị được hỗ trợ:

hls
Phát trực tuyến dựa trên HTTP
dash
Truyền phát thích ứng động qua HTTP
smooth_stream
Phát trực tuyến mượt mà
progressive_mp4
MP4 tăng tiến (chủ yếu dùng cho các đoạn video)
webrtc
WebRTC

Kết quả không phải cho WebRTC

Kết quả Loại Mô tả
cameraStreamAccessUrl Chuỗi

Bắt buộc.

Điểm cuối URL để truy xuất luồng thời gian thực ở định dạng do cameraStreamProtocol chỉ định.

cameraStreamReceiverAppId Chuỗi

Mã nhận dạng bộ thu truyền để xử lý luồng camera khi tham số StreamToChromecast là true; bộ thu mặc định sẽ được sử dụng nếu không được cung cấp.

Kết quả WebRTC

Kết quả Loại Mô tả
cameraStreamSignalingUrl Chuỗi

Bắt buộc.

Điểm cuối URL để truy xuất và trao đổi giao thức mô tả phiên (SDP) của máy ảnh và máy khách. Ứng dụng sẽ trả về URL báo hiệu. URL này sử dụng cameraStreamAuthToken làm mã xác thực trong tiêu đề của yêu cầu.

cameraStreamOffer Chuỗi

Giao thức mô tả phiên của lời đề nghị (SDP).

cameraStreamIceServers Chuỗi

Biểu thị máy chủ Thiết lập kết nối tương tác (ICE) bằng chuỗi JSON mã hoá cùng với nội dung mô tả về RTCIceServer. Nếu bạn không chỉ định máy chủ STUN (Session Traversal Utility for NAT), thì nền tảng đó sẽ mặc định dùng máy chủ STUN công khai của Google. Bạn chỉ bắt buộc phải sử dụng máy chủ TURN (Truyền tải qua chuyển tiếp xung quanh NAT) nếu bạn không thể đảm bảo rằng các IP / ICE đề xuất được cung cấp sẽ có thể truy cập công khai (ví dụ: qua máy chủ phương tiện, ứng viên ICE của máy chủ công cộng, ứng viên chuyển tiếp ICE, v.v.).

Ví dụ

Hiển thị camera cửa trước (bộ thu Truyền mặc định).

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamProtocol": "progressive_mp4"
}

Hiển thị camera cửa trước (bộ thu Cast tuỳ chỉnh).

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamReceiverAppId": "1g2f89213hg",
  "cameraStreamAuthToken": "12657342190192783",
  "cameraStreamProtocol": "progressive_mp4"
}

Hiển thị camera cửa trước (luồng 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"
}

Thiết bị LỖI

Xem danh sách toàn bộ lỗi và ngoại lệ.

Thông số kỹ thuật của giao thức WebRTC

Lợi ích của việc sử dụng WebRTC là độ trễ thấp và tính năng trò chuyện 1 chiều. WebRTC sử dụng phương thức POST có nội dung và phản hồi POST ở định dạng JSON.

Màn hình thông minh Google Nest và các thiết bị Chromecast có Google TV hiện hỗ trợ WebRTC.

Phần này mô tả các yêu cầu khi sử dụng giao thức truyền trực tuyến WebRTC.

Loại dữ liệu Thông số/Định nghĩa
Tiêu đề của yêu cầu báo hiệu

Tiêu đề phải đáp ứng các yêu cầu sau:

  • Xác thực: Tiêu đề xác thực phải sử dụng mã thông báo xác thực từ giá trị trả về GetCameraStream cho cameraStreamAuthToken có loại mã thông báo Bearer.
  • Loại nội dung: application/json.
Tham số yêu cầu báo hiệu

Yêu cầu có thể bao gồm các tham số sau:

  • action: Chuỗi. Có các giá trị hợp lệ như sau:
    • offer: Cung cấp tin nhắn SDP từ nhà cung cấp.
    • answer: Trả lời tin nhắn SDP của nhà cung cấp.
    • end: Đóng phiên hiện tại.
  • deviceId: Chuỗi. Mã thiết bị như được báo cáo trong yêu cầu SYNC hoặc EXECUTE.
  • sdp: Chuỗi. Chứa thông báo Giao thức mô tả phiên cho kết nối ngang hàng. Nội dung dựa trên giá trị của tham số action. Nếu action là "end", tham số này có thể trống.
Tham số phản hồi tín hiệu

Phản hồi có thể bao gồm các thông số sau:

  • action: Chuỗi. Giá trị phản hồi phải thuộc loại answer.
  • sdp: Chuỗi. Thông báo SDP cho câu trả lời đang phản hồi.

Yêu cầu và đề xuất WebRTC

  • Google hiện hỗ trợ giao tiếp 1 chiều (nửa song công).
  • Bạn phải hỗ trợ gói và rtcp-mux.
  • Bạn phải sử dụng (D)TLS 1.2 trở lên.
  • Không hỗ trợ ICE nhỏ giọt. Bạn phải tập hợp tất cả các ứng viên ICE trước khi gửi SDP.
  • Bạn nên bao gồm các ứng viên ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 và TCP/IPv6 để tăng xác suất kết nối thành công.

Độ phân giải video được hỗ trợ:

  • Tối thiểu: 480p
  • Tối đa: 1080p

Bộ mã hoá và giải mã video được hỗ trợ:

  • VP8
  • H.264

Các bộ mã hoá và giải mã âm thanh được hỗ trợ:

  • Opus (bộ mã hoá và giải mã ưu tiên)
  • G.711/PCMU
  • G.722

Chia sẻ tài nguyên trên nhiều nguồn gốc

Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS) là một cơ chế sử dụng các Tiêu đề HTTP bổ sung để thông báo cho các trình duyệt nhằm cho phép ứng dụng web đang chạy tại một nguồn truy cập vào các tài nguyên đã chọn từ một nguồn gốc khác. Máy chủ lưu trữ cameraStreamSignalingUrl phải phản hồi bằng tiêu đề sau:

Access-Control-Allow-Origin: https://www.gstatic.com

Phản hồi và yêu cầu báo hiệu mẫu

Ví dụ sau đây cho thấy một yêu cầu mà Google gửi đến dịch vụ tín hiệu và phản hồi tương ứng cho Google.

Yêu cầu
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"
}

Câu trả lời
// 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
{}