2013-09-28 15 views
6

Scala ve Google Play kullanarak bir web radyo altyapısı yazıyorum. Gerçek akış için Iteratees'e güveniyorum, ancak açgözlü bir istemcinin veriyi çok hızlı indirmesini ve tüm istemciler için akışı tüketmesini önlemeye çalışan bir sorunla karşılaşıyorum. Bunu yapmak için, Enumerator'un veri üretmesini ne kadar çabuk hızlandıracak bir Enumeratee yaratmaya çalışıyorum. İşte fikri bir throttlingIteratee oluşturmak ve eşleştirmek için zamanlayıcı görevi kullanmasıdır Yürütme Iteratee boğazı

val throttlingIteratee = Iteratee.foldM[Array[Byte], Array[Byte]](new Array[Byte](0)) { 
(result, chunk) => 
    val prom = Promise[Array[Byte]]() 
    timer.schedule(new TimerTask{ 
    def run() = prom.success(result ++ chunk) 
    },1000) 
    prom.future  
} 

private val chunker = Enumeratee.grouped( 
    Traversable.take[Array[Byte]](31792) &>> throttlingIteratee 
) 

gibi benim Enumeratee nasıl göründüğü ve Enumeratee.grouped fonksiyonu ile o. Bu oldukça iyi çalışıyor gibi görünüyor, ama yığın boyutu için hangi değeri kullanacağını bulmakta sorun yaşıyorum. Bu, çalma sesleri ile aynı hızda parça üretmek istiyorum. Ses dosyam 82kpbs olarak kodlanmış ve ben bunu bayt cinsinden hesaplamaya çalıştım, fakat geldiğim değerler çok küçük gibi görünüyor ve sesler veri akışından daha hızlı çalışıyor.

Soruma iki kat. Sahip olduğum temel yaklaşım iyi mi? Ve eğer öyleyse, ses dosyasının bit hızı açısından yığın boyutunu ayarlama hakkında nasıl giderim.

cevap

0

birkaç nokta: saniyede 125 = İkinci bayt başına

  • 1 kbps = 1000 bit. Yani senin durumunda saniyede 10.250 bayt.
  • Kodunuzla ilgili herhangi bir sorun görmüyorum. Netlik için başarısızlıkların üstesinden gelmek için kodu çıkardığınızı varsayalım.
  • Kullanım durumunuzu bilmiyorum, ancak bu tür bir kısıtlamanın ayarlanmasının kodunuz yerine bir proxy veya web sunucusunda daha kolay bir şekilde yapılabileceğini varsayalım.
+0

Teşekkürler, bir süredir bunlara dokunmadım, ama eski kodumu kazmaya çalışacağım ve bu hafta sonu numaralarınızı test edeceğim, böylece bu cevabı kabul edebilirim – AndrewSwerlick