我目前正在开展一个项目 - 一个在线教育系统,我需要让螺柱在 30秒的音频录音中自我介绍。
我需要用Adobe Flash实现它。问题是我不知道Flash + Red5 duo如何协同工作。因为我是Flash的初学者,所以在线没有那么多有用的资源,至少对我而言。 (我主要做PHP的东西。)
1)当您连接到服务器时,如何使其从Flash客户端录制音频?
2) 30秒后,如何停止录制并将文件保存在服务器上的特定文件夹中?
3)如何将此文件移至服务器的HTTP文件夹,以便我可以在主页后访问该文件?
请注意我是flash和Red5的初学者,所以我真的需要你们的详细说明。
非常感谢!
答案 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中的基础知识时可能会觉得有用。
我尽量保持基本,并尽可能多地评论;但是,如果你需要帮助,你可以随时询问。
关于将ByteArray发送到服务器:
Sending ByteArray through as3 to PHP
希望这有帮助。