Schema dell'attributo CameraStream per la smart home
action.devices.traits.CameraStream
: questa funzionalità illustra come controllare lo streaming della videocamera di un dispositivo.
Questa caratteristica appartiene ai dispositivi in grado di riprodurre in streaming i feed video su smart display, dispositivi compatibili con Chromecast o smartphone. In linea di massima, si tratta di videocamere di sicurezza o videocamere per bambini. Tuttavia, questa caratteristica si applica anche a dispositivi più complessi dotati di una videocamera (ad esempio dispositivi per videoconferenze o un aspirapolvere robot con videocamera).
ATTRIBUTI del dispositivo
I dispositivi con questa caratteristica possono segnalare i seguenti
attributi nell'ambito dell'operazione SYNC
. Per scoprire di più sulla gestione degli intent SYNC
, consulta Adempimento degli intent.
Attributi | Tipo | Descrizione |
---|---|---|
cameraStreamSupportedProtocols |
Array |
Obbligatorio. Tipi di media supportati per lo stream della videocamera, ordinati in base alla preferenza. In genere, viene richiesto il primo protocollo in questo array compatibile con la piattaforma di destinazione. |
[item, ...] |
String |
Tipo di media. Valori supportati:
|
cameraStreamNeedAuthToken |
Valore booleano |
Obbligatorio. Indica se un token di autenticazione verrà fornito tramite |
Esempi
Fotocamera con più protocolli supportati, non richiede un token di autenticazione.
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
Videocamera che supporta un singolo protocollo e richiede un token di autenticazione.
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
Protocolli di streaming supportati
Questo trait supporta i seguenti protocolli di streaming:
webrtc
: WebRTChls
: HTTP Live Streamingdash
: Dynamic Adaptive Streaming over HTTPsmooth_stream
: Streaming fluidoprogressive_mp4
: MP4 progressivo (utilizzato principalmente per i clip)
Durante lo streaming dei protocolli hls
,dash
,smooth_stream
e
progressive_mp4
su dispositivi di trasmissione (Chromecast, smart display e
smart TV compatibili con Chromecast), viene avviato un ricevitore web di trasmissione che elabora lo streaming e ne esegue il rendering
sul dispositivo. È consigliabile che lo sviluppatore crei un
Ricevitore web personalizzato per
consentire l'accesso agli strumenti di debug, personalizzare il comportamento del player, personalizzare il branding dell'interfaccia utente e
includere dati e analisi. Per attivare l'utilizzo del ricevitore personalizzato e disattivare l'utilizzo del ricevitore predefinito, imposta l'ID app del ricevitore generato quando registri l'applicazione di trasmissione nel campo cameraStreamReceiverAppId
della risposta EXECUTE
.
Per ulteriori informazioni sulle applicazioni di ricevitore web personalizzato, visita la guida al sito per sviluppatori.
STATI del dispositivo
Nessuno.
COMANDI del dispositivo
I dispositivi con questo tratto potrebbero rispondere ai seguenti comandi
nell'ambito dell'operazione EXECUTE
. Per scoprire di più sulla gestione degli intent EXECUTE
, consulta Completamento dell'intent.
action.devices.commands.GetCameraStream
Parametri
Parametri | Tipo | Descrizione |
---|---|---|
StreamToChromecast |
Valore booleano |
Obbligatorio. Indica se lo stream verrà riprodotto su un dispositivo Chromecast. |
SupportedStreamProtocols |
Array |
Obbligatorio. Tipi/formati di contenuti multimediali supportati dalla destinazione desiderata. |
[item, ...] |
String |
Tipo di media. Valori supportati:
|
Risultati
Risultati | Tipo | Descrizione |
---|---|---|
cameraStreamAuthToken |
String |
Un token di autenticazione per consentire al destinatario specifico di autorizzare l'accesso allo stream. Se |
cameraStreamProtocol |
String |
Obbligatorio. Il formato multimediale a cui punta l'URL dello stream. Deve essere uno dei protocolli elencati nel parametro del comando Valori supportati:
|
Risultati non WebRTC
Risultati | Tipo | Descrizione |
---|---|---|
cameraStreamAccessUrl |
String |
Obbligatorio. Endpoint URL per il recupero dello stream in tempo reale nel formato specificato da |
cameraStreamReceiverAppId |
String |
ID del ricevitore di trasmissione per elaborare lo stream della videocamera quando il parametro |
Risultati WebRTC
Risultati | Tipo | Descrizione |
---|---|---|
cameraStreamSignalingUrl |
String |
Obbligatorio. Endpoint URL per il recupero e lo scambio di protocolli di descrizione della sessione (SDP) della videocamera e del client. Il client dovrebbe restituire l'URL di segnalazione che utilizza |
cameraStreamOffer |
String |
Offer Session Description Protocol (SDP). |
cameraStreamIceServers |
String |
Rappresenta i server ICE (Interactive Connectivity Implementment) utilizzando una stringa JSON codificata con la descrizione di un RTCIceServer. Se non specifichi i server STUN (Session Traversal Utilities for NAT), la piattaforma utilizza per impostazione predefinita i server STUN pubblici di Google. I server TURN (Traversal Using Relays around NAT) sono necessari solo se non puoi garantire che gli IP/candidati ICE forniti saranno accessibili pubblicamente (ad es. tramite un media server, un candidato ICE host pubblico, un candidato ICE di inoltro e così via). |
Esempi
Mostra la videocamera della porta d'ingresso (ricevitore di trasmissione predefinito).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
Fammi vedere la videocamera della porta d'ingresso (ricevitore di trasmissione personalizzato).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
Mostra la videocamera della porta principale (stream 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" }
ERRORI del dispositivo
Consulta l'elenco completo di errori ed eccezioni.Specifiche del protocollo WebRTC
I vantaggi dell'utilizzo di WebRTC sono la latenza ridotta e la conversazione unidirezionale. WebRTC utilizza un metodo POST
con un corpo POST
e una risposta in formato JSON.
WebRTC è attualmente supportato sui dispositivi Google Nest Smart Display e Chromecast con Google TV.
Questa sezione descrive i requisiti per l'utilizzo del protocollo di streaming WebRTC.
Tipo di dati | Parametri/definizioni |
---|---|
Intestazione della richiesta di segnalazione |
L'intestazione deve soddisfare i seguenti requisiti:
|
Parametri di richiesta di segnalazione | La richiesta può includere i seguenti parametri:
|
Parametri di risposta di segnalazione | La risposta può includere i seguenti parametri:
|
Requisiti e consigli per WebRTC
- Al momento Google supporta la comunicazione unidirezionale (half duplex).
- È necessario supportare il raggruppamento e rtcp-mux.
- Devi utilizzare (D)TLS 1.2 o versioni successive.
- Trickle ICE non è supportato. Tutti i candidati ICE devono essere raccolti prima di inviare l'SDP.
- Ti consigliamo vivamente di includere candidati ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 e TCP/IPv6 per aumentare la probabilità di una connessione riuscita.
Risoluzioni video supportate:
- Minimo: 480p
- Massimo: 1080p
Codec video supportati:
- VP8
- H.264
Codec audio supportati:
- Opus (codec preferito)
- G.711/PCMU
- G.722
Condivisione delle risorse tra origini
La condivisione delle risorse tra origini (CORS) è un meccanismo che utilizza intestazioni HTTP aggiuntive per indicare ai browser di consentire a un'applicazione web in esecuzione in un'origine di accedere a risorse selezionate da un'altra origine. Il server che ospita cameraStreamSignalingUrl
deve rispondere con la seguente intestazione:
Access-Control-Allow-Origin: https://www.gstatic.com
Esempio di richiesta e risposta di segnalazione
L'esempio seguente mostra una richiesta inviata da Google al tuo servizio di segnalazione e la risposta corrispondente a 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 {}