# 🚀 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.