Умная домашняя камераСхема свойств потока
action.devices.traits.CameraStream
— эта черта описывает, как управлять потоком камеры устройства.
Эта особенность принадлежит устройствам, которые имеют возможность передавать потоковое видео на интеллектуальные дисплеи, устройства с поддержкой Chromecast или смартфоны. По большому счету, это камеры видеонаблюдения или детские камеры. Но эта особенность также применима и к более сложным устройствам, на которых есть камера (например, устройства для видеоконференций или вакуумный робот с камерой).
АТРИБУТЫ устройства
Устройства с этой характеристикой могут сообщать следующие атрибуты в рамках операции SYNC
. Дополнительные сведения об обработке намерений SYNC
см. в разделе Выполнение намерений .
Атрибуты | Тип | Описание |
---|---|---|
cameraStreamSupportedProtocols | Множество | Необходимый. Поддерживаемые типы мультимедиа для потока камеры, упорядоченные по предпочтениям. Обычно запрашивается первый протокол в этом массиве, совместимый с целевой поверхностью. |
[ item, ... ] | Нить | Тип носителя. Поддерживаемые значения:
|
cameraStreamNeedAuthToken | логическое значение | Необходимый. Будет ли предоставлен токен аутентификации через |
Примеры
Камера с поддержкой нескольких протоколов, не требующая токена аутентификации.
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
Камера поддерживает один протокол, требующий токена аутентификации.
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
Поддерживаемые протоколы потоковой передачи
Эта особенность поддерживает следующие протоколы потоковой передачи:
-
webrtc
: WebRTC -
hls
: прямая трансляция HTTP -
dash
: динамическая адаптивная потоковая передача через HTTP. -
smooth_stream
: Плавная потоковая передача -
progressive_mp4
: Прогрессивный MP4 (в основном используется для клипов)
При потоковой передаче протоколов 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, ... ] | Нить | Тип носителя. Поддерживаемые значения:
|
Результаты
Результаты | Тип | Описание |
---|---|---|
cameraStreamAuthToken | Нить | Токен аутентификации для конкретного получателя, позволяющий авторизовать доступ к потоку. Если |
cameraStreamProtocol | Нить | Необходимый. Формат мультимедиа, на который указывает URL-адрес потока. Это должен быть один из протоколов, перечисленных в параметре команды Поддерживаемые значения:
|
Результаты без WebRTC
Результаты | Тип | Описание |
---|---|---|
cameraStreamAccessUrl | Нить | Необходимый. Конечная точка URL-адреса для получения потока в реальном времени в формате, указанном |
cameraStreamReceiverAppId | Нить | Приведите идентификатор получателя для обработки потока камеры, если параметр |
Результаты WebRTC
Результаты | Тип | Описание |
---|---|---|
cameraStreamSignalingUrl | Нить | Необходимый. Конечная точка URL-адреса для получения и обмена протоколами описания сеансов камеры и клиента (SDP). Клиент должен вернуть URL-адрес сигнализации, который использует |
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.
Тип данных | Параметры/Определения |
---|---|
Заголовок запроса сигнализации | Заголовок должен отвечать следующим требованиям:
|
Параметры запроса сигнализации | Запрос может включать в себя следующие параметры:
|
Параметры ответа на сигнализацию | Ответ может включать в себя следующие параметры:
|
Требования и рекомендации 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 {}