Streaming del lado del servidor

Esta guía te muestra cómo transcribir audio en tiempo real del lado del servidor con ElevenLabs.

Guía práctica · Da por hecho que has completado la guía de inicio rápido de Voz a Texto .

Descripción general

La API de Voz a Texto en Tiempo Real de ElevenLabs te permite transcribir transmisiones de audio en tiempo real con una latencia ultrabaja mediante el modelo Scribe Realtime v2. Tanto si creas asistentes de voz, servicios de transcripción o cualquier aplicación que requiera reconocimiento de voz en directo, esta API basada en WebSocket proporciona transcripciones parciales mientras hablas y transcripciones confirmadas cuando se completan los segmentos de voz.

Scribe v2 Realtime se puede implementar del lado del servidor para transcribir audio en tiempo real, ya sea mediante una URL, un archivo o tu propio flujo de audio.

La implementación del lado del servidor se diferencia de la del lado del cliente en algunos aspectos:

  • Usa una clave de API de ElevenLabs en lugar de un token de un solo uso.
  • Permite transmitir directamente desde una URL, sin necesidad de dividir manualmente el audio en fragmentos.

Para transmitir audio directamente desde el micrófono, consulta la guía de streaming del lado del cliente.

Inicio rápido

Esta guía da por hecho que has configurado tu clave de API y el SDK. Completa primero la guía de inicio rápido si aún no lo has hecho.

1

Configura el SDK

El SDK ofrece dos formas de transcribir audio en tiempo real: transmitir desde una URL o dividir manualmente el audio en fragmentos desde un archivo o tu propio flujo de audio.

Para consultar la lista completa de parámetros y opciones compatibles con la API, consulta la referencia de la API.

Este ejemplo muestra cómo transmitir un archivo de audio desde una URL mediante el SDK oficial.

La herramienta ffmpeg es necesaria para transmitir desde una URL. Visita su sitio web para consultar las instrucciones de instalación.

Crea un archivo llamado example.py o example.mts, según el lenguaje que elijas, y añade el siguiente código:

from dotenv import load_dotenv
import os
import asyncio
from elevenlabs import ElevenLabs, RealtimeEvents, RealtimeUrlOptions
load_dotenv()
async def main():
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
# Create an event to signal when to stop
stop_event = asyncio.Event()
# Connect to a streaming audio URL
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
model_id="scribe_v2_realtime",
url="https://npr-ice.streamguys1.com/live.mp3",
include_timestamps=True,
))
# Set up event handlers
def on_session_started(data):
print(f"Session started: {data}")
def on_partial_transcript(data):
print(f"Partial: {data.get('text', '')}")
def on_committed_transcript(data):
print(f"Committed: {data.get('text', '')}")
# Committed transcripts with word-level timestamps. Only received when include_timestamps is set to True.
def on_committed_transcript_with_timestamps(data):
print(f"Committed with timestamps: {data.get('words', '')}")
# Errors - will catch all errors, both server and websocket specific errors
def on_error(error):
print(f"Error: {error}")
# Signal to stop on error
stop_event.set()
def on_close():
print("Connection closed")
# Register event handlers
connection.on(RealtimeEvents.SESSION_STARTED, on_session_started)
connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, on_partial_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS, on_committed_transcript_with_timestamps)
connection.on(RealtimeEvents.ERROR, on_error)
connection.on(RealtimeEvents.CLOSE, on_close)
print("Transcribing audio stream... (Press Ctrl+C to stop)")
try:
# Wait until error occurs or connection closes
await stop_event.wait()
except KeyboardInterrupt:
print("\nStopping transcription...")
finally:
await connection.close()
if __name__ == "__main__":
asyncio.run(main())
2

Ejecuta el código

python example.py

Verás la transcripción del archivo de audio impresa en la consola como transcripciones parciales y confirmadas.

Próximos pasos