This commit is contained in:
2025-12-09 20:35:39 +09:00
parent 792db74014
commit a6b3c54534
2 changed files with 75 additions and 12 deletions

View File

@@ -1138,7 +1138,11 @@ async def client_websocket_endpoint(websocket: WebSocket, room_id: str, password
@app.websocket("/ws/admin/{session_id}")
async def admin_websocket_endpoint(websocket: WebSocket, session_id: str):
"""WebSocket для администраторов (просмотр и управление)"""
global admin_sessions
if not AdminAuth.verify_session(session_id):
print(f"[WebSocket] Admin connection REJECTED: session_id={session_id} not found in admin_sessions")
print(f"[WebSocket] Available sessions: {list(admin_sessions.keys()) if admin_sessions else 'None'}")
await websocket.close(code=1008)
return

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
Скрипт для отправки тестового JPEG-кадра на сервер.
Помогает проверить, работает ли VideoProcessor без мобильного приложения.
Автоматически создает комнату и отправляет видеокадры через WebSocket.
"""
import asyncio
@@ -10,18 +10,77 @@ import json
import sys
import cv2
import numpy as np
import requests
from pathlib import Path
from dotenv import load_dotenv
import os
# Загружаем переменные окружения из .env
load_dotenv()
# Параметры подключения
HOST = "192.168.0.112" # Измените на ваш PUBLIC_HOST из .env
PORT = 8000
ROOM_ID = "AtR2yGhr8QM" # Измените на ID комнаты
PASSWORD = "1" # Измените на пароль комнаты
FRAME_FILE = "test_frame.jpg" # Путь к тестовому JPEG-файлу
HOST = os.getenv("PUBLIC_HOST", "192.168.0.112")
PORT = int(os.getenv("PORT", 8000))
FRAME_FILE = "test_frame.jpg"
FRAMES_TO_SEND = 300 # 10 сек при 30 FPS
# Учетные данные админа (из server.py)
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "admin123"
async def send_frames():
"""Подключиться к WebSocket и отправить кадры"""
uri = f"ws://{HOST}:{PORT}/ws/client/{ROOM_ID}/{PASSWORD}"
# 0. Логинимся как админ чтобы получить сессию
print(f"[Test] Logging in as admin...")
session = requests.Session()
try:
login_response = session.post(
f"http://{HOST}:{PORT}/login",
data={
"username": ADMIN_USERNAME,
"password": ADMIN_PASSWORD
}
)
if login_response.status_code != 200:
print(f"[Test] ❌ Failed to login: {login_response.status_code}")
print(f"[Test] Response: {login_response.text}")
return
print(f"[Test] ✓ Admin logged in")
except Exception as e:
print(f"[Test] ❌ Error during login: {e}")
return
# 1. Создаём новую комнату на сервере
print(f"[Test] Creating room on {HOST}:{PORT}...")
try:
response = session.post(
f"http://{HOST}:{PORT}/api/create-room",
data={
"name": "Test Room",
"password": "testpass",
"max_connections": "10"
}
)
if response.status_code != 200:
print(f"[Test] ❌ Failed to create room: {response.status_code}")
print(f"[Test] Response: {response.text}")
return
room_data = response.json()
if not room_data.get("success"):
print(f"[Test] ❌ Room creation failed: {room_data.get('error')}")
return
room_id = room_data.get("room", {}).get("id")
password = room_data.get("room", {}).get("password", "testpass")
print(f"[Test] ✓ Room created: {room_id}")
except Exception as e:
print(f"[Test] ❌ Error creating room: {e}")
return
# 2. Подключаемся к WebSocket с этой комнатой
uri = f"ws://{HOST}:{PORT}/ws/client/{room_id}/{password}"
print(f"[Test] Connecting to: {uri}")
try:
@@ -43,15 +102,15 @@ async def send_frames():
print(f"[Test] Frame size: {len(frame_data)} bytes")
# Отправляем кадры в цикле (30 FPS, 10 секунд)
print(f"[Test] Sending frames (30 FPS for 10 seconds)...")
for i in range(300): # 10 sec * 30 FPS
# Отправляем кадры в цикле (30 FPS, ~10 секунд)
print(f"[Test] Sending frames (30 FPS for ~{FRAMES_TO_SEND // 30} seconds)...")
for i in range(FRAMES_TO_SEND): # ~10 sec * 30 FPS
await ws.send(frame_data)
if (i + 1) % 30 == 0:
print(f"[Test] ✓ Sent {i + 1} frames")
await asyncio.sleep(1 / 30) # ~30 FPS
print(f"[Test] ✓ Done! Sent 300 frames")
print(f"[Test] ✓ Done! Sent {FRAMES_TO_SEND} frames")
await asyncio.sleep(2) # Пауза перед отключением
except asyncio.TimeoutError:
@@ -88,7 +147,7 @@ if __name__ == "__main__":
print("=" * 60)
print("WebSocket Frame Sender Test")
print("=" * 60)
print(f"Target: ws://{HOST}:{PORT}/ws/client/{ROOM_ID}/{PASSWORD}")
print(f"Server: http://{HOST}:{PORT}")
print()
try: