feat: initialize new Flutter project with core feature structure and cross-platform configuration
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# 🚀 FastWatcher
|
||||
|
||||
FastWatcher, mobil cihazlardaki video içeriklerini akıllı televizyonlara (Android TV vb.) en hızlı ve stabil şekilde aktarmak için tasarlanmış, modern ve SOLID prensiplerine dayalı bir Flutter uygulamasıdır.
|
||||
|
||||
## 🧠 Çalışma Mantığı ve Mimari
|
||||
|
||||
Uygulamanın kalbinde, mobil cihazın bir **"Kumanda/Gönderici"** (Sender) ve televizyonun bir **"Alıcı"** (Receiver) olarak çalıştığı bir ekosistem yatar.
|
||||
|
||||
### 1. Cihaz Keşfi (mDNS / Zero-config)
|
||||
FastWatcher, cihazların birbirini bulması için karmaşık IP girişleri gerektirmez. **mDNS (Multicast DNS)** protokolünü kullanır:
|
||||
- **TV (Receiver):** Uygulama açıldığında arka planda `_http._tcp` tipinde bir servis yayınlamaya başlar.
|
||||
- **Mobil (Sender):** "Eşleş" butonuna basıldığında ağı tarar ve FastWatcher servisi yayınlayan TV'leri anında listeler.
|
||||
|
||||
### 2. İletişim Protokolü (Local HTTP Server)
|
||||
Cihazlar arası veri aktarımı raw socket yerine daha güvenli ve yönetilebilir olan **HTTP** üzerinden gerçekleşir:
|
||||
- TV tarafında küçük bir **Shelf HTTP Server** çalışır.
|
||||
- Mobil cihaz, TV'ye bir `POST /play` isteği gönderir.
|
||||
- **Payload Yapısı:**
|
||||
```json
|
||||
{
|
||||
"url": "https://video-kaynagi.com/stream.m3u8",
|
||||
"title": "Video Başlığı",
|
||||
"timestamp": 1714415045
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Video Linki Ayrıştırma (Headless Extraction)
|
||||
Modern web siteleri video linklerini doğrudan paylaşmaz. FastWatcher bu sorunu **Headless WebView** ile çözer:
|
||||
- Kullanıcı bir web sayfasını paylaştığında, uygulama arka planda gizli bir tarayıcı açar.
|
||||
- Sayfa yüklenirken ağ trafiği dinlenir (`onLoadResource`).
|
||||
- `.m3u8`, `.mp4` veya `.mkv` gibi video stream linkleri yakalandığı an sayfa kapatılır ve link TV'ye fırlatılır.
|
||||
|
||||
### 4. Video Oynatma (MediaKit Engine)
|
||||
TV tarafında en geniş codec desteği için standart oynatıcılar yerine **MediaKit (libmpv tabanlı)** kullanılır:
|
||||
- **Yüksek Performans:** 4K videolar ve HLS streamleri donmadan oynatılır.
|
||||
- **Esneklik:** MKV, MP4, TS ve özel şifreli stream formatlarını destekler.
|
||||
|
||||
## 🏗 Mimari Yapı (Clean Architecture)
|
||||
|
||||
Proje, **Feature-First Clean Architecture** yapısını takip eder:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
UI[Presentation / UI] --> Riverpod[State Management / Riverpod]
|
||||
Riverpod --> Repo[Data / Repository]
|
||||
Repo --> Service[External Services / nsd, shelf, media_kit]
|
||||
```
|
||||
|
||||
- **lib/core:** Tema, sabitler ve ortak kullanılan yardımcı sınıflar.
|
||||
- **lib/features/setup:** Cihaz rolü (TV/Telefon) seçimi ve ayarların kalıcılığı.
|
||||
- **lib/features/discovery:** mDNS ağ tarama ve servis kayıt işlemleri.
|
||||
- **lib/features/sender:** Link yakalama, headless parsing ve HTTP POST gönderim mantığı.
|
||||
- **lib/features/receiver:** HTTP Server yönetimi ve video oynatıcı entegrasyonu.
|
||||
|
||||
## 🛠 Kullanılan Teknolojiler
|
||||
|
||||
| Teknoloji | Amaç |
|
||||
| :--- | :--- |
|
||||
| **Flutter Riverpod** | Reactive State Management ve Dependency Injection. |
|
||||
| **NSD** | Ağ üzerindeki cihazları otomatik keşfetme (mDNS). |
|
||||
| **Shelf** | TV tarafında REST API sunucusu kurma. |
|
||||
| **MediaKit** | Profesyonel seviyede video oynatma motoru. |
|
||||
| **InAppWebView** | Sayfa içindeki gizli video linklerini yakalama. |
|
||||
|
||||
---
|
||||
> [!IMPORTANT]
|
||||
> Bu uygulama, televizyon ve mobil cihazın **aynı Wi-Fi ağında** olmasını gerektirir.
|
||||
|
||||
Reference in New Issue
Block a user