In diesem Dokument wird beschrieben, wie Sie Audio- und Videostreams an die Live API senden, um in Echtzeit bidirektional mit Gemini-Modellen zu kommunizieren. Hier erfahren Sie, wie Sie Audio- und Videodaten konfigurieren und übertragen, um dynamische und interaktive Anwendungen zu erstellen.
Audiostreams senden
Die Implementierung von Echtzeit-Audio erfordert die strikte Einhaltung der Spezifikationen für die Samplerate und eine sorgfältige Pufferverwaltung, um eine geringe Latenz und eine natürliche Unterbrechbarkeit zu gewährleisten.
Die Live API unterstützt die folgenden Audioformate:
- Eingabe-Audio: Rohes 16-Bit-PCM-Audio mit 16 kHz, Little Endian
- Ausgabe-Audio: Rohes 16‑Bit-PCM-Audio mit 24 kHz, Little Endian
Das folgende Codebeispiel zeigt, wie Sie Streaming-Audiodaten senden:
import asyncio
# Assumes session is an active Live API session
# and chunk_data contains bytes of raw 16-bit PCM audio at 16 kHz.
from google.genai import types
# Send audio input data in chunks
await session.send_realtime_input(
audio=types.Blob(data=chunk_data, mime_type="audio/pcm;rate=16000")
)
Der Client muss einen Wiedergabepuffer aufrechterhalten. Der Server streamt Audio in Chunks innerhalb von server_content-Nachrichten. Der Client ist für das Decodieren, Puffern und Abspielen der Daten verantwortlich.
Das folgende Codebeispiel zeigt, wie Sie Streaming-Audiodaten verarbeiten:
import asyncio
# Assumes session is an active Live API session
# and audio_queue is an asyncio.Queue for buffering audio for playback.
import numpy as np
async for msg in session.receive():
server_content = msg.server_content
if server_content:
# 1. Handle Interruption
if server_content.interrupted:
print("\n[Interrupted] Flushing buffer...")
# Clear the Python queue
while not audio_queue.empty():
try: audio_queue.get_nowait()
except asyncio.QueueEmpty: break
# Send signal to worker to reset hardware buffers if needed
await audio_queue.put(None)
continue
# 2. Process Audio chunks
if server_content.model_turn:
for part in server_content.model_turn.parts:
if part.inline_data:
# Add PCM data to playback queue
await audio_queue.put(np.frombuffer(part.inline_data.data, dtype='int16'))
Videostreams senden
Videostreaming bietet visuellen Kontext. Die Live API erwartet eine Sequenz diskreter Einzelbilder und unterstützt die Eingabe von Videoframes mit 1 FPS. Die besten Ergebnisse erzielen Sie mit einer nativen Auflösung von 768 × 768 Pixeln bei 1 FPS.
Das folgende Codebeispiel zeigt, wie Streaming-Videodaten gesendet werden:
import asyncio
# Assumes session is an active Live API session
# and chunk_data contains bytes of a JPEG image.
from google.genai import types
# Send video input data in chunks
await session.send_realtime_input(
media=types.Blob(data=chunk_data, mime_type="image/jpeg")
)
Bei der Clientimplementierung wird ein Frame aus dem Videofeed erfasst, als JPEG-Blob codiert und mit der Nachrichtenstruktur realtime_input übertragen.
import cv2
import asyncio
from google.genai import types
async def send_video_stream(session):
# Open webcam
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret: break
# 1. Resize to optimal resolution (768x768 max)
frame = cv2.resize(frame, (768, 768))
# 2. Encode as JPEG
_, buffer = cv2.imencode('.jpg', frame,)
# 3. Send as realtime input
await session.send_realtime_input(
media=types.Blob(data=buffer.tobytes(), mime_type="image/jpeg")
)
# 4. Wait 1 second (1 FPS)
await asyncio.sleep(1.0)
cap.release()
Media-Auflösung konfigurieren
Sie können die Auflösung für Eingabemedien festlegen, indem Sie das Feld media_resolution in der Sitzungskonfiguration festlegen. Eine niedrigere Auflösung verringert die Tokennutzung und Latenz, während eine höhere Auflösung die Detailerkennung verbessert. Unterstützte Werte sind low, medium und high.
config = {
"response_modalities": ["audio"],
"media_resolution": "low",
}
Nächste Schritte
- Live-Sitzungen starten und verwalten
- Live API-Funktionen konfigurieren
- Best Practices für die Live API