L'API Live permet des interactions vocales et vidéo en temps réel et à faible latence avec Gemini. Il traite les flux continus d'audio, de vidéo ou de texte pour fournir des réponses vocales immédiates et naturelles, créant ainsi une expérience conversationnelle naturelle pour vos utilisateurs.

L'API Live propose un ensemble complet de fonctionnalités telles que la détection de l'activité vocale, l'utilisation d'outils et l'appel de fonctions, la gestion des sessions (pour gérer les conversations de longue durée) et les jetons éphémères (pour une authentification sécurisée côté client).
Cette page vous permet de vous familiariser avec des exemples et des exemples de code de base.
Essayer l'API Live dans Google AI Studio
Choisir une approche d'implémentation
Lorsque vous intégrez l'API Live, vous devez choisir l'une des approches d'implémentation suivantes :
- Serveur à serveur : votre backend se connecte à l'API Live à l'aide de WebSockets. En règle générale, votre client envoie des données de flux (audio, vidéo, texte) à votre serveur, qui les transmet ensuite à l'API Live.
- Client vers serveur : votre code de frontend se connecte directement à l'API Live à l'aide de WebSockets pour diffuser des données, en contournant votre backend.
Intégration de partenaires
Pour simplifier le développement d'applications audio et vidéo en temps réel, vous pouvez utiliser une intégration tierce compatible avec l'API Gemini Live via WebRTC ou WebSockets.
Premiers pas
Cet exemple côté serveur diffuse le contenu audio du micro en flux continu et lit le contenu audio renvoyé. Pour obtenir des exemples complets de bout en bout, y compris une application cliente, consultez Exemples d'applications.
Le format audio d'entrée doit être au format PCM 16 bits, 16 kHz, mono, et l'audio reçu utilise un taux d'échantillonnage de 24 kHz.
Python
Installez des utilitaires pour le streaming audio. Des dépendances supplémentaires au niveau du système (par exemple, portaudio) peuvent être requises. Pour obtenir la procédure d'installation détaillée, consultez la documentation PyAudio.
pip install pyaudioimport asyncio
from google import genai
import pyaudio
client = genai.Client()
# --- pyaudio config ---
FORMAT = pyaudio.paInt16
CHANNELS = 1
SEND_SAMPLE_RATE = 16000
RECEIVE_SAMPLE_RATE = 24000
CHUNK_SIZE = 1024
pya = pyaudio.PyAudio()
# --- Live API config ---
MODEL = "gemini-2.5-flash-native-audio-preview-09-2025"
CONFIG = {
"response_modalities": ["AUDIO"],
"system_instruction": "You are a helpful and friendly AI assistant.",
}
audio_queue_output = asyncio.Queue()
audio_queue_mic = asyncio.Queue(maxsize=5)
audio_stream = None
async def listen_audio():
"""Listens for audio and puts it into the mic audio queue."""
global audio_stream
mic_info = pya.get_default_input_device_info()
audio_stream = await asyncio.to_thread(
pya.open,
format=FORMAT,
channels=CHANNELS,
rate=SEND_SAMPLE_RATE,
input=True,
input_device_index=mic_info["index"],
frames_per_buffer=CHUNK_SIZE,
)
kwargs = {"exception_on_overflow": False} if __debug__ else {}
while True:
data = await asyncio.to_thread(audio_stream.read, CHUNK_SIZE, **kwargs)
await audio_queue_mic.put({"data": data, "mime_type": "audio/pcm"})
async def send_realtime(session):
"""Sends audio from the mic audio queue to the GenAI session."""
while True:
msg = await audio_queue_mic.get()
await session.send_realtime_input(audio=msg)
async def receive_audio(session):
"""Receives responses from GenAI and puts audio data into the speaker audio queue."""
while True:
turn = session.receive()
async for response in turn:
if (response.server_content and response.server_content.model_turn):
for part in response.server_content.model_turn.parts:
if part.inline_data and isinstance(part.inline_data.data, bytes):
audio_queue_output.put_nowait(part.inline_data.data)
# Empty the queue on interruption to stop playback
while not audio_queue_output.empty():
audio_queue_output.get_nowait()
async def play_audio():
"""Plays audio from the speaker audio queue."""
stream = await asyncio.to_thread(
pya.open,
format=FORMAT,
channels=CHANNELS,
rate=RECEIVE_SAMPLE_RATE,
output=True,
)
while True:
bytestream = await audio_queue_output.get()
await asyncio.to_thread(stream.write, bytestream)
async def run():
"""Main function to run the audio loop."""
try:
async with client.aio.live.connect(
model=MODEL, config=CONFIG
) as live_session:
print("Connected to Gemini. Start speaking!")
async with asyncio.TaskGroup() as tg:
tg.create_task(send_realtime(live_session))
tg.create_task(listen_audio())
tg.create_task(receive_audio(live_session))
tg.create_task(play_audio())
except asyncio.CancelledError:
pass
finally:
if audio_stream:
audio_stream.close()
pya.terminate()
print("\nConnection closed.")
if __name__ == "__main__":
try:
asyncio.run(run())
except KeyboardInterrupt:
print("Interrupted by user.")
JavaScript
Installez des utilitaires pour le streaming audio. Des dépendances supplémentaires au niveau du système peuvent être requises (sox pour Mac/Windows ou ALSA pour Linux). Pour obtenir des instructions d'installation détaillées, consultez la documentation sur les enceintes et les micros.
npm install mic speakerimport { GoogleGenAI, Modality } from '@google/genai';
import mic from 'mic';
import Speaker from 'speaker';
const ai = new GoogleGenAI({});
// WARNING: Do not use API keys in client-side (browser based) applications
// Consider using Ephemeral Tokens instead
// More information at: https://ai.google.dev/gemini-api/docs/ephemeral-tokens
// --- Live API config ---
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
responseModalities: [Modality.AUDIO],
systemInstruction: "You are a helpful and friendly AI assistant.",
};
async function live() {
const responseQueue = [];
const audioQueue = [];
let speaker;
async function waitMessage() {
while (responseQueue.length === 0) {
await new Promise((resolve) => setImmediate(resolve));
}
return responseQueue.shift();
}
function createSpeaker() {
if (speaker) {
process.stdin.unpipe(speaker);
speaker.end();
}
speaker = new Speaker({
channels: 1,
bitDepth: 16,
sampleRate: 24000,
});
speaker.on('error', (err) => console.error('Speaker error:', err));
process.stdin.pipe(speaker);
}
async function messageLoop() {
// Puts incoming messages in the audio queue.
while (true) {
const message = await waitMessage();
if (message.serverContent && message.serverContent.interrupted) {
// Empty the queue on interruption to stop playback
audioQueue.length = 0;
continue;
}
if (message.serverContent && message.serverContent.modelTurn && message.serverContent.modelTurn.parts) {
for (const part of message.serverContent.modelTurn.parts) {
if (part.inlineData && part.inlineData.data) {
audioQueue.push(Buffer.from(part.inlineData.data, 'base64'));
}
}
}
}
}
async function playbackLoop() {
// Plays audio from the audio queue.
while (true) {
if (audioQueue.length === 0) {
if (speaker) {
// Destroy speaker if no more audio to avoid warnings from speaker library
process.stdin.unpipe(speaker);
speaker.end();
speaker = null;
}
await new Promise((resolve) => setImmediate(resolve));
} else {
if (!speaker) createSpeaker();
const chunk = audioQueue.shift();
await new Promise((resolve) => {
speaker.write(chunk, () => resolve());
});
}
}
}
// Start loops
messageLoop();
playbackLoop();
// Connect to Gemini Live API
const session = await ai.live.connect({
model: model,
config: config,
callbacks: {
onopen: () => console.log('Connected to Gemini Live API'),
onmessage: (message) => responseQueue.push(message),
onerror: (e) => console.error('Error:', e.message),
onclose: (e) => console.log('Closed:', e.reason),
},
});
// Setup Microphone for input
const micInstance = mic({
rate: '16000',
bitwidth: '16',
channels: '1',
});
const micInputStream = micInstance.getAudioStream();
micInputStream.on('data', (data) => {
// API expects base64 encoded PCM data
session.sendRealtimeInput({
audio: {
data: data.toString('base64'),
mimeType: "audio/pcm;rate=16000"
}
});
});
micInputStream.on('error', (err) => {
console.error('Microphone error:', err);
});
micInstance.start();
console.log('Microphone started. Speak now...');
}
live().catch(console.error);
Exemples d'applications
Consultez les exemples d'applications suivants qui illustrent l'utilisation de l'API Live pour des cas d'utilisation de bout en bout :
- Application de démarrage audio en direct sur AI Studio, utilisant des bibliothèques JavaScript pour se connecter à l'API Live et diffuser de l'audio bidirectionnel via votre micro et vos haut-parleurs.
- Pour obtenir d'autres exemples et des guides de démarrage, consultez Intégrations de partenaires.
Étape suivante
- Consultez le guide complet des fonctionnalités de l'API Live pour découvrir les principales fonctionnalités et configurations, y compris la détection de l'activité vocale et les fonctionnalités audio natives.
- Consultez le guide Utilisation d'outils pour découvrir comment intégrer l'API Live aux outils et à l'appel de fonction.
- Consultez le guide Gestion de session pour gérer les conversations de longue durée.
- Consultez le guide Jetons éphémères pour une authentification sécurisée dans les applications client-serveur.
- Pour en savoir plus sur l'API WebSockets sous-jacente, consultez la documentation de référence de l'API WebSockets.