And*_*ick 6 scala iterate playframework-2.0
我正在使用scala和Play编写流式网络广播框架.我依靠Iteratees进行实际的流式传输,但是我遇到了一个问题,试图阻止贪婪的客户端过快下载数据,并为所有客户端使用流.为此,我一直在尝试创建一个Enumeratee,它将限制Enumerator生成数据的速度.这是我的Enumeratee的样子
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
)
Run Code Online (Sandbox Code Playgroud)
我的想法是,我使用计时器任务来创建一个限制程序,并将其与Enumeratee.grouped函数配对.这似乎工作得相当好,但我无法弄清楚用于块大小的值.我希望这个产生的块与音频播放的速率大致相同.我的音频文件编码为82kpbs,我试图用字节计算,但我提出的值似乎太小,音频播放速度比数据流速快.
我的问题是双重的.我的基本方法是不是很好?如果是,如何根据音频文件的比特率设置块大小.
一些东西:
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |