Умная домашняя камераСхема свойств потока

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

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

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

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

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

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

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

[ item, ... ] Нить

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

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

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

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

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

Примеры

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

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

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

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

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

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

При потоковой передаче протоколов hls , dash , smooth_stream и progressive_mp4 на устройства Cast (Chromecast, интеллектуальные дисплеи и смарт-телевизоры с поддержкой Chromecast) запускается веб-приемник Cast для обработки потока и его рендеринга на устройстве. Разработчику рекомендуется создать собственный веб-приемник , чтобы обеспечить доступ к инструментам отладки, настроить поведение игрока, настроить фирменный стиль пользовательского интерфейса и включить аналитику. Чтобы включить использование пользовательского приемника и отказаться от использования приемника по умолчанию, установите идентификатор приложения-приемника, который создается при регистрации приложения Cast, в поле cameraStreamReceiverAppId ответа EXECUTE .

Чтобы узнать больше о приложениях Custom Web Receiver, посетите руководство сайта разработчика.

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

Никто.

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

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

action.devices.commands.GetCameraStream

Параметры

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

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

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

SupportedStreamProtocols Множество

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

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

[ item, ... ] Нить

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

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

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

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

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

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

cameraStreamProtocol Нить

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

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

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

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

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

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

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

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

cameraStreamReceiverAppId Нить

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

Результаты WebRTC

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

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

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

cameraStreamOffer Нить

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

cameraStreamIceServers Нить

Представляет серверы установления интерактивного подключения (ICE) с использованием закодированной строки JSON с описанием RTCIceServer . Если вы не укажете серверы STUN (утилиты прохождения сеанса для NAT), платформа по умолчанию использует общедоступные серверы STUN Google. Серверы 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 с телом 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 должны быть собраны перед отправкой СДП.
  • Настоятельно рекомендуется включить кандидаты ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 и TCP/IPv6, чтобы повысить вероятность успешного соединения.

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

  • Минимум: 480p
  • Максимум: 1080p

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

  • ВП8
  • H.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
{}