Questo documento descrive come inviare stream audio e video all'API Live per la comunicazione bidirezionale in tempo reale con i modelli Gemini. Scopri come configurare e trasmettere dati audio e video per creare applicazioni dinamiche e interattive.
Inviare stream audio
L'implementazione dell'audio in tempo reale richiede il rigoroso rispetto delle specifiche della frequenza di campionamento e un'attenta gestione del buffer per garantire una bassa latenza e un'interruzione naturale.
L'API Live supporta i seguenti formati audio:
- Audio di input: audio PCM a 16 bit non elaborato a 16 kHz, little-endian
- Audio di output: audio PCM a 16 bit non elaborato a 24 kHz, little-endian
Il seguente esempio di codice mostra come inviare dati audio in streaming:
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")
)
Il client deve mantenere un buffer di riproduzione. Il server trasmette l'audio in blocchi
all'interno dei messaggi server_content. È responsabilità del client decodificare,
memorizzare nel buffer e riprodurre i dati.
Il seguente esempio di codice mostra come elaborare i dati audio in streaming:
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'))
Inviare stream video
Lo streaming video fornisce un contesto visivo. L'API Live prevede una sequenza di frame di immagini discreti e supporta l'input di frame video a 1 FPS. Per risultati ottimali, utilizza la risoluzione nativa 768x768 a 1 FPS.
Il seguente esempio di codice mostra come inviare dati video in streaming:
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")
)
L'implementazione del client acquisisce un frame dal feed video, lo codifica come
blob JPEG e lo trasmette utilizzando la struttura del messaggio realtime_input.
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()
Configurare la risoluzione dei contenuti multimediali
Puoi specificare la risoluzione per i contenuti multimediali di input impostando il campo
media_resolution nella configurazione della sessione. Una risoluzione inferiore
riduce l'utilizzo di token e la latenza, mentre una risoluzione superiore migliora il riconoscimento
dei dettagli. I valori supportati includono low, medium e high.
config = {
"response_modalities": ["audio"],
"media_resolution": "low",
}
Passaggi successivi
- Avviare e gestire le sessioni live
- Configurare le funzionalità dell'API Live
- Best practice per l'API Live