init
This commit is contained in:
381
SETUP_GUIDE.md
Normal file
381
SETUP_GUIDE.md
Normal 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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user