שליחת סטרימינג של אודיו ווידאו

במסמך הזה מוסבר איך לשלוח שידורי אודיו ווידאו ל-Gemini Live API כדי לנהל תקשורת דו-כיוונית בזמן אמת עם מודלים של Gemini. כאן מוסבר איך להגדיר ולהעביר נתוני אודיו ווידאו כדי ליצור אפליקציות דינמיות ואינטראקטיביות.

שליחת שידורי אודיו

כדי להטמיע אודיו בזמן אמת, צריך להקפיד על המפרטים של תדירות הדגימה ולנהל בקפידה את המאגר הזמני כדי להבטיח זמן אחזור נמוך ואפשרות טבעית להפרעה.

‫Gemini Live API תומך בפורמטים הבאים של אודיו:

  • קלט אודיו: אודיו PCM גולמי של 16 ביט בתדר 16kHz, ‏Little-endian
  • פלט אודיו: אודיו PCM גולמי של 16 ביט בתדר 24kHz, ‏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'))

שליחת שידורי וידאו

וידאו בסטרימינג מספק הקשר חזותי. ‫Gemini Live API מצפה לרצף של פריימים נפרדים של תמונות, ותומך בקלט של פריימים של וידאו בקצב של פריים אחד לשנייה. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש ברזולוציה של 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",
}

המאמרים הבאים