Как захватить аудио из браузера и сохранить его на сервере?
В настоящее время я работаю над проектом - системой онлайн-обучения, и мне нужно, чтобы кобели представились в 30-секундном аудиоклипе.
Мне нужно реализовать это с помощью Adobe Flash. Проблема в том, что я понятия не имею, как работает дуэт Flash + Red5. В Интернете не так много полезных ресурсов, по крайней мере для меня, так как я новичок во Flash. (Я в основном занимаюсь PHP).
1) Когда вы подключаетесь к серверу, как сделать так, чтобы он записывал аудио с флеш-клиента?
2) Как через 30 секунд остановить запись и сохранить файл в определенной папке на сервере?
3) Как переместить этот файл в папку HTTP сервера, чтобы после этого я мог получить к нему доступ с домашней страницы?
Обратите внимание, что я новичок в flash и Red5, поэтому мне очень нужны подробные объяснения от вас, ребята.
Большое спасибо!
4 ответа
Я буду стараться изо всех сил, чтобы четко ответить.
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);
Соединение так же, как построение моста, чтобы поток мог переносить данные от клиента к серверу. ОК, последнее, что нужно сделать, это опубликовать:
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
, Если вы хотите изменить это, проверьте это руководство.
3) Как переместить этот файл в папку HTTP сервера, чтобы после этого я мог получить к нему доступ с домашней страницы?
Red5 может работать вместе с Apache Tomcat, и вы можете использовать FLV-плеер для воспроизведения этих записей.
Надеюсь, что приведенные выше фрагменты могут вам помочь. Я предлагаю вам, что вы можете установить Red5 и запустить несколько демонстраций и Google, что вы не понимаете.
Приятно, что ты знаешь все ключевые слова - особенно red5. Плохая часть заключается в том, что вам нужно много читать, чтобы настроить и заставить его работать.
Самое приятное то, что вы будете так счастливы и гордиться собой., Как только вы завершите это., У тебя нет идей.
Продолжайте идти. Не забудьте опубликовать свои выводы.
Если вы можете использовать Flash Player 10.1 или более поздней версии, вы можете вообще избежать FMS или Red5. Вы можете получить доступ к необработанным данным PCM, а затем загрузить их в сценарий, который хранит их для вас. Либо ваш SWF-файл, либо сценарий должен будет сохранить эти данные в виде звукового файла, например WAV или MP3.
Прочитайте эту статью о Adobe Developer Connection, она делает большую часть того, что вы хотите, за исключением бит загрузки: http://www.adobe.com/devnet/air/flex/articles/using_mic_api.html
Как указано выше, если вы нацелены на FP 10.1 или выше, вы можете избежать необходимости иметь специальный сервер и просто использовать серверную часть, к которой вы привыкли.
В AS3 все, что вам нужно сделать, это сохранить записанные данные PCM в ByteArray, а затем отправить ByteArray на ваш сервер; тем не менее, если вы хотите сжать его, чтобы сэкономить пропускную способность, существует множество библиотек, которые могут вам помочь.
Я написал несколько фрагментов кода, которые могут оказаться полезными для понимания основ захвата звука с микрофона и сохранения в ByteArray.
Я старался держать его как можно более простым и комментировать как можно больше; Тем не менее, если вам нужна помощь, вы всегда можете спросить.
Что касается отправки ByteArray на сервер:
Отправка ByteArray через as3 в PHP
Надеюсь это поможет.