스마트 홈 작업을 개발하는 방법을 알아볼 수 있는 새로운 공간인 Google Home 개발자 센터에 오신 것을 환영합니다. 참고: Actions 콘솔에서 작업을 계속 만들 수 있습니다.
컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

스마트 홈 CameraStream 속성 스키마

action.devices.traits.CameraStream - 이 특성은 기기의 카메라 스트림을 제어하는 방법을 다룹니다.

이러한 특성은 스마트 디스플레이, Chromecast 지원 기기 또는 스마트폰에 동영상 피드를 스트리밍할 수 있는 기기에 속합니다. 대체로 보안 카메라 또는 유아 카메라입니다. 그러나 이러한 특성은 카메라가 장착된 더 복잡한 기기 (예: 화상 회의 기기 또는 카메라가 장착된 진공 로봇)에도 적용됩니다.

기기 속성

이 특성이 있는 기기는 SYNC 작업의 일부로 다음 속성을 보고할 수 있습니다. SYNC 인텐트 처리에 관한 자세한 내용은 인텐트 처리를 참고하세요.

속성 유형 설명
cameraStreamSupportedProtocols 배열

필수.

카메라 스트림에 지원되는 미디어 유형이며 환경설정 순으로 정렬됩니다. 일반적으로 대상 표면과 호환되는 이 배열의 첫 번째 프로토콜이 요청됩니다.

[item, ...] String

미디어 유형입니다.

지원 값:

hls
HTTP 실시간 스트리밍
dash
HTTP를 통한 동적 가변 품질 스트리밍
smooth_stream
원활한 스트리밍
progressive_mp4
프로그레시브 MP4 (주로 클립에 사용)
webrtc
WebRTC
cameraStreamNeedAuthToken Boolean

필수.

타겟 표면에서 카메라 피드를 스트리밍할 수 있도록 cameraStreamAuthToken를 통해 인증 토큰을 제공할지 여부입니다.

여러 프로토콜이 지원되는 카메라로, 인증 토큰이 필요하지 않습니다.

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

단일 토큰이 지원되는 카메라로, 인증 토큰이 필요합니다.

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

지원되는 스트리밍 프로토콜

이 특성은 다음과 같은 스트리밍 프로토콜을 지원합니다.

기기 상태

없음.

기기 명령어

이 특성이 있는 기기는 EXECUTE 작업의 일부로 다음 명령어에 응답할 수 있습니다. EXECUTE 인텐트 처리에 관한 자세한 내용은 인텐트 처리를 참고하세요.

action.devices.commands.GetCameraStream

매개변수

매개변수 유형 설명
StreamToChromecast Boolean

필수.

스트림을 Chromecast 기기에서 재생할지 여부입니다.

SupportedStreamProtocols 배열

필수.

원하는 대상에서 지원되는 미디어 유형/형식

[item, ...] String

미디어 유형입니다.

지원 값:

hls
HTTP 실시간 스트리밍
dash
HTTP를 통한 동적 가변 품질 스트리밍
smooth_stream
원활한 스트리밍
progressive_mp4
프로그레시브 MP4 (주로 클립에 사용)
webrtc
WebRTC

결과

결과 유형 설명
cameraStreamAuthToken String

스트림 액세스 권한을 부여할 특정 수신자의 인증 토큰입니다. cameraStreamNeedAuthToken이 true이고 이 값이 제공되지 않으면 사용자의 OAuth 사용자 인증 정보가 인증 토큰으로 사용됩니다.

cameraStreamProtocol String

필수.

스트림 URL이 가리키는 미디어 형식입니다. SupportedStreamProtocols 명령어 매개변수에 나열된 프로토콜 중 하나여야 합니다.

지원 값:

hls
HTTP 실시간 스트리밍
dash
HTTP를 통한 동적 가변 품질 스트리밍
smooth_stream
원활한 스트리밍
progressive_mp4
프로그레시브 MP4 (주로 클립에 사용)
webrtc
WebRTC

WebRTC가 아닌 결과

결과 유형 설명
cameraStreamAccessUrl String

필수.

실시간 스트림을 cameraStreamProtocol에 지정된 형식으로 검색하기 위한 URL 엔드포인트입니다.

cameraStreamReceiverAppId String

StreamToChromecast 매개변수가 true일 때 카메라 스트림을 처리하는 Cast 수신기 ID입니다. 제공되지 않으면 기본 수신기가 사용됩니다.

WebRTC 결과

결과 유형 설명
cameraStreamSignalingUrl String

필수.

카메라 및 클라이언트 세션 설명 프로토콜 (SDP)을 검색 및 교환하기 위한 URL 엔드포인트입니다. 클라이언트는 cameraStreamAuthToken를 요청 헤더의 인증 토큰으로 사용하는 신호 URL을 반환해야 합니다.

cameraStreamOffer String

오퍼 세션 설명 프로토콜 (SDP)

cameraStreamIceServers String

RTCIceServer에 대한 설명과 함께 인코딩된 JSON 문자열을 사용하여 대화형 연결 설정 (ICE) 서버를 나타냅니다. STUN (NAT용 세션 순회 유틸리티) 서버를 지정하지 않으면 플랫폼은 기본적으로 Google의 공개 STUN 서버를 사용합니다. TURN (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는 POST 본문과 JSON 형식의 응답이 있는 POST 메서드를 사용합니다.

WebRTC는 현재 Google Nest 스마트 디스플레이 및 Chromecast with Google TV 기기에서 지원됩니다.

이 섹션에서는 WebRTC 스트림 프로토콜을 사용할 때의 요구사항을 설명합니다.

데이터 유형 매개변수/정의
신호 요청 헤더

헤더는 다음 요구사항을 충족해야 합니다.

  • 인증: 인증 헤더는 토큰 유형이 BearercameraStreamAuthTokenGetCameraStream 반환 값의 인증 토큰을 사용해야 합니다.
  • Content-Type: application/json
신호 요청 매개변수

요청에는 다음 매개변수가 포함될 수 있습니다.

  • action: 문자열입니다. 유효한 값은 다음과 같습니다.
    • offer: 제공업체의 SDP 메시지를 제공합니다.
    • answer: 제공업체의 SDP 메시지에 응답합니다.
    • end: 현재 세션을 닫습니다.
  • deviceId: 문자열입니다. SYNC 또는 EXECUTE 요청에 보고된 기기 ID입니다.
  • sdp: 문자열입니다. 피어 연결의 세션 설명 프로토콜 메시지를 포함합니다. 콘텐츠는 action 매개변수의 값을 기반으로 합니다. action가 'end'면 이 매개변수를 비워둘 수 있습니다.
신호 응답 매개변수

응답에는 다음 매개변수가 포함될 수 있습니다.

  • action: 문자열입니다. 응답 값은 answer 유형이어야 합니다.
  • sdp: 문자열입니다. 답변 답변에 관한 SDP 메시지입니다.

WebRTC 요구사항 및 권장사항

  • Google은 현재 단방향 (반이중 방식) 통신을 지원합니다.
  • 번들링 및 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이 신호 서비스로 보내는 요청과 이에 상응하는 응답을 보여줍니다.

요청
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
{}