Files

69 lines
3.3 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.
# 🚀 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.