做过FlashPlayer的多媒体项目的朋友都知道,FlashPlayer的媒体服务器只有FMS 或是开源的Red5服务器. Red5相对于FMS来说并没有什么太多的优势. 但是由于其开源的原因,并且是采用Java开发,所以它的扩展性是非常强的, 另外,FlashPlayer一直没有公开访问在线音视频流的的API, 而FMS也没有提供这样一个功能,这大大限制了FlashPlayer的在线音视频应用. 在未来FlashPlayer10扩展了Sound对象,可以访问到Sound当前播放的音频流的二进制数据,也可以通过缓冲区将二进制音频数据推送到 Sound对象缓冲区,实现播放, 这使用在线音频编辑实现的困难大大降低. 但是很遗憾,FlashPlayer并没有提供Mic的音频数据流的访问. 为了解决这个问题, 我开始尝试研究Red5. Red5本身已比较成熟了,它提供了基础的FMS所有的功能,包括音视频数据的在线播放,共享对象处理,RTMPT通道,RTMPS通道外,还提供了服务 器本身的管理功能~ Red5项目的本身非常灵活,架构十分精良,所以刚接触它的时候会感觉项目十分宠大,加入Spring,Jetty,Tomcat对新手来说,理解起来十 分困难.之前因为我写过基于Mina2的AMF3的Socket服务器,因此非常想独立一个只实现音视频的服务器出来,基于这种想法,我做了一些简单的尝 度,没想到真的成功了~ 独立出来的服务器, 并不具备Red5的灵活性,只是在它的基础上精简了一下. 只是作为一个简单的音视频服务器,并做了在线语音的测试. 下面是项目的结构:
下面是客户端的测试代码:
JavaScript代码
- package {
- import flash.display.Sprite;
- import flash.events.NetStatusEvent;
- import flash.media.Microphone;
- import flash.net.NetConnection;
- import flash.net.NetStream;
- import flash.net.ObjectEncoding;
- public class Red5 extends Sprite
- {
- private var net:NetConnection;
- private var stream:NetStream;
- public function Red5()
- {
- net=new NetConnection();
- net.client=this;
- net.objectEncoding=ObjectEncoding.AMF3;
- net.addEventListener(NetStatusEvent.NET_STATUS,onStatus);
- net.connect("rtmp://localhost/helloWorld");
- }
- public function close():void{
- }
- public function set onBWDone(value:*):void{
- trace("??");
- }
- public function get onBWDone():Function{
- return test;
- }
- public function test(...arg):void{
- trace("?");
- }
- private function onStatus(evt:NetStatusEvent):void{
- trace(evt.info.code);
- if(evt.info.code=="NetConnection.Connect.Success"){
- stream=new NetStream(net);
- stream.addEventListener(NetStatusEvent.NET_STATUS,onStreaStatu);
- var mic:Microphone=Microphone.getMicrophone(0);
- mic.rate=11;
- mic.setLoopBack(false);
- stream.attachAudio(mic);
- stream.publish("hello","live");
- }
- }
- private function onStreaStatu(evt:NetStatusEvent):void{
- trace(evt);
- }
- }
- }
|
|
服务器端日志:
admin#flashas.net (#为@) 联系QQ:
:40777822