Bunu Neden İnşa Ettim?
"Standart Android medya oynatıcıları genellikle zayıf D-Pad desteğine, şişkin bir arayüze sahiptir ve ağır arka uç indeksleyicilerine (Plex, Jellyfin vb.) dayanır. Bu Flutter istemcisini, sıfır gecikmeli ve son derece duyarlı bir yerel medya akışı deneyimi sunmak için özel olarak Android TV için geliştirdim. Kendi yazdığım Rust arka ucuyla sıkı sıkıya bağlayarak ağır ara katman yazılımlarını (middleware) ortadan kaldırdım; böylece anında oynatma ve akıcı bir donanım kumandası navigasyonu sağladım."
Mimari & Kararlar
Uygulama, TV kumandaları için deterministik, ızgara tabanlı (grid-based) bir uzamsal navigasyon matrisi oluşturmak amacıyla Flutter'ın `FocusNode` API'sine yoğun bir şekilde dayanır. Yüksek frekanslı video oynatma güncellemeleri sırasında kare atlamalarını (frame drop) önlemek için durum (state) değişiklikleri, tüm widget ağacını yeniden oluşturmak yerine `ValueListenableBuilder` kullanılarak lokalize edilmiştir. Ağ istekleri standart HTTP protokolleri üzerinden asenkron olarak işlenir ve JSON yanıtları doğrudan güçlü tiplenmiş (strongly-typed) Dart modellerine eşlenir. Video hattı, donanım kesintilerini yakalayan, hassas ileri/geri sarma (scrubbing) sağlayan ve kendini otomatik gizleyen özel bir UI katmanı ile sarılmış yerel `video_player` eklentisini kullanır.
Temel Özellikler
- 01.Açık `FocusNode` donanım olay (event) kesme mekanizması kullanan uzamsal D-Pad navigasyon matrisi
- 02.Yerel TV kullanıcı deneyimi için zorunlu Kiosk modu (`SystemUiMode.immersiveSticky`) entegrasyonu
- 03.REST API üzerinden asenkron medya indeksleme ve klasör ağacı taraması
- 04.Oynatma sırasında işletim sisteminin uyku moduna geçmesini engelleyen donanım wakelock yönetimi
- 05.Otomatik gizlenme zamanlayıcıları ve göreceli (relative) sarma interpolasyonu ile optimize edilmiş oynatıcı arayüzü