Files
cam_control_android/SETUP_GUIDE.md
2025-12-03 19:39:42 +09:00

382 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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