במסמך הזה מתואר איך לשלוח זרמי אודיו ווידאו אל Gemini Live API כדי ליצור תקשורת דו-כיוונית בזמן אמת עם מודלים של Gemini. כאן מוסבר איך להגדיר ולשדר נתוני אודיו ווידאו כדי ליצור אפליקציות דינמיות ואינטראקטיביות.
שליחת שידורי אודיו
כדי להטמיע אודיו בזמן אמת, צריך להקפיד על מפרטי קצב הדגימה ולנהל את המאגר בזהירות כדי להבטיח זמן אחזור נמוך ואפשרות להפרעה טבעית.
ה-API של שידורים חיים תומך בפורמטים הבאים של אודיו:
- קלט אודיו: אודיו PCM גולמי של 16 ביט ב-16 kHz, little-endian
- פלט אודיו: אודיו PCM גולמי של 16 ביט ב-24 kHz, little-endian
בדוגמת הקוד הבאה אפשר לראות איך לשלוח נתוני אודיו בסטרימינג:
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")
)
הלקוח צריך לשמור מאגר זמני להפעלה. השרת מעביר אודיו בסטרימינג בחלקים בהודעות server_content. הלקוח אחראי לפענח, לשמור במאגר הזמני ולהפעיל את הנתונים.
בדוגמת הקוד הבאה אפשר לראות איך מעבדים נתוני אודיו בסטרימינג:
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'))
שליחת שידורי וידאו
סטרימינג של סרטונים מספק הקשר חזותי. ה-Live API מצפה לרצף של פריימים נפרדים של תמונות ותומך בהזנת פריימים של סרטונים בקצב של 1 FPS. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש ברזולוציה של 768x768 בקצב של 1 FPS.
בדוגמת הקוד הבאה אפשר לראות איך לשלוח נתוני וידאו בסטרימינג:
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")
)
ההטמעה של הלקוח מתעדת פריים מפיד הווידאו, מקודדת אותו כ-blob של JPEG ומשדרת אותו באמצעות מבנה ההודעה 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()
הגדרת רזולוציית המדיה
אפשר לציין את הרזולוציה של קובצי המדיה שמוזנים על ידי הגדרת השדה media_resolution בתצורת הסשן. רזולוציה נמוכה יותר מקטינה את השימוש באסימונים ואת זמן האחזור, בעוד שרזולוציה גבוהה יותר משפרת את זיהוי הפרטים. הערכים הנתמכים כוללים low, medium ו-high.
config = {
"response_modalities": ["audio"],
"media_resolution": "low",
}