İçeriğe geç
Tüm projeler
AraçlarAçık kaynak

PowerShell CLI Audio Streamer

Ağır GUI bileşenlerini atlayarak internet radyo endpoint'lerini doğrudan `mpv` motoru üzerinden oynatan, otonom ve son derece düşük kaynak tüketimine sahip CLI tabanlı PowerShell aracı.

Teknoloji yığını

Çatılar & kütüphaneler
Araçlar

Performans & metrikler

  • Bellek ayak izini (memory footprint), standart web çalarların (~300MB) tüketiminden, yalnızca mpv daemon'unun ve uyku halindeki bir PS oturumunun ihtiyaç duyduğu minimum seviyeye indirger
  • Windows DWM (Desktop Window Manager) katmanını tamamen atlayıp headless donanımsal ses kod çözmeye (hardware decoding) zorlayarak grafik işleme maliyetlerini (overhead) sıfırlar

Neden geliştirdim?

Tarayıcılar ve Electron tabanlı müzik çalarlar, basit bir ses akışı için dahi devasa RAM ve CPU tüketirler. Bu aracı, arayüz şişkinliğini (GUI bloat) tamamen aradan çıkarıp, ses akışlarını doğrudan yüksek düzeyde optimize edilmiş mpv daemon'una yönlendirmek (pipe) amacıyla yazdım. Geliştirme ortamlarında arka planda çalışırken sistem ayak izini (footprint) neredeyse sıfıra indirir.

Mimari & kararlar

PowerShell host'u üzerinde çalışan senkron bir REPL döngüsü olarak yapılandırılmıştır. İstasyon metadataları ve ağ endpoint'leri bellek içi (in-memory) bir hashtable dizisinde tutulur. Akış yönlendirmesi, video render kancaları (hooks) açıkça devre dışı bırakılarak (--no-video), & çağrı operatörü (call operator) üzerinden mpv motoruna delege edilir. Kullanıcının SIGINT (Ctrl+C) sinyali ile alt süreci (subprocess) kesmesi durumu, PipelineStoppedException yakalanarak güvenli bir şekilde (graceful teardown) sonlandırılır.

Temel özellikler

  1. 01Alt süreç (subprocess) delegasyonu ile mpv motoru üzerinden tamamen headless (arayüzsüz) ses akışı
  2. 02Menü indeksi seçimlerinde bellek erişim ihlallerini önlemek için [int]::TryParse kullanılarak uygulanan katı tip doğrulaması (strict type validation)
  3. 03Alt sürecin zombi process bırakmadan temiz bir şekilde sonlandırılmasını sağlayan kararlı SIGINT interrupt yönetimi