Guida pratica: Gestire stato e condizione
Guida pratica: Gestire stato e condizione
Introduzione
Questa guida spiega come gestire lo stato del dispositivo e mantenere la sincronizzazione con Frame.io. Utilizziamo un protocollo di websocket che consente la comunicazione in tempo reale tra Frame.io e il dispositivo. Se non conosci i websocket, questa guida ti aiuterà a comprenderne l’implementazione per le integrazioni C2C.
I websocket consentono a Frame.io di inviare messaggi al dispositivo e, mantenendo una connessione permanente, offrono un canale di comunicazione più efficiente rispetto alle richieste HTTP tradizionali.
In questa guida tratteremo questi argomenti:
- Apertura di una connessione socket per indicare che il dispositivo è “online”
- Recupero delle informazioni sulla connessione del dispositivo
- Verifica della disponibilità del backend di Frame.io
Prerequisiti
Se non l’hai già fatto, consulta la guida Implementazione C2C: configurazione prima di procedere. Avrai bisogno dell’access_token ottenuto durante il processo di autenticazione e autorizzazione. Tieni presente che i token scadono dopo 8 ore, quindi potresti dover aggiornare il token o ripetere il processo di autorizzazione. Per gli esempi di connessione websocket di questa guida, consigliamo di usare websocat, uno strumento CLI con istruzioni di installazione complete per vari sistemi operativi.
MacOS
Esegui l’installazione con brew install websocat
Recupero delle informazioni di connessione
Dopo ogni nuova autorizzazione o aggiornamento del token, il dispositivo deve interrogare immediatamente l’endpoint identity. Ciò fornisce informazioni cruciali sulla connessione:
La risposta sarà simile a questa (con alcuni dati abbreviati):
Questo endpoint consente di verificare i dettagli della connessione. Il dispositivo deve mostrare queste informazioni agli utenti:
-
project.name: il nome del progetto connesso -
authorization.creator.name: l’utente che ha autorizzato il dispositivo -
authorization.expires_at(facoltativo): orario di scadenza della connessione, se impostato -
status(facoltativo): stato del dispositivo, che può essere: -
online: il dispositivo è online e associato *offline: il dispositivo non ha comunicato per oltre 5 minuti (se si esegue una query su questo endpoint, lo stato cambierà inonline) *paused: il dispositivo è stato disabilitato temporaneamente nel pannello Connessioni C2C di Frame.io
Poiché lo stato di scadenza e pausa può cambiare in qualsiasi momento all’interno di Frame.io, conviene eseguire periodicamente il polling di queste informazioni, se vengono mostrate agli utenti. Consigliamo di limitare la frequenza del polling a non più di una volta ogni 60 secondi.
id
Annota il valore per id poiché ti servirà per la connessione websocket nella sezione successiva
Stabilire la connessione websocket
Il pannello Connessioni C2C in Frame.io mostra lo stato di connessione di ciascun dispositivo. Quando un dispositivo ha una connessione socket attiva, appare come online con un indicatore verde nell’angolo in alto a sinistra nella scheda. I dispositivi senza connessioni attive appaiono offline con una visualizzazione in grigio.
Il server termina automaticamente le connessioni socket dopo 60 secondi senza un messaggio di “heartbeat”. Sebbene questo intervallo sia sufficiente, consigliamo di inviare heartbeat ogni 15 secondi per una maggiore affidabilità. Se la connessione si chiude inaspettatamente, basta ristabilirla.
La connessione al websocket di Frame.io prevede due passaggi:
- Stabilire l’handshake TCP/IP e aprire la connessione websocket fisica
- Entrare nel canale specifico del dispositivo per identificare il tuo dispositivo al nostro backend
Per aprire la connessione websocket:
L'intestazione Authorization
A differenza degli endpoint API standard dove il token di accesso va nell’intestazione Authorization, per le connessioni websocket è incluso come parametro di richiesta codificato nell’URL. Devi comunque includere Bearer (con uno spazio) prima del token di accesso. Nelle stringhe codificate nell’URL, gli spazi appaiono come %20, quindi questa formattazione è prevista.
Una connessione riuscita restituisce un codice di stato 101, che indica il passaggio del protocollo a wss. La libreria websocket potrebbe gestire questo automaticamente. Un token scaduto produrrà una risposta 403. Successivamente, entra nel canale del tuo dispositivo inviando questo messaggio JSON, usando l’id dalle informazioni di connessione:
Riceverai una conferma:
I campi ref e payload
Il campo ref mette in correlazione le risposte con gli eventi che le hanno attivate. Poiché l’ordine degli eventi non è garantito, questo identificatore aiuta ad abbinare le risposte del server con gli eventi trigger. Frame.io non utilizza questo campo per gli eventi in arrivo: è esclusivamente per il riferimento del client. Il campo payload deve essere sempre presente, ma spesso può essere una stringa vuota (specificheremo quando un payload richiede contenuto specifico).
Controlla la dashboard C2C: il dispositivo adesso dovrebbe essere online! Consigliamo di implementare un processo in background per mantenere questa connessione:
Il formato del messaggio heartbeat:
Che riceve questa risposta:
Con una connessione socket attiva e la sottoscrizione al canale, il dispositivo apparirà come online nel pannello Connessioni C2C di Frame.io. Se la connessione si interrompe, apparirà offline.
Visualizzazione dello stato del dispositivo
Anziché visualizzare i valori di stato raw (online, offline, paused), consigliamo di trasformarli in indicatori più significativi per l’utente:
- In pausa: true/false - Mostra
truese lo stato èpaused, altrimentifalse - Connesso: true/false - Indica se il dispositivo può raggiungere il backend di Frame.io (vedi il test di connessione backend di seguito)
Gestione dello stato di pausa
Sebbene la visualizzazione dello stato di pausa sia facoltativa, è importante comprenderne la funzione.
La funzione di pausa è progettata per bloccare temporaneamente il caricamento di contenuti sensibili. Non blocca il traffico di rete, ma impedisce che media specifici raggiungano Frame.io. È utile in situazioni come le riprese di scene contenenti materiale sensibile, dove l’archiviazione cloud immediata potrebbe essere inappropriata.
La pausa è controllata tramite l’interfaccia Frame.io, non tramite la tua integrazione. Quando un dispositivo è in pausa, solo i media creati durante il periodo di pausa vengono bloccati, mentre quelli acquisiti in precedenza rimangono idonei per il caricamento.
Considerazioni importanti:
- Non fare affidamento esclusivamente sull’endpoint identity per convalidare l’idoneità al caricamento: il nostro backend lo gestisce automaticamente
- Gli eventi socket segnalano le modifiche dello stato con
event: "status_updated"epayload: "paused"o"resumed" - Benché gli eventi possano aiutare a gestire lo stato, potrebbero andare persi o essere consegnati non in sequenza
- Ricevere un errore
409durante il caricamento non significa necessariamente che il dispositivo sia attualmente in pausa. Potrebbe indicare che il media è stato creato durante una precedente finestra di pausa - Se visualizzi uno stato di pausa, verifica la precisione controllando periodicamente le informazioni di connessione
Verifica della connettività del backend
Per controllare la disponibilità del backend Frame.io, usa questo endpoint:
Questo endpoint non richiede autorizzazione. Una risposta positiva indica la connettività:
Questa verifica dello stato è particolarmente utile in quanto conferma la connettività specifica con Frame.io, piuttosto che la disponibilità generale della rete. Potrebbero verificarsi dei casi in cui la rete funziona, ma Frame.io non è raggiungibile a causa di problemi del servizio o di instradamento.
Passaggi successivi
Ti incoraggiamo a contattare il nostro team per qualsiasi domanda, poi vai alla guida sul caricamento di base. Saremo lieti di aiutarti nel tuo percorso di implementazione. Per maggiori informazioni sulla gestione dell’autorizzazione del dispositivo, consulta la guida alla gestione delle autorizzazioni.