Bunu Neden İnşa Ettim?
"Devasa yerel medya dosyalarını bir Smart TV'ye aktarmak, düşük gecikmeli ve sıfır ek yüke sahip bir arka uç (backend) gerektirir. Plex veya Jellyfin gibi hazır medya sunucuları mimari olarak şişkin (bloated) ve kaynak tüketicidir. Özel bir Flutter Smart TV istemcisiyle doğrudan iletişim kurmak için bu hafif Rust arka ucunu geliştirdim. Geleneksel medya sunucularının devasa CPU/RAM ayak izi olmadan, ileri/geri sarma çubuğu (seek-bar scrubbing) için anında `ffmpeg` kare çıkarımı (frame extraction) yapar ve statik dosya sunumu sağlar."
Mimari & Kararlar
Mimari, Tokio asenkron çalışma zamanı (runtime) ve Axum web framework'ü üzerine inşa edilmiştir. Yüksek düzeyde optimize edilmiş sıfır kopya (zero-copy) statik dosya sunumu için `tower-http` kullanır. Medya dizini taraması ve FFmpeg kare çıkarma (`tokio::process::Command`) işlemleri asenkron olarak yürütülür ve ağır yükler altında I/O iş parçacıklarının (threads) kilitlenmesini engeller. Sunucu, açılışta (boot) standart küçük resimleri önbelleğe almak için özyineli (recursive) bir preloader'a ve zamansal sarma (scrubbing) için (önizleme amacıyla lokalize edilmiş kare dizileri çıkararak) isteğe bağlı (on-demand) bir jeneratöre sahiptir. Mutlak I/O performansı sağlamak için loglama işlemleri tamamen bloklamayan (non-blocking) `tracing_appender` ile yönetilir.
Temel Özellikler
- 01.Asenkron medya indeksleme ve özyineli (recursive) dizin taraması
- 02.Zamansal sarma (scrubbing) önizlemeleri için anında (on-the-fly) FFmpeg alt süreç orkestrasyonu
- 03.`tower-http` katmanı üzerinden sıfır kopya (zero-copy) statik medya sunumu
- 04.Önbelleğin anında hazır olmasını sağlayan açılış zamanı (boot-time) küçük resim yükleyicisi
- 05.`tracing` ekosistemi üzerinden bloklamayan, günlük dönen (rolling) loglama mimarisi