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.
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