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