382 lines
12 KiB
Markdown
382 lines
12 KiB
Markdown
# 🎬 Полное руководство: Сервер + Мобильное приложение
|
||
|
||
## 🖥️ Часть 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)
|
||
|
||
|