스마트 홈 CameraStream 트레잇 스키마
action.devices.traits.CameraStream
- 이 트레잇은 기기의 카메라 스트림을 제어하는 방법을 다룹니다.
이 트레잇은 스마트 디스플레이, Chromecast 지원 기기 또는 스마트폰으로 동영상 피드를 스트리밍할 수 있는 기기에 속합니다. 대체로 보안 카메라 또는 아기 모니터입니다. 하지만 이 트레잇은 카메라가 있는 더 복잡한 기기(예: 화상 회의 기기 또는 카메라가 있는 진공 청소 로봇)에도 적용됩니다.
기기 속성
이 트레잇이 있는 기기는 SYNC
작업의 일부로 다음 속성을 보고할 수 있습니다. SYNC
인텐트 처리에 관한 자세한 내용은 인텐트 처리를 참고하세요.
속성 | 유형 | 설명 |
---|---|---|
cameraStreamSupportedProtocols |
배열 |
필수사항. 카메라 스트림에 지원되는 미디어 유형으로, 선호도순으로 정렬됩니다. 일반적으로 타겟 노출 영역과 호환되는 이 배열의 첫 번째 프로토콜이 요청됩니다. |
[item, ...] |
String |
미디어 유형 지원되는 값:
|
cameraStreamNeedAuthToken |
Boolean |
필수사항. 타겟 노출 영역에서 카메라 피드를 스트리밍할 수 있도록 |
예
인증 토큰이 필요하지 않은 여러 프로토콜을 지원하는 카메라
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
인증 토큰이 필요한 단일 프로토콜을 지원하는 카메라
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
지원되는 스트리밍 프로토콜
이 트레잇은 다음과 같은 스트리밍 프로토콜을 지원합니다.
webrtc
: WebRTChls
: HTTP 라이브 스트리밍dash
: HTTP 동적 적응형 스트리밍smooth_stream
: 원활한 스트리밍progressive_mp4
: 프로그레시브 MP4(주로 클립에 사용됨)
hls
,dash
,smooth_stream
,progressive_mp4
프로토콜을 Cast 기기(Chromecast, 스마트 디스플레이, Chromecast 지원 스마트 TV)로 스트리밍하면 Cast 웹 수신기가 실행되어 스트림을 처리하고 기기에서 렌더링합니다. 개발자는 디버깅 도구에 액세스하고, 플레이어 동작을 맞춤설정하고, UI 브랜딩을 맞춤설정하고, 분석을 포함할 수 있도록 커스텀 웹 수신기를 만드는 것이 좋습니다. 맞춤 수신기 사용을 사용 설정하고 기본 수신기 사용을 선택 해제하려면 EXECUTE
응답의 cameraStreamReceiverAppId
필드에서 Cast 애플리케이션을 등록할 때 생성된 수신기 앱 ID를 설정합니다.
맞춤 웹 수신기 애플리케이션에 대해 자세히 알아보려면 개발자 사이트 가이드를 방문하세요.
기기 상태
없음
기기 명령어
이 트레잇이 있는 기기는 EXECUTE
작업의 일부로 다음 명령어에 응답할 수 있습니다. EXECUTE
인텐트 처리에 관한 자세한 내용은 인텐트 처리를 참고하세요.
action.devices.commands.GetCameraStream
매개변수
매개변수 | 유형 | 설명 |
---|---|---|
StreamToChromecast |
Boolean |
필수사항. 스트림이 Chromecast 기기에서 재생되는지 여부입니다. |
SupportedStreamProtocols |
배열 |
필수사항. 원하는 대상에서 지원하는 미디어 유형/형식입니다. |
[item, ...] |
String |
미디어 유형 지원되는 값:
|
결과
결과 | 유형 | 설명 |
---|---|---|
cameraStreamAuthToken |
String |
특정 수신자가 스트림에 대한 액세스를 승인하기 위한 인증 토큰입니다. |
cameraStreamProtocol |
String |
필수사항. 스트림 URL이 가리키는 미디어 형식입니다. 지원되는 값:
|
WebRTC 외 결과
결과 | 유형 | 설명 |
---|---|---|
cameraStreamAccessUrl |
String |
필수사항.
|
cameraStreamReceiverAppId |
String |
|
WebRTC 결과
결과 | 유형 | 설명 |
---|---|---|
cameraStreamSignalingUrl |
String |
필수사항. 카메라 및 클라이언트 SDP (세션 설명 프로토콜)를 가져오고 교환하는 URL 엔드포인트입니다. 클라이언트는 요청 헤더에서 |
cameraStreamOffer |
String |
세션 설명 프로토콜(SDP)을 제공합니다. |
cameraStreamIceServers |
String |
RTCIceServer 설명이 포함된 인코딩된 JSON 문자열을 사용하여 Interactive Connectivity Establishment(ICE) 서버를 나타냅니다. STUN (Session Traversal Utilities for NAT) 서버를 지정하지 않으면 플랫폼은 기본적으로 Google의 공개 STUN 서버로 설정됩니다. 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 사용의 이점은 짧은 지연 시간과 단방향 통신입니다. WebRTC는 JSON 형식의 POST
본문과 응답이 있는 POST
메서드를 사용합니다.
WebRTC는 현재 Google Nest 스마트 디스플레이 및 Chromecast with Google TV 기기에서 지원됩니다.
이 섹션에서는 WebRTC 스트림 프로토콜을 사용할 때의 요구사항을 설명합니다.
데이터 유형 | 매개변수/정의 |
---|---|
신호 요청 헤더 |
헤더는 다음 요구사항을 충족해야 합니다.
|
신호 요청 매개변수 | 요청에는 다음 매개변수가 포함될 수 있습니다.
|
신호 응답 매개변수 | 응답에는 다음 매개변수가 포함될 수 있습니다.
|
WebRTC 요구사항 및 권장사항
- Google은 현재 단방향(반이중) 통신을 지원합니다.
- 번들 및 rtcp-mux를 지원해야 합니다.
- (D)TLS 1.2 이상을 사용해야 합니다.
- Trickle ICE는 지원되지 않습니다. SDP를 전송하기 전에 모든 ICE 후보를 먼저 수집해야 합니다.
- 연결 성공 확률을 높이려면 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 {}