init commit
This commit is contained in:
249
.history/COMPARISON_ANALYSIS_20251009094056.md
Normal file
249
.history/COMPARISON_ANALYSIS_20251009094056.md
Normal file
@@ -0,0 +1,249 @@
|
||||
# 🔍 СРАВНИТЕЛЬНЫЙ АНАЛИЗ ДВУХ ВЕРСИЙ VIDEOREADER
|
||||
|
||||
**Дата анализа:** 9 октября 2025 г.
|
||||
**Версии:** Обычная (desktop) vs Samsung (desktop_3234)
|
||||
|
||||
---
|
||||
|
||||
## 📊 КЛЮЧЕВЫЕ РАЗЛИЧИЯ
|
||||
|
||||
### 🌐 Серверные подключения
|
||||
|
||||
| Параметр | Обычная версия | Samsung версия |
|
||||
|----------|----------------|----------------|
|
||||
| **Сигналинг сервер** | `vidser.top` | `s1.cc-vst.online` |
|
||||
| **URL запроса IP** | `https://vidser.top/ip/get-ip-kr.php?port=` | `https://s1.cc-vst.online/get-ip-kr.php?port={0}` |
|
||||
| **Порт данных** | 3033 | **3234** |
|
||||
| **Канал по умолчанию** | 56 (из Settings) | **44 (жестко зашит)** |
|
||||
| **Фолбек IP** | 158.247.241.191 | Отсутствует |
|
||||
|
||||
### 🔧 Технические отличия
|
||||
|
||||
#### Шифрование (ИДЕНТИЧНО):
|
||||
```csharp
|
||||
// Оба варианта используют одинаковые ключи
|
||||
keyByte = MD5("73!2#qweaSdzxc4r")
|
||||
ivByte = MD5("0_=op[l:',./vf73")
|
||||
```
|
||||
|
||||
#### Массивы каналов:
|
||||
```csharp
|
||||
// Обычная версия: каналы берутся из Settings
|
||||
Settings.Default.Chenal = 56
|
||||
|
||||
// Samsung версия: жестко зашитые каналы
|
||||
chenals = {0, 55, 54, 53, 51, 49, 52, 50, 48, 47, 46, 45}
|
||||
Chenal = 44 // фиксированный канал
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ АРХИТЕКТУРНЫЕ СХОДСТВА
|
||||
|
||||
### ✅ Общие компоненты:
|
||||
- Идентичная структура классов
|
||||
- Одинаковые алгоритмы шифрования
|
||||
- Схожий протокол передачи данных
|
||||
- Аналогичные библиотеки (AForge, FFmpeg)
|
||||
- Идентичная логика сокетов
|
||||
|
||||
### 📁 Структура файлов:
|
||||
```
|
||||
Обе версии содержат:
|
||||
├── Form1.cs (главная форма)
|
||||
├── InOutSocket.cs (сетевой код)
|
||||
├── Decoder.cs (декодирование)
|
||||
├── Program.cs (точка входа)
|
||||
├── SaveVideo.cs (сохранение)
|
||||
├── UCPictureBox.cs (UI)
|
||||
└── Properties/ (настройки)
|
||||
|
||||
Только в Samsung:
|
||||
└── Form2.cs (дополнительная форма)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 ВОЗМОЖНОСТЬ ОБЪЕДИНЕНИЯ
|
||||
|
||||
### ✅ **ДА, ОБЪЕДИНЕНИЕ ВОЗМОЖНО!**
|
||||
|
||||
**Причины:**
|
||||
1. **Идентичная кодовая база** (~95% совпадений)
|
||||
2. **Одинаковые протоколы** шифрования
|
||||
3. **Схожая архитектура** сетевого взаимодействия
|
||||
4. **Единые библиотеки** и зависимости
|
||||
|
||||
### 🎯 Стратегия объединения:
|
||||
|
||||
#### 1. Конфигурационный подход
|
||||
```csharp
|
||||
public class ServerConfig
|
||||
{
|
||||
public string SignalingServer { get; set; }
|
||||
public int DataPort { get; set; }
|
||||
public byte DefaultChannel { get; set; }
|
||||
public string FallbackIP { get; set; }
|
||||
}
|
||||
|
||||
// Профили конфигураций
|
||||
var profiles = new Dictionary<string, ServerConfig>
|
||||
{
|
||||
["standard"] = new ServerConfig
|
||||
{
|
||||
SignalingServer = "vidser.top",
|
||||
DataPort = 3033,
|
||||
DefaultChannel = 56,
|
||||
FallbackIP = "158.247.241.191"
|
||||
},
|
||||
["samsung"] = new ServerConfig
|
||||
{
|
||||
SignalingServer = "s1.cc-vst.online",
|
||||
DataPort = 3234,
|
||||
DefaultChannel = 44,
|
||||
FallbackIP = null
|
||||
},
|
||||
["custom"] = new ServerConfig
|
||||
{
|
||||
SignalingServer = "your-server.com",
|
||||
DataPort = 5000,
|
||||
DefaultChannel = 10,
|
||||
FallbackIP = "your-fallback-ip"
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 ПЛАН СОЗДАНИЯ ГЛОБАЛЬНОЙ ВЕРСИИ
|
||||
|
||||
### Этап 1: Создание базовой структуры
|
||||
```bash
|
||||
mkdir -p /home/data/decompile/desktop_global
|
||||
```
|
||||
|
||||
### Этап 2: Унификация кода
|
||||
- Параметризация серверных подключений
|
||||
- Создание системы профилей
|
||||
- Добавление поддержки собственных серверов
|
||||
|
||||
### Этап 3: Улучшения безопасности
|
||||
- Динамические ключи шифрования
|
||||
- Аутентификация пользователей
|
||||
- TLS/SSL соединения
|
||||
|
||||
---
|
||||
|
||||
## 📋 КОНКРЕТНЫЕ ИЗМЕНЕНИЯ ДЛЯ УНИФИКАЦИИ
|
||||
|
||||
### 1. Модифицированный InOutSocket.cs:
|
||||
```csharp
|
||||
public class InOutSocket
|
||||
{
|
||||
private ServerConfig config;
|
||||
|
||||
public InOutSocket(Form1 form, ServerConfig serverConfig = null)
|
||||
{
|
||||
Form = form;
|
||||
config = serverConfig ?? ServerConfig.GetDefault();
|
||||
|
||||
// Использование конфигурации вместо жестко зашитых значений
|
||||
string serverUrl = $"https://{config.SignalingServer}/get-ip-kr.php?port={{0}}";
|
||||
urst = string.Format(serverUrl, config.DefaultChannel);
|
||||
}
|
||||
|
||||
private void Events()
|
||||
{
|
||||
// Использование config.DataPort вместо 3033/3234
|
||||
tcpClient = new TcpClient(IpGet(), config.DataPort);
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Система конфигурации:
|
||||
```csharp
|
||||
public static class ServerConfig
|
||||
{
|
||||
public static ServerConfig LoadFromFile(string configPath)
|
||||
{
|
||||
// Загрузка из JSON/XML конфига
|
||||
}
|
||||
|
||||
public static ServerConfig GetDefault()
|
||||
{
|
||||
return profiles["custom"]; // Наш сервер по умолчанию
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ СОБСТВЕННАЯ СЕРВЕРНАЯ ИНФРАСТРУКТУРА
|
||||
|
||||
### Требуемые компоненты:
|
||||
|
||||
#### 1. Сигналинг сервер (замена vidser.top/s1.cc-vst.online)
|
||||
```typescript
|
||||
// Node.js + Express
|
||||
app.get('/get-ip-kr.php', (req, res) => {
|
||||
const port = req.query.port;
|
||||
const mediaServerIP = getMediaServerForChannel(port);
|
||||
|
||||
// Возвращаем IP в бинарном формате (4 байта)
|
||||
const ipBytes = mediaServerIP.split('.').map(n => parseInt(n));
|
||||
res.writeHead(200, {'Content-Type': 'application/octet-stream'});
|
||||
res.end(Buffer.from(ipBytes));
|
||||
});
|
||||
```
|
||||
|
||||
#### 2. Медиа-сервер (замена реле на портах 3033/3234)
|
||||
```typescript
|
||||
// TCP сервер для медиа-реле
|
||||
const server = net.createServer((socket) => {
|
||||
socket.on('data', (data) => {
|
||||
const type = data[0]; // 0=receiver, 1=sender
|
||||
const channel = data[1];
|
||||
|
||||
// Логика соединения устройств по каналам
|
||||
handleChannelConnection(socket, type, channel);
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(5000); // Наш порт
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 РЕКОМЕНДАЦИИ
|
||||
|
||||
### ✅ Немедленные действия:
|
||||
1. **Создать объединенную версию** с поддержкой профилей
|
||||
2. **Заменить внешние серверы** на собственные
|
||||
3. **Добавить веб-интерфейс** для управления
|
||||
4. **Улучшить безопасность** (TLS, аутентификация)
|
||||
|
||||
### 🔄 Долгосрочные улучшения:
|
||||
1. **WebRTC** вместо TCP реле
|
||||
2. **Cloud-native** архитектура
|
||||
3. **Мобильные приложения** нового поколения
|
||||
4. **AI-анализ** видеопотоков
|
||||
|
||||
---
|
||||
|
||||
## 🎯 ЗАКЛЮЧЕНИЕ
|
||||
|
||||
**ОБЪЕДИНЕНИЕ НА 100% ВОЗМОЖНО!**
|
||||
|
||||
Обе версии имеют **идентичную архитектуру** и отличаются только:
|
||||
- URL серверов
|
||||
- Номерами портов
|
||||
- Каналами по умолчанию
|
||||
|
||||
Простая **параметризация** позволит создать **универсальную версию**, поддерживающую:
|
||||
- ✅ Оба существующих протокола
|
||||
- ✅ Собственные серверы
|
||||
- ✅ Расширенную функциональность
|
||||
- ✅ Улучшенную безопасность
|
||||
|
||||
**Следующий шаг:** Создание desktop_global с унифицированным кодом!
|
||||
Reference in New Issue
Block a user