从Flash流式传输大量数据

时间:2010-11-02 08:27:05

标签: flash actionscript-3 audio data-storage

我目前正在开发一个项目,我会生成大量音频数据存储在用户计算机上。

它适用于少量数据,但随着内存使用量的增加,Flash应用程序开始挣扎并最终死亡。

我一直在考虑可能的方法来克服这个问题而我正在考虑而不是将所有数据存储在内存中(有时高达100mb)可能的解决方案可能是将数据流式传输到服务器(每个浮点数44100)然后,一旦数据累积结束,将其发送回客户端,就会生成它。

1)你能看出这个想法有什么问题,如果可以,你能提供更好的选择吗?

2)你能否推荐一个好的服务器技术来实现这个目标?

修改1

添加更多细节。

我使用sound.extract方法在客户端上生成音频。当音频被发送到扬声器时,我也将其发送到字节数组。

一旦用户点击停止按钮,我就会在字节数组中为音频数据添加一个wav标题,并允许用户下载他们刚刚收听的音频的wav。

理想情况下,我不想限制用户可以节省多少数据。这可能是不可能的。

将所有此类音频数据存储在内存中会导致闪存出现严重的性能问题。我不知道有任何方法可以在客户端计算机上逐步存储这些数据,因此我认为解决方案可能是将数据逐步传输到某个服务器,以减少内存负载。

2 个答案:

答案 0 :(得分:0)

我发现了一个想要实现这一目标的线程。 提出了许多解决方案。

http://drupal.org/node/69242

编辑:好的,不完全是那样,但相似。也许你可以从其他人那里收集一些经验并提出合适的解决方案。

答案 1 :(得分:0)

我只是尝试加载和解压缩mp3文件:

  

持续时间:09:18
  mp3字节:22345728
  提取字节:178765824

从22mb产生的178mb非常可怕。

我认为可以避免这种严重的内存使用,但我需要更多信息:
如果你正在使用Sound.extract(),你可能有一个mp3源,对吗? 你能描述你的应用程序中的数据流(加载,卸载,转换,保存)吗? 还有一个愚蠢的问题:如何保存.wav并且可以保存.mp3?

UPD:此时我认为解决方案是为加载的声音创建一个快速包装器来检索(和创建)样本(存储为两个数字 - 开始和停止时间)。 imho它是可能的(我喜欢编码媒体包装,希望我会找到一些时间进行研究)如果这个课程能提供可接受的速度 - 所有的混合都将在没有一个extract()的情况下进行,并且最终的时间表是样本开始播放(生成必须保存的声音)byteArray可以通过SoundMixer.computeSpectrum()轻松提取并传递给SampleDataEvent或直接传递给用户本地文件系统。它将是唯一的ByteArray:)