我目前正在做一个项目 - 一个在线教育系统,我需要让 stud 能够在 中介绍自己。 30 秒音频剪辑 .
我需要用 Adobe Flash 来实现它。问题是我不知道 Flash + Red5 二人组如何协同工作。网上没有那么多有用的资源,至少对我来说,因为我是 Flash 的初学者。 (我主要做 PHP 的东西。)
1) 当您连接到服务器时,如何让它从 Flash 客户端录制音频?
2) 30 秒后,如何停止录制并将文件保存在服务器上的特定文件夹中?
3) 如何将此文件移动到服务器的 HTTP 文件夹,以便之后可以从主页访问它?
请注意我是flash和Red5的初学者,所以我真的需要你们详细的解释。
非常感谢!
最佳答案
我会尽力把答案说清楚。
1) 当您连接到服务器时,如何让它从 Flash 客户端录制音频?
首先,您需要知道服务器和客户端之间的连接使用的协议(protocol)如 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并运行一些演示和谷歌你不明白的东西。
关于flash - 如何从浏览器捕获音频并将其保存在服务器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871161/