6
我正在寫一個使用Scala和Play的流式Web收音機框架。我依賴於Iteratees進行實際流式傳輸,但是我遇到了一個問題,試圖防止貪婪的客戶端太快地下載數據,併爲所有客戶端使用流。要做到這一點,我一直在試圖創建一個Enumeratee來節制Enumerator產生數據的速度。這裏是我的Enumeratee是什麼樣子玩Iteratee節流
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
)
的想法是,我使用定時器任務創建一個throttlingIteratee和一對與Enumeratee.grouped功能。這似乎工作得很好,但我很難找出用於塊大小的值。我想要以與音頻播放速度相同的速度播放這些大塊音樂。我的音頻文件編碼爲82kpbs,我試圖用字節計算,但是我提出的值似乎太小了,音頻播放速度比數據流式傳輸速度快。
我的問題是兩倍。我有一個好的基本方法嗎?如果是這樣,我怎麼去設置音頻文件比特率的塊大小。
謝謝,我一段時間沒有碰到這個,但是我會嘗試挖掘我的舊代碼並在本週末測試你的數字,這樣我就可以接受這個答案 – AndrewSwerlick