Schema dell'attributo CameraStream per la smart home

action.devices.traits.CameraStream: questa funzionalità spiega 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 genere si tratta di videocamere di sicurezza o baby monitor. 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:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Streaming fluido
progressive_mp4
MP4 progressivo (utilizzato principalmente per i clip)
webrtc
WebRTC
cameraStreamNeedAuthToken Valore booleano

Obbligatorio.

Indica se è necessario un token di autenticazione per lo streaming del feed della videocamera.

Esempi

Videocamera con supporto di più protocolli che 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:

Quando riproduci in streaming i 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 per elaborare lo stream e visualizzarlo sul dispositivo. È consigliabile che lo sviluppatore crei un Custom Web Receiver per consentire l'accesso agli strumenti di debug, personalizzare il comportamento del player, personalizzare il branding dell'interfaccia utente e includere gli analytics. 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 scoprire di più sulle applicazioni di ricevitori web personalizzati, consulta la guida del sito per sviluppatori.

STATI del dispositivo

Nessuno.

COMANDI del dispositivo

I dispositivi con questa caratteristica possono rispondere ai seguenti comandi nell'ambito dell'operazione EXECUTE. Per scoprire di più sulla gestione degli intent EXECUTE, consulta Adempimento degli 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:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Streaming fluido
progressive_mp4
MP4 progressivo (utilizzato principalmente per i clip)
webrtc
WebRTC

Risultati

Risultati Tipo Descrizione
cameraStreamAuthToken String

Un token di autenticazione per consentire al destinatario specifico di autorizzare l'accesso allo stream. cameraStreamAuthToken è obbligatorio se cameraStreamNeedAuthToken è true e il token deve essere limitato solo al dispositivo di destinazione.

cameraStreamProtocol String

Obbligatorio.

Il formato multimediale a cui punta l'URL stream. Deve essere uno dei protocolli elencati nel parametro del comando SupportedStreamProtocols.

Valori supportati:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Streaming fluido
progressive_mp4
MP4 progressivo (utilizzato principalmente per i clip)
webrtc
WebRTC

Risultati non WebRTC

Risultati Tipo Descrizione
cameraStreamAccessUrl String

Obbligatorio.

Endpoint URL per il recupero dello stream in tempo reale nel formato specificato da cameraStreamProtocol.

cameraStreamReceiverAppId String

ID del ricevitore di trasmissione per elaborare lo stream della videocamera quando il parametro StreamToChromecast è true; se non viene fornito, verrà utilizzato il ricevitore predefinito.

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 deve restituire l'URL di segnalazione che utilizza cameraStreamAuthToken come token di autenticazione nell'intestazione della richiesta.

cameraStreamOffer String

Protocollo di descrizione della sessione (SDP) dell'offerta.

Se l'SDP dell'offerta è incluso nel risultato dell'esecuzione(WebRTC), Google fornirà l'SDP della risposta all'endpoint di segnalazione.

Se non è incluso nell'Intento di esecuzione, Google genererà l'SDP di offerta e lo pubblicherà nell'endpoint di segnalazione, aspettandosi un SDP di risposta come risposta. Consulta anche questa pagina.

cameraStreamIceServers String

Rappresenta i server ICE (Interactive Connectivity Establishment) 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 d'ingresso (streaming 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:

  • Autenticazione: l'intestazione di autenticazione deve utilizzare il token di autenticazione dal valore restituito di GetCameraStream per cameraStreamAuthToken con il tipo di token Bearer.
  • Content-Type: application/json.
Parametri di richiesta di segnalazione

La richiesta può includere i seguenti parametri:

  • action: stringa. I valori validi sono:
    • offer: messaggio SDP dell'offerta del fornitore.
    • answer: rispondi al messaggio SDP del fornitore.
    • end: chiudi la sessione corrente.
  • deviceId: stringa. L'ID dispositivo indicato in una richiesta SYNC o EXECUTE.
  • sdp: stringa. Contiene il messaggio Session Description Protocol per la connessione peer. I contenuti si basano sul valore del parametro action. Se action è "end", questo parametro può essere vuoto.
Parametri di risposta di segnalazione

La risposta può includere i seguenti parametri:

  • action: stringa. Il valore della risposta deve essere di tipo answer.
  • sdp: stringa. Messaggio SDP per la risposta.

Requisiti e consigli per WebRTC

  • Al momento Google supporta la comunicazione unidirezionale (half duplex).
  • Devi 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

Richiesta e risposta di segnalazione di esempio

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
{}