Добро пожаловать в Центр разработчиков Google Home, новое место, где можно научиться разрабатывать действия для умного дома. Примечание. Вы продолжите создавать действия в консоли действий.

Схема характеристик умного дома CameraStream

action.devices.traits.CameraStream — этот трейт описывает, как управлять потоком камеры устройства.

Эта черта относится к устройствам, которые имеют возможность потоковой передачи видео на интеллектуальные дисплеи, устройства с поддержкой Chromecast или смартфоны. По большому счету, это камеры слежения или детские камеры. Но эта черта распространяется и на более сложные устройства, на которых есть камера (например, устройства для видеоконференций или робот-пылесос с камерой).

АТРИБУТЫ устройства

Устройства с этой чертой могут сообщать о следующих атрибутах как часть операции SYNC . Дополнительные сведения об обработке намерений SYNC см. в разделе Выполнение намерений .

Атрибуты Тип Описание
cameraStreamSupportedProtocols Множество

Необходимый.

Поддерживаемые типы мультимедиа для потока с камеры, упорядоченные по предпочтениям. Как правило, запрашивается первый протокол в этом массиве, совместимый с целевой поверхностью.

[ item, ... ] Нить

Тип носителя.

Поддерживаемые значения:

hls
Прямая трансляция HTTP
dash
Динамическая адаптивная потоковая передача через HTTP
smooth_stream
Гладкая потоковая передача
progressive_mp4
Прогрессивный MP4 (в основном используется для клипов)
webrtc
WebRTC
cameraStreamNeedAuthToken логический

Необходимый.

Будет ли предоставлен токен аутентификации через cameraStreamAuthToken для целевой поверхности для потоковой передачи канала камеры.

Примеры

Камера с поддержкой нескольких протоколов, не требующая токена авторизации.

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

Камера поддерживает один протокол, требующий токена авторизации.

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

Поддерживаемые потоковые протоколы

Этот трейт поддерживает следующие протоколы потоковой передачи:

СОСТОЯНИЯ устройства

Никто.

КОМАНДЫ устройства

Устройства с этой чертой могут отвечать на следующие команды как часть операции EXECUTE . Дополнительные сведения об обработке намерений EXECUTE см. в разделе Выполнение намерений .

action.devices.commands.GetCameraStream

Параметры

Параметры Тип Описание
StreamToChromecast логический

Необходимый.

Будет ли трансляция воспроизводиться на устройстве Chromecast.

SupportedStreamProtocols Множество

Необходимый.

Типы/форматы мультимедиа, поддерживаемые желаемым адресатом.

[ item, ... ] Нить

Тип носителя.

Поддерживаемые значения:

hls
Прямая трансляция HTTP
dash
Динамическая адаптивная потоковая передача через HTTP
smooth_stream
Гладкая потоковая передача
progressive_mp4
Прогрессивный MP4 (в основном используется для клипов)
webrtc
WebRTC

Полученные результаты

Полученные результаты Тип Описание
cameraStreamAuthToken Нить

Маркер авторизации для конкретного получателя для авторизации доступа к потоку. Если для cameraStreamNeedAuthToken задано значение true и это значение не указано, учетные данные пользователя OAuth будут использоваться в качестве токена аутентификации.

cameraStreamProtocol Нить

Необходимый.

Формат мультимедиа, на который указывает URL-адрес потока. Это должен быть один из протоколов, перечисленных в параметре команды SupportedStreamProtocols .

Поддерживаемые значения:

hls
Прямая трансляция HTTP
dash
Динамическая адаптивная потоковая передача через HTTP
smooth_stream
Гладкая потоковая передача
progressive_mp4
Прогрессивный MP4 (в основном используется для клипов)
webrtc
WebRTC

Результаты без WebRTC

Полученные результаты Тип Описание
cameraStreamAccessUrl Нить

Необходимый.

Конечная точка URL-адреса для получения потока в реальном времени в формате, указанном cameraStreamProtocol .

cameraStreamReceiverAppId Нить

Идентификатор транслируемого приемника для обработки потока камеры, когда параметр StreamToChromecast имеет значение true; приемник по умолчанию будет использоваться, если он не указан.

Результаты WebRTC

Полученные результаты Тип Описание
cameraStreamSignalingUrl Нить

Необходимый.

Конечная точка URL-адреса для получения и обмена протоколами описания сеанса камеры и клиента (SDP). Клиент должен вернуть сигнальный URL-адрес, который использует cameraStreamAuthToken в качестве маркера аутентификации в заголовке запроса.

cameraStreamOffer Нить

Предлагаем протокол описания сеанса (SDP).

cameraStreamIceServers Нить

Представляет серверы Interactive Connectivity Establishment (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 — низкая задержка и односторонний разговор. WebRTC использует метод POST с телом POST и ответом в формате JSON.

В настоящее время WebRTC поддерживается на Google Nest Smart Display и Chromecast с устройствами Google TV.

В этом разделе описаны требования при использовании потокового протокола WebRTC.

Тип данных Параметры/определения
Заголовок запроса сигнализации

Заголовок должен соответствовать следующим требованиям:

  • Аутентификация . Заголовок аутентификации должен использовать токен аутентификации из возвращаемого значения GetCameraStream для cameraStreamAuthToken с токеном типа Bearer .
  • Тип содержимого : application/json .
Параметры запроса сигнализации

Запрос может включать следующие параметры:

  • action : строка. Допустимые значения:
    • offer : предложение SDP-сообщения от провайдера.
    • answer : Ответить на SDP-сообщение от провайдера.
    • end : закрыть текущий сеанс.
  • deviceId : строка. Идентификатор устройства, указанный в запросе SYNC или EXECUTE.
  • sdp : строка. Содержит сообщение протокола описания сеанса для однорангового соединения. Содержимое основано на значении параметра action . Если action «конец», этот параметр может быть пустым.
Параметры ответа сигнализации

Ответ может включать следующие параметры:

  • 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
  • Н.264

Поддерживаемые аудиокодеки:

  • Opus (предпочтительный кодек)
  • G.711/ПКМУ
  • 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
{}