Flash - передача аудиоданных ByteArray в javascript - PullRequest
1 голос
/ 08 сентября 2011

Я могу записывать звук с помощью приложения Flash, встроенного в мой веб-сайт, этот звук сохраняется в ByteArray, который мне нужно передать в Javascript для отправки на мой сервер вместе с другими необходимыми данными.

Я знаю, что могу использовать класс AS3 ExternalInterface для взаимодействия с Flash из Javascript, но какой будет подходящий формат или тип переменной в javascript для хранения ByteArray, и как я могу гарантировать, что я не потеряю много аудиоданных, когда делать это?

Ответы [ 2 ]

3 голосов
/ 16 мая 2013

Этот код работал для меня (rec by ByteArray):

    rec.position = 0;
    rec.compress();
    var b64:Base64Encoder = new Base64Encoder();
    b64.encodeBytes(rec);
    ExternalInterface.call('soundRecorded', b64.toString());

Он успешно обрабатывает около 6 мегабайт данных (я не пробовал больше).

1 голос
/ 08 сентября 2011

Может быть, это невозможно для вас по какой-то причине, о которой я не знаю, но если это не так, я бы опубликовал данные непосредственно из Actionscript (вы можете отправить двоичные данные).

В любом случаеЕсли вам нужно передать данные в JS, самым безопасным способом будет base64-кодирование ByteArray.После этого у вас есть строка, которая не будет иметь никаких управляющих (читай: проблемных) символов.

Размер, конечно, нужно учитывать.Я не знаю, каковы ограничения ExternalInterface (я когда-либо использовал его только для передачи небольших объемов данных), но вы, скорее всего, достигнете там жесткого предела.Объекты LocalConnection имеют ограничение в 100 Кб или около того, если я правильно помню (они не связаны с API ExternalInterface - по крайней мере, не напрямую - но я упоминаю его просто как остаток от возможных ограничений).Если вы работаете с необработанным звуком, ваши данные будут довольно большими, поэтому вам придется выяснить, как сжимать их (и распаковывать их в конце JS или на сервере), а также, возможно, как их отправлятьв кусках, так как отправка всего сразу будет невозможна, если данные слишком велики.

Опять же, если возможно, я бы отправлял сообщения непосредственно из Actionscript и использовал бы по крайней мере метод сжатия ByteArray перед отправкой данных.

...