Dokumen ini menjelaskan cara mengirimkan streaming audio dan video ke Live API untuk komunikasi dua arah real-time dengan model Gemini. Pelajari cara mengonfigurasi dan mengirimkan data audio dan video untuk membuat aplikasi dinamis dan interaktif.
Mengirimkan streaming audio
Menerapkan audio real-time memerlukan kepatuhan yang ketat terhadap spesifikasi frekuensi sampel dan pengelolaan buffer yang cermat untuk memastikan latensi rendah dan kemampuan interupsi yang alami.
Live API mendukung format audio berikut:
- Audio input: Audio PCM 16-bit mentah pada 16 kHz, little-endian
- Audio output: Audio PCM 16-bit mentah pada 24 kHz, little-endian
Contoh kode berikut menunjukkan cara mengirim data audio 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")
)
Klien harus mempertahankan buffer pemutaran. Server melakukan streaming audio dalam potongan
dalam pesan server_content. Tanggung jawab klien adalah mendekode,
mem-buffer, dan memutar data.
Contoh kode berikut menunjukkan cara memproses data audio 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'))
Mengirimkan aliran video
Streaming video memberikan konteks visual. Live API mengharapkan urutan frame gambar diskrit dan mendukung input frame video pada 1 FPS. Untuk hasil terbaik, gunakan resolusi 768x768 asli pada 1 FPS.
Contoh kode berikut menunjukkan cara mengirim data video 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")
)
Penerapan klien mengambil frame dari feed video, mengenkodenya sebagai blob JPEG, dan mengirimkannya menggunakan struktur pesan 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()
Mengonfigurasi resolusi media
Anda dapat menentukan resolusi untuk media input dengan menyetel kolom
media_resolution dalam konfigurasi sesi. Resolusi yang lebih rendah akan mengurangi penggunaan token dan latensi, sedangkan resolusi yang lebih tinggi akan meningkatkan pengenalan detail. Nilai yang didukung mencakup low, medium, dan high.
config = {
"response_modalities": ["audio"],
"media_resolution": "low",
}