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. |
|
| **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. |
|
| **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. |
|
| **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. |
|
| **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).
|
* **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ı
|
### 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.
|
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.
|
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)**
|
**Faz 3: Entegrasyon ve Link Extraction**
|
||||||
1. Mobil tarafa `receive_sharing_intent` paketini kur.
|
1. Mobil tarafa `receive_sharing_intent` paketini kur ve Android Manifest ayarlarını yap.
|
||||||
2. Android Manifest ayarlarını yapıp, tarayıcıdan uygulamana link düşmesini sağla.
|
2. `LinkExtractionService` oluştur:
|
||||||
3. Gelen linki ayrıştır (Parse) ve eşleşmiş olan TV'ye fırlat.
|
* 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.
|
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