🚀 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._tcptipinde 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 /playisteği gönderir. - Payload Yapısı:
{ "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,.mp4veya.mkvgibi 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:
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.