docs: add implementation plan for project fastwatcher
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
| **Ağ İletişimi** | `shelf` (Local HTTP Server) | TV tarafında raw TCP socket yerine küçük bir REST API (HTTP Server) kurmak hata yönetimini ve loglamayı inanılmaz kolaylaştırır. |
|
||||
| **Video Oynatıcı** | `media_kit` | *Chewie/Video_player yerine kesinlikle bunu kullanmalısın.* libmpv tabanlıdır. HLS (.m3u8), MKV ve özel codec'leri Android TV'de kusursuz oynatır. |
|
||||
| **Link Yakalama** | `receive_sharing_intent` | Mobil cihazda tarayıcıdan "Paylaş" aksiyonunu dinlemek için. |
|
||||
| **Video Extraction** | `flutter_inappwebview` & `html` | Sayfa içindeki gizli `.m3u8` veya `.mp4` linklerini headless (gizli) bir tarayıcıda yakalamak için. |
|
||||
| **Lokal Depolama** | `shared_preferences` | Cihazın "TV" mi yoksa "Mobil" mi olduğunu ilk seçimden sonra hatırlamak için. |
|
||||
|
||||
---
|
||||
@@ -61,6 +62,15 @@ Raw Socket'ler veriyi bölebilir veya bağlantı kopmalarında sorun yaratabilir
|
||||
```
|
||||
* **TV'nin Yanıtı:** `200 OK` (Başarıyla aldım, oynatmaya başlıyorum).
|
||||
|
||||
#### D. Video Linki Ayrıştırma (Video Extraction)
|
||||
Tarayıcıdan paylaşılan link bir web sayfası olduğunda, içindeki asıl videoyu bulmak için şu hiyerarşi uygulanır:
|
||||
|
||||
1. **Headless WebView (En Garanti Yöntem):** Kullanıcı linki paylaştığında, arka planda gizli bir `InAppWebView` açılır. `onLoadResource` veya `shouldInterceptRequest` metodları ile ağ trafiği dinlenir. `.m3u8` veya `.mp4` uzantılı bir istek yakalandığı an sayfa kapatılır ve link TV'ye gönderilir.
|
||||
2. **Open Graph & Meta Tags:** Sayfa HTML'i `html` paketi ile indirilir. `<meta property="og:video" content="...">` veya `<video src="...">` etiketleri taranır.
|
||||
3. **Site Özelinde Çözücüler (Scrapers):** YouTube için `youtube_explode_dart`, Twitter/X için özel Regex paternleri gibi "Provider" tabanlı sınıflar kullanılır.
|
||||
|
||||
* **SOLID Notu:** Bu işlemi bir `LinkParser` interface'inden türetilen `HeadlessParser`, `RegexParser` ve `MetaParser` gibi sınıflara bölmeliyiz.
|
||||
|
||||
---
|
||||
|
||||
### 4. SOLID Prensiplerinin Projeye Uygulanması
|
||||
@@ -87,10 +97,13 @@ Bu projeyi "Solid" yapacak mimari kararlar şunlardır:
|
||||
1. Mobil cihazdan HTTP POST ile TV'ye manuel bir test linki (.m3u8) gönder.
|
||||
2. TV tarafında `media_kit` paketini kur ve gelen linki tam ekranda (kumanda odaklamalarına dikkat ederek) oynatan sayfayı tasarla.
|
||||
|
||||
**Faz 3: Entegrasyon (Link Yakalama)**
|
||||
1. Mobil tarafa `receive_sharing_intent` paketini kur.
|
||||
2. Android Manifest ayarlarını yapıp, tarayıcıdan uygulamana link düşmesini sağla.
|
||||
3. Gelen linki ayrıştır (Parse) ve eşleşmiş olan TV'ye fırlat.
|
||||
**Faz 3: Entegrasyon ve Link Extraction**
|
||||
1. Mobil tarafa `receive_sharing_intent` paketini kur ve Android Manifest ayarlarını yap.
|
||||
2. `LinkExtractionService` oluştur:
|
||||
* Gelen URL eğer doğrudan video ise (`.mp4`, `.m3u8`, `.mkv`) direkt TV'ye gönder.
|
||||
* Eğer bir web sayfası ise, `InAppWebView` (headless) ile sayfayı yükleyip ağ trafiğini dinleyerek gerçek video linkini "crawle" et.
|
||||
3. Yakalanan linki ve sayfa başlığını (Title) eşleşmiş olan TV'ye fırlat.
|
||||
4. Hatalı/Desteklenmeyen linkler için kullanıcıya "Video bulunamadı" uyarısı göster.
|
||||
|
||||
Bu mimariyle yazdığın bir kod hem çok hızlı çalışacak hem de aylar sonra dönüp baktığında nerede ne olduğunu saniyeler içinde bulabileceksin.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user