如何从浏览器捕获音频并将其保存在服务器上?

时间:2011-10-24 03:58:31

标签: flash audio flash-cs4 red5 recording

我目前正在开展一个项目 - 一个在线教育系统,我需要让螺柱在 30秒的音频录音中自我介绍。

我需要用Adobe Flash实现它。问题是我不知道Flash + Red5 duo如何协同工作。因为我是Flash的初学者,所以在线没有那么多有用的资源,至少对我而言。 (我主要做PHP的东西。)

1)当您连接到服务器时,如何使其从Flash客户端录制音频?

2) 30秒后,如何停止录制并将文件保存在服务器上的特定文件夹中?

3)如何将此文件移至服务器的HTTP文件夹,以便我可以在主页后访问该文件?

请注意我是flash和Red5的初学者,所以我真的需要你们的详细说明。

非常感谢!

4 个答案:

答案 0 :(得分:1)

我会尽力做出清楚的答案。

1)当您连接到服务器时,如何使其从Flash客户端录制音频?

首先,您需要知道服务器和客户端使用的协议之间的连接,如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客户端。为了捕获语音,我们需要设置Microphone

    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");

现在,您可以在服务器端看到名为some name的.flv文件。如果你打开麦克风,这个文件会变大。

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你不理解的东西。

答案 1 :(得分:0)

老兄,好的部分是你知道所有的关键词 - 尤其是red5。不好的是,你需要做很多阅读才能配置并使其正常工作。

最好的部分是你会为自己感到高兴和自豪。 。完成后。 。你不知道。

继续前进。记得回复你的发现。

答案 2 :(得分:0)

如果您可以定位Flash Player 10.1或更高版本,那么您可以完全避免使用FMS或Red5。您可以访问原始PCM数据,然后将其上传到为您存储它的脚本。您的SWF或脚本必须将此数据保存为声音文件,例如WAV或MP3。

在Adobe开发人员连接上查看这篇文章,它可以完成您想要的大部分内容,减去上传位:http://www.adobe.com/devnet/air/flex/articles/using_mic_api.html

答案 3 :(得分:0)

如上所述,如果您使用FP 10.1或更高版本,则可以避免使用特殊服务器,只需使用您习惯使用的后端。

在AS3中,您需要做的就是将记录的PCM数据存储在ByteArray中,然后将ByteArray发送到您的服务器;但是,如果你想压缩它以节省带宽,那里有大量的库可以帮助你。

我写了一些代码片段,在理解从麦克风抓取音频和存储在ByteArray中的基础知识时可能会觉得有用。

http://wonderfl.net/c/zE8I

我尽量保持基本,并尽可能多地评论;但是,如果你需要帮助,你可以随时询问。

关于将ByteArray发送到服务器:

Sending ByteArray through as3 to PHP

希望这有帮助。