İçeriğe geç
Tüm projeler
Backend & APIAçık kaynak

Smart TV Yerel Medya Sunucusu: Rust & Axum Backend

Rust ile geliştirilmiş, yüksek performanslı ve asenkron bir medya akış (streaming) ve indeksleme sunucusu. Ham medya dosyalarını HTTP üzerinden sunarken, FFmpeg alt süreçleri (subprocess) aracılığıyla dinamik olarak video küçük resimleri (thumbnail) ve ileri/geri sarma (scrubbing) önizlemeleri üretir.

Teknoloji yığını

Diller
Çatılar & kütüphaneler

Performans & metrikler

  • Sıfır ek yüklü (zero-overhead) asenkron I/O, eşzamanlı medya akışı ve FFmpeg yürütmesi sırasında thread açlığını (starvation) önler
  • JVM veya Node.js tabanlı medya sunucularına kıyasla headless ve minimum kaynak tüketen bellek ayak izi
  • Verimli lokalize kare çıkarımı, video sarması sırasında yalnızca çevreleyen kareleri üreterek CPU darboğazını (thrashing) en aza indirir

Neden geliştirdim?

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

  1. 01Asenkron medya indeksleme ve özyineli (recursive) dizin taraması
  2. 02Zamansal sarma (scrubbing) önizlemeleri için anında (on-the-fly) FFmpeg alt süreç orkestrasyonu
  3. 03tower-http katmanı üzerinden sıfır kopya (zero-copy) statik medya sunumu
  4. 04Önbelleğin anında hazır olmasını sağlayan açılış zamanı (boot-time) küçük resim yükleyicisi
  5. 05tracing ekosistemi üzerinden bloklamayan, günlük dönen (rolling) loglama mimarisi

Teknik değerlendirme

Bu arka uç, yerel medya sunumunda agresif bir optimizasyon sergilemektedir. Statik dosya teslimatını son derece optimize edilmiş tower-http katmanına devrederek ve maliyetli ffmpeg çıkarma işlemlerini kesinlikle bloklamayan Tokio görevleri üzerinden yürüterek; sunucu mutlak bellek güvenliğini korur ve Flutter arayüzünü doğrudan beslerken düşük güçlü NAS donanımlarında veya tek kartlı bilgisayarlarda kusursuz bir şekilde çalışır.