Files

96 lines
3.6 KiB
Python

# detalles_de_sala.py
import os
import logging
import asyncio
import aiohttp
from livekit import rtc
ROOM = "mi_sala_prueba"
USER = "agente_tts"
TOKEN_URL = "http://127.0.0.1:8000/token"
LIVEKIT_URL = "ws://192.168.1.131:7880"
async def get_token():
"""Solicita el token JWT al backend FastAPI"""
print("🔍 Solicitando token al backend FastAPI...")
try:
async with aiohttp.ClientSession() as session:
async with session.get(f"{TOKEN_URL}?room={ROOM}&user={USER}") as resp:
print(f"📡 Respuesta del backend: {resp.status}")
if resp.status != 200:
print(f"❌ Error al obtener token: {await resp.text()}")
raise Exception(f"Error HTTP {resp.status} al solicitar token")
data = await resp.json()
token = data.get("token")
if not token:
print("⚠️ Respuesta no contiene campo 'token'")
raise Exception("Respuesta inválida del backend /token")
print("✅ Token recibido correctamente")
print(f"🧾 Token (primeros 60 chars): {token[:60]}...")
return token
except Exception as e:
print(f"🚨 Error en get_token(): {e}")
raise
async def main():
print("🚀 Iniciando script LiveKit Client")
print(f"🌍 Servidor LiveKit: {LIVEKIT_URL}")
print(f"🔑 URL de Token: {TOKEN_URL}")
print(f"🏠 Sala: {ROOM}, 👤 Usuario: {USER}")
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
room = rtc.Room()
print("⚙️ Configurando eventos del Room...")
@room.on("participant_connected")
def on_participant_connected(participant: rtc.RemoteParticipant):
print(f"🟢 Participante conectado: {participant.identity} ({participant.sid})")
logger.info("🟢 Participant connected: %s (%s)", participant.identity, participant.sid)
@room.on("participant_disconnected")
def on_participant_disconnected(participant: rtc.RemoteParticipant):
print(f"🔴 Participante desconectado: {participant.identity} ({participant.sid})")
logger.info("🔴 Participant disconnected: %s (%s)", participant.identity, participant.sid)
@room.on("track_subscribed")
def on_track_subscribed(track: rtc.Track, publication: rtc.RemoteTrackPublication, participant: rtc.RemoteParticipant):
print(f"🎥 Track suscrito de {participant.identity}: {publication.sid} ({track.kind})")
logger.info("🎥 Track subscribed from %s: %s", participant.identity, publication.sid)
@room.on("disconnected")
def on_disconnected():
print("⚠️ Desconectado del servidor LiveKit.")
logger.warning("⚠️ Room disconnected.")
# 🔑 Obtener token
token = await get_token()
print("🧩 Intentando conectar al servidor LiveKit...")
try:
await room.connect(LIVEKIT_URL, token)
print(f"✅ Conectado exitosamente a la sala: {room.name}")
except Exception as e:
print(f"🚨 Error al conectar a LiveKit: {e}")
raise
print("🕓 Conexión activa. Esperando eventos...")
try:
while True:
await asyncio.sleep(2)
print("⏳ Manteniendo conexión viva...")
except KeyboardInterrupt:
print("🛑 Interrupción manual detectada. Cerrando sesión...")
await room.disconnect()
print("👋 Desconectado correctamente.")
if __name__ == "__main__":
try:
asyncio.run(main())
except Exception as e:
print(f"💥 Error fatal: {e}")