Streaming po stronie serwera

Ten poradnik pokazuje, jak transkrybować audio w czasie rzeczywistym po stronie serwera za pomocą ElevenLabs.

Poradnik · Zakłada, że masz już za sobą krótki przewodnik po Speech to Text .

Omówienie

ElevenLabs Realtime Speech to Text API pozwala transkrybować strumienie audio w czasie rzeczywistym z bardzo małym opóźnieniem, korzystając z modelu Scribe Realtime v2. Niezależnie od tego, czy tworzysz asystentów głosowych, usługi transkrypcji czy aplikację wymagającą rozpoznawania mowy na żywo, to API oparte na WebSocket dostarcza częściowe transkrypcje podczas mówienia i zatwierdzone transkrypcje po zakończeniu segmentów mowy.

Scribe v2 Realtime można wdrożyć po stronie serwera, aby transkrybować audio w czasie rzeczywistym z adresu URL, pliku lub własnego strumienia audio.

Implementacja po stronie serwera różni się od tej po stronie klienta w kilku kwestiach:

  • Używa klucza API ElevenLabs zamiast tokenu jednorazowego.
  • Obsługuje streaming bezpośrednio z adresu URL, bez ręcznego dzielenia audio na fragmenty.

Aby przesyłać audio bezpośrednio z mikrofonu, zobacz poradnik Streaming po stronie klienta.

Szybki start

Ten poradnik zakłada, że masz skonfigurowany klucz API i SDK. Jeśli jeszcze tego nie zrobisz, najpierw przejdź przez szybki start.

1

Skonfiguruj SDK

SDK oferuje dwa sposoby transkrypcji audio w czasie rzeczywistym: streaming z adresu URL lub ręczne dzielenie audio z pliku albo własnego strumienia audio na fragmenty.

Pełną listę obsługiwanych przez API parametrów i opcji znajdziesz w dokumentacji API.

Ten przykład pokazuje, jak przesyłać plik audio z adresu URL za pomocą oficjalnego SDK.

Narzędzie ffmpeg jest wymagane podczas streamingu z adresu URL. Instrukcje instalacji znajdziesz na jego stronie.

Utwórz nowy plik o nazwie example.py lub example.mts, zależnie od wybranego języka, i dodaj poniższy kod:

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

Uruchom kod

python example.py

W konsoli zobaczysz transkrypcję pliku audio — częściową i zatwierdzoną.

Kolejne kroki