Skip to main content

Live streaming transcription

info

Gli esempi di questa guida sono realizzati utilizzando python e, nello specifico, il modulo asyncio in congiunzione con websockets, ma il flusso per l'utilizzo è indipendente dal linguaggio di programmazione scelto. Per maggiori informazioni, rimandiamo alla documentazione ufficiale del modulo websockets.

Inizializzazione dello stream

L'utilizzo del servizio di trascrizione live di Scripta necessita della richiesta di creazione esplicita di una live streaming transcription all'infrastruttura, equivalente a una semplice chiamata POST, autorizzata tramite la API key fornita da Litus AI per l'accesso all'infrastruttura:

import requests

stream_req = requests.post(
'https://scripta.litus.ai/api/v1/live/',
headers={"Litus-AI-API-Key": "<your-key>"},
)
req_data = stream_req.json()
sid = req_data['stream_id']
print(sid) # identificativo alfanumerico dello stream
warning

Dal momento della richiesta di creazione dello stream, l'infrastruttura attende un massimo di 60 secondi per la connessione al canale websocket. Se la connessione non viene stabilita entro questo intervallo, l'infrastruttura terminerà lo stream e rilascerà le risorse allocate.

Utilizzo del canale websocket

Una volta ottenuto l'ID dello stream, ci si potrà connettere all'infrastruttura tramite il protocollo WebSockets. L'endpoint sarà valido per l'intera durata dello streaming (e fino al termine della connessione creata), ed è utilizzabile come segue:

import websockets

ws_url = f'wss://scripta.litus.ai/api/v1/live/{sid}'

async with websockets.connect(ws_url) as ws:
# ... use websocket channel ...
pass
info

Non è richiesta l'autenticazione tramite API key per la connessione al canale websocket, in quanto l'identificativo dello stream è generato dinamicamente ed è conosciuto solo dall'inizializzatore dello stream stesso.

Rimandiamo alla pagina esempio di utilizzo in python per una semplice applicazione da riga di comando per ottenere la trascrizione live di un file audio salvato.

Ricezione delle trascrizioni

Le trascrizioni vengono spedite sul canale websocket utilizzando il formato JSON con la seguente struttura (simmetrico rispetto alle richieste di trascrizione non-live):

{
"start": 12.88,
"end": 28.42,
"transcription": "<transcription>"
}
info

Attualmente, l'infrastruttura per la trascrizione live non supporta l'identificazione dello speaker.

Conclusione dello stream

Una volta terminato lo stream audio, per evitare di perdere audio in coda, è possibile mandare la signaling byte string b'stream-end' per informare l'infrastruttura del termine dei byte in input. Di conseguenza, l'infrastruttura effettuerà dei controlli per terminare lo stream correttamente, assicurandosi di mandare eventuali trascrizioni pending. L'infrastruttura effettua questo controllo automaticamente anche dopo 5 secondi dalla ultima ricezione di byte sul canale websocket.