Как захватить аудио из браузера и сохранить его на сервере? - PullRequest
0 голосов
/ 24 октября 2011

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

Мне нужнореализовать его с помощью Adobe Flash.Проблема в том, что я понятия не имею, как работает дуэт Flash + Red5.В Интернете не так много полезных ресурсов, по крайней мере для меня, так как я новичок во Flash.(Я в основном занимаюсь PHP).

1) Когда вы подключаетесь к серверу, как заставить его записывать аудио с флеш-клиента?

2) Через 30 секунд, как остановить запись и сохранить файл в определенной папке на сервере?

3) Как переместить этот файл в папку HTTP сервера,чтобы потом я мог получить к нему доступ с домашней страницы?

Обратите внимание, что я новичок во flash и Red5, поэтому мне очень нужны подробные объяснения от вас, ребята.

Большое спасибо!

Ответы [ 4 ]

1 голос
/ 26 октября 2011

Я буду стараться изо всех сил, чтобы четко ответить.

1) Когда вы подключаетесь к серверу, как заставить его записывать аудио с флэш-клиента?

Прежде всего, вам необходимо знать соединение между сервером и используемым клиентом протоколом, таким как RTMP .Поэтому на стороне сервера нам нужно настроить наш адрес как rtmp://127.0.0.1/demoServer (в red5 demoServer - имя вашего приложения).Далее, со стороны Flash, мы можем подключить сервер с помощью NetConnection :

    import flash.net.NetConnection;
    public var nc:NetConnection;
    nc = new NetConnection();
    nc.connect("rtmp://127.0.0.1/demoServer");

Я могу точно сказать, что 80% работы выполняются на стороне Flash-клиента.Для захвата голоса нам нужно настроить наш Микрофон :

    import flash.media.Microphone;
    public var mic:Microphone;
    mic = Microphone.getMicrophone();

После этого нам понадобится канал для передачи голоса, снятого с микрофона.К счастью, у нас есть NetStream :

    import flash.net.NetStream;
    private var stream:NetStream;
    var sm:NetStream=new NetStream(nc);
    stream.attachAudio(mic);

Соединение, похожее на построение моста, чтобы поток мог переносить данные из клиента на сервер.ОК, последнее, что нам нужно сделать, это publish :

    stream.publish("some name","record");

Теперь вы можете увидеть файл .flv с именем some name на стороне сервера.Этот файл станет больше, если вы откроете микрофон.

2) Через 30 секунд, как остановить запись и сохранить файл в определенной папке на сервере?

Создайте 30 секундный таймер, который начинается при записи.Закрытие потока Когда время истекло:

    import flash.utils.Timer;
    t = new Timer(1000, 30);
    t.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);
    private function timerComplete(event:TimerEvent):void{
      //close the stream
      stream.close();
      mic.setSilenceLevel(0);
    }

По умолчанию red5 сохранит файл в \webapps\dictRed5Server\streams.Если вы хотите изменить это, проверьте это guide .

3) Как переместить этот файл в папку HTTP сервера, чтобы я мог получить к нему доступ издомашняя страница после этого?

Red5 может работать вместе с Apache Tomcat, и вы можете использовать проигрыватель FLV для воспроизведения этих записей.

Надеюсь, приведенные выше фрагменты могут вам помочь.Я предлагаю вам установить Red5 и запустить несколько демонстраций и Google, что вы не понимаете.

0 голосов
/ 09 января 2012

Как указано выше, если вы нацелены на FP 10.1 или выше, вы можете избежать необходимости иметь специальный сервер и просто использовать серверную часть, к которой вы привыкли.

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

Я написал несколько фрагментов кода, которые могут оказаться полезными, когда дело доходит до понимания основ захвата.аудио из микрофона и сохранение в ByteArray.

http://wonderfl.net/c/zE8I

Я старался сделать его как можно более простым и комментировать как можно больше;Тем не менее, если вам нужна помощь, вы всегда можете спросить.

Что касается отправки ByteArray на сервер:

Отправка ByteArray через as3 в PHP

Надеюсь, это поможет.

0 голосов
/ 25 октября 2011

Если вы можете использовать Flash Player версии 10.1 или выше, вы можете вообще избежать FMS или Red5.Вы можете получить доступ к необработанным данным PCM, а затем загрузить их в скрипт, который хранит их для вас.Либо ваш SWF-файл, либо сценарий должен будет сохранить эти данные в виде звукового файла, например WAV или MP3.

Ознакомьтесь с этой статьей о подключении к Adobe Developer, он выполняет большую часть того, что вы хотите, за исключением бита загрузки: http://www.adobe.com/devnet/air/flex/articles/using_mic_api.html

0 голосов
/ 24 октября 2011

Приятно, что ты знаешь все ключевые слова - особенно red5. Плохая часть в том, что вам нужно много читать, чтобы настроить и заставить его работать.

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

Продолжай. Не забудьте опубликовать свои выводы.

...