This commit is contained in:
2025-12-03 19:39:42 +09:00
commit 2bc018a4f7
68 changed files with 5663 additions and 0 deletions

381
SETUP_GUIDE.md Normal file
View File

@@ -0,0 +1,381 @@
# 🎬 Полное руководство: Сервер + Мобильное приложение
## 🖥️ Часть 1: Запуск сервера KazicCAM
### Требования
- Python 3.8+
- pip (менеджер пакетов Python)
- Операционная система: Windows, Linux, macOS
### Установка зависимостей
1. **Создайте виртуальное окружение** (опционально, но рекомендуется):
```bash
python -m venv venv
# На Windows:
venv\Scripts\activate
# На Linux/macOS:
source venv/bin/activate
```
2. **Установите зависимости**:
```bash
pip install fastapi uvicorn opencv-python numpy websockets python-dotenv psutil
```
### Конфигурация сервера
1. **Создайте файл `.env`** в корне проекта сервера:
```env
host=0.0.0.0
port=8000
```
- `host=0.0.0.0` - сервер доступен со всех интерфейсов
- Для локального доступа: `host=127.0.0.1`
2. **Убедитесь, что стоит firewall правила** (Windows):
```bash
# Разрешить порт 8000
netsh advfirewall firewall add rule name="FastAPI Port 8000" dir=in action=allow protocol=tcp localport=8000
```
### Запуск сервера
```bash
python server.py
```
Вы должны увидеть:
```
============================================================
🎥 Video Streaming Server with Web Interface
============================================================
🌐 Web Interface: http://192.168.1.100:8000
🔌 WebSocket: ws://192.168.1.100:8000
👤 Admin Login: http://192.168.1.100:8000/
============================================================
Default Admin Accounts:
• admin / admin123
• administrator / securepass
• supervisor / superpass
============================================================
Press Ctrl+C to stop the server
```
## 🌐 Часть 2: Веб-интерфейс сервера
### Вход в систему
1. Откройте браузер
2. Перейдите на `http://<ваш-ip>:8000`
3. Авторизуйтесь с одним из дефолтных аккаунтов:
- Username: `admin`
- Password: `admin123`
### Создание комнаты для трансляции
1. Нажмите кнопку **"Create Room"** (Создать комнату)
2. Заполните форму:
- **Room Name**: Название комнаты (например, "Моя камера")
- **Room Password**: Пароль (запомните его!)
- **Max Connections**: Максимум клиентов (например, 5)
3. Нажмите **"Create Room"**
После создания вы получите:
- **Room ID**: `abc12def45gh` (уникальный идентификатор)
- **WebSocket URL**: `ws://192.168.1.100:8000/ws/client/abc12def45gh/password`
## 📱 Часть 3: Мобильное приложение
### Требования
- Android 7.0 (API 24) и выше
- Минимум 100 MB свободной памяти
- Камера на устройстве
### Сборка и установка
#### Вариант 1: Через Android Studio (рекомендуется)
```bash
1. Откройте проект в Android Studio
2. Подождите синхронизации Gradle
3. Подключите устройство или запустите эмулятор
4. Нажмите Run (Shift+F10)
```
#### Вариант 2: Командная строка
```bash
# Сборка
./gradlew assembleDebug
# Установка
./gradlew installDebug
# Запуск
adb shell am start -n com.example.camcontrol/.MainActivity
```
### Подключение к серверу
1. **Запустите приложение** на устройстве
2. **Введите параметры подключения**:
- **IP адрес сервера**: IP вашего компьютера с сервером
- Для локальной сети: `192.168.1.100` (узнайте через `ipconfig` на Windows или `ifconfig` на Linux)
- **Порт сервера**: `8000`
- **ID комнаты**: Скопируйте Room ID из веб-интерфейса
- **Пароль комнаты**: Введите пароль комнаты
3. **Нажмите "Подключиться"**
### Проверка подключения
1. В веб-интерфейсе сервера откройте комнату
2. Вы должны увидеть подключенного клиента
3. Нажмите на клиента для просмотра потока
## 🔄 Полный рабочий процесс
### Сценарий: Трансляция видео с телефона на компьютер
#### Шаг 1: Подготовка (на компьютере)
```bash
# 1. Запустить сервер
python server.py
# Примечание: сервер будет работать до нажатия Ctrl+C
```
#### Шаг 2: Создание комнаты (веб-интерфейс)
```
1. Открыть http://192.168.1.100:8000
2. Авторизоваться (admin/admin123)
3. Нажать "Create Room"
4. Заполнить форму:
- Name: "Спальня"
- Password: "pass123"
- Max Connections: 5
5. Запомнить Room ID: например "aBcDeFgHiJkL"
```
#### Шаг 3: Подключение приложения (на телефоне)
```
1. Запустить приложение CamControl
2. Заполнить форму подключения:
- Server IP: 192.168.1.100 (IP компьютера)
- Port: 8000
- Room ID: aBcDeFgHiJkL
- Password: pass123
3. Нажать "Подключиться"
```
#### Шаг 4: Просмотр потока (веб-интерфейс)
```
1. В веб-интерфейсе нажать на комнату
2. Нажать "View" напротив подключенного клиента
3. Видеть трансляцию с телефона
```
## 🎮 Управление видео
### Команды из приложения
В приложении доступны кнопки:
- **Rotate 90°** - повернуть видео
- **Flip H** - отразить горизонтально
- **Grayscale** - чёрно-белое видео
- **Reset** - сброс эффектов
### Просмотр статистики
- **Статус**: показывает состояние соединения
- **FPS**: кадры в секунду
- **Объем данных**: сколько данных передано
## 🚨 Решение проблем
### Проблема: "Connection refused" или "Connection timeout"
**Для Windows:**
```bash
# Проверить, запущен ли сервер
netstat -an | findstr :8000
# Если не запущен - запустить
python server.py
```
**Для Linux/macOS:**
```bash
# Проверить порт
lsof -i :8000
# Если нужно освободить порт
kill -9 <PID>
```
### Проблема: Сервер не доступен из других устройств
1. **Проверьте IP адрес сервера**:
```bash
# Windows
ipconfig
# Linux/macOS
ifconfig
```
Используйте IPv4 адрес (например, 192.168.1.100)
2. **Проверьте firewall**:
```bash
# Windows - открыть порт
netsh advfirewall firewall add rule name="FastAPI" dir=in action=allow protocol=tcp localport=8000
# Linux
sudo ufw allow 8000/tcp
```
3. **Убедитесь что устройства в одной сети**:
Пингуйте сервер с телефона (используйте приложение Network Analyzer или Terminal для пинга).
### Проблема: Приложение крашится при запуске
1. **Проверьте разрешения**:
```bash
# Очистить кэш приложения
adb shell pm clear com.example.camcontrol
# Переустановить
./gradlew installDebug
```
2. **Проверьте Android версию**:
Приложение требует Android 7.0 (API 24) и выше.
### Проблема: Камера не работает
1. **Проверьте разрешения приложения**:
```bash
adb shell pm grant com.example.camcontrol android.permission.CAMERA
```
2. **Убедитесь, что другие приложения не используют камеру**:
Закройте Google Meet, WhatsApp и другие приложения, используюющие камеру.
## 📊 Мониторинг сервера
### Просмотр статистики
В веб-интерфейсе доступна информация:
- **Total Rooms**: количество созданных комнат
- **Connected Clients**: активные клиенты
- **CPU Usage**: загрузка процессора
- **Memory Usage**: использование памяти
- **Server Uptime**: время работы сервера
### Логи сервера
Все события логируются в консоль:
```
[RoomManager] Created room: abc123 - Спальня
[ClientManager] Added client: uuid to room: abc123
[WebSocket] Client connected: uuid to room abc123
[VideoProcessor] Processed 150 frames
```
## 🔒 Безопасность
### Рекомендации
1. **Измените пароли по умолчанию**:
Отредактируйте список `ADMINS` в `server.py`:
```python
ADMINS = [
["your_username", "your_secure_password"],
]
```
2. **Используйте HTTPS/WSS** для продакшена:
Необходимо настроить SSL сертификаты и использовать `https://` и `wss://`.
3. **Ограничьте доступ** через firewall:
```bash
# Разрешить только локальные соединения
netsh advfirewall firewall set rule name="FastAPI" dir=in action=allow localip=192.168.1.0/24
```
## 📈 Масштабирование
### Увеличение производительности
1. **Увеличьте JPEG качество** в `server.py`:
```python
"jpeg_quality": 90, # 0-100, выше = больше качество
```
2. **Измените разрешение видео**:
```python
"video_width": 1280,
"video_height": 720,
```
3. **Добавьте больше потоков** обработки в `VideoProcessor`.
## 📚 Дополнительные ресурсы
- [FastAPI документация](https://fastapi.tiangolo.com/)
- [Android CameraX](https://developer.android.com/training/camerax)
- [WebSocket в Android](https://developer.android.com/training/network-security)
## 💡 Советы и трюки
### Трансляция на нескольких устройствах
1. Создайте разные комнаты для каждого телефона
2. Откройте несколько окон браузера с разными комнатами
3. Сравнивайте потоки
### Запись видео
На веб-интерфейсе можно использовать встроенный инструмент браузера для записи экрана.
### Удаленный доступ
Для доступа через интернет используйте:
- VPN (OpenVPN, WireGuard)
- Tunnel сервисы (ngrok, CloudFlare Tunnel)
- Собственный reverse proxy (nginx)