-1

我目前正在做一个项目 - 一个在线教育系统,我需要让 stud 能够在30 秒的音频剪辑中介绍自己。

我需要用 Adob​​e Flash 来实现它。问题是我不知道 Flash + Red5 二人组如何协同工作。网上没有那么多有用的资源,至少对我来说,因为我是 Flash 的初学者。(我主要做 PHP 的东西。)

1)当你连接到服务器时,你如何让它从 Flash 客户端录制音频?

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

3)如何将此文件移动到服务器的 HTTP 文件夹,以便之后可以从主页访问它?

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

非常感谢!

4

4 回答 4

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 客户端。为了捕捉声音,我们需要设置我们的麦克风

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

现在,您可以看到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. 如果您想更改此设置,请查看本指南

3)如何将此文件移动到服务器的 HTTP 文件夹,以便之后可以从主页访问它?

Red5 可以与 apache tomcat 一起使用,您可以使用 flv 播放器播放这些记录。

我希望上面的片段可以帮助你。我建议你可以安装red5并运行一些演示和谷歌你不明白的东西。

于 2011-10-26T03:49:53.853 回答
0

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

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

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

于 2011-10-24T04:22:20.443 回答
0

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

在 Adob​​e Developer Connection 上查看这篇文章,它可以完成您想要的大部分操作,但不包括上传位: http: //www.adobe.com/devnet/air/flex/articles/using_mic_api.html

于 2011-10-25T10:23:32.797 回答
0

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

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

我写了一些代码片段,在了解从麦克风中获取音频和存储在 ByteArray 中的基础知识时,您可能会发现它们很有用。

http://wonderfl.net/c/zE8I

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

关于将 ByteArray 发送到服务器:

通过 as3 将 ByteArray 发送到 PHP

希望这可以帮助。

于 2012-01-09T18:29:02.593 回答