потоковая передача больших объемов данных из флэш-памяти - PullRequest
0 голосов
/ 02 ноября 2010

В настоящее время я работаю над проектом, в котором я генерирую большое количество аудиоданных для хранения на компьютере пользователя.

Он отлично работает для небольших объемов данных, но по мере роста использования памяти приложение флэш начинает работать и в конечном итоге умирает.

Я думал о возможных способах решения этой проблемы, и вместо того, чтобы хранить все данные в памяти (иногда до 100 МБ), я думал, что возможное решение может заключаться в том, чтобы передавать данные на сервер (44100 чисел с плавающей запятой в во-вторых), поскольку оно генерируется, то после того, как накопление данных закончилось, отправка его обратно клиенту.

1) Вы видите какие-либо проблемы с этой идеей, и если да, то можете ли вы предложить лучшую альтернативу?

2) не могли бы вы рекомендовать хорошую серверную технологию для достижения этой цели?

Редактировать 1

Чтобы добавить больше деталей.

Я генерирую аудио на клиенте, используя метод sound.extract. Когда звук передается на динамик, я также отправляю его в байтовый массив.

Как только пользователь нажал кнопку «Стоп», я добавляю заголовок wav к аудиоданным в массиве байтов и позволяю пользователю загружать wav из звука, который он только что слушал.

В идеале я не хотел ограничивать объем данных, которые пользователь может сохранить. Это может быть невозможно.

Хранение всех этих аудиоданных в памяти вызывало серьезные проблемы с производительностью во флэш-памяти. Я не знаю ни одного способа поэтапного хранения этих данных на клиентских машинах, поэтому я подумал, что решение может заключаться в постепенной потоковой передаче данных на сервер где-нибудь, чтобы уменьшить нагрузку на память.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2010

Я только что попытался загрузить и извлечь mp3-файл:

продолжительность: 09:18
mp3 байт: 22345728
извлеченные байты: 178765824

178 МБ, сгенерированные из 22 МБ, действительно пугают.

Я думаю, что можно избежать такого серьезного использования памяти, но мне нужно больше информации:
если вы используете Sound.extract (), возможно, у вас есть источник mp3, не так ли?
Не могли бы вы описать поток данных в вашем приложении (загрузка, выгрузка, преобразование, сохранение)?
и глупый вопрос: как сохранить .wav и возможно ли сохранить .mp3?

UPD: на данный момент я думаю, что решение заключается в создании быстрой обертки для загруженного звука для извлечения (и создания) сэмплов (сохраненных в виде двух чисел - времени начала и окончания) из него. imho, это возможно (я люблю кодировать медиа-обертки, надеюсь, я найду время для исследований), и если этот класс обеспечит приемлемую скорость - все микширование будет выполнено без единого extract(), и когда начнется финальная временная шкала семплов Воспроизведение (генерирование звука, который необходимо сохранить) byteArray можно легко извлечь с помощью SoundMixer.computeSpectrum() и передать в SampleDataEvent или непосредственно в локальную файловую систему пользователя. это будет единственный ByteArray:)

0 голосов
/ 02 ноября 2010

Я нашел тему, которая хочет выполнить именно это. Предлагается ряд решений.

http://drupal.org/node/69242.

РЕДАКТИРОВАТЬ: Хорошо, не совсем так, но похоже. Может быть, вы можете почерпнуть что-то из опыта других здесь и найти подходящее решение.

...