Умная домашняя камераСхема свойств потока
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). Если SDP предложения включен в результат выполнения (WebRTC), Google предоставит SDP ответа в конечной точке сигнализации. Если он не включен в намерение выполнения, Google сгенерирует SDP предложения и отправит его в конечную точку сигнализации, ожидая в качестве ответа 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 {}