Red5和Flash交互服务器学习笔记
上一篇讲述了flash如何和red5服务器进行基本的交互行为,即客户端调用服务端方法和服务端调用客户端方法。这一篇笔记的目的是让大家了解red5的媒体功能。
还是拿FMS服务器为例,FMS服务器的两个基本功能语音和视频传输,使用过FMS的人都知道,FMS提供的语音和视频传输时非常方便和简单的,你只需要把你想要播放的视频文件(以flv结尾的文件)放到你创建应用程序目录下的streams文件夹下面的_definst_文件夹里面就可以在客户端使用ns.play(视频文件名)的方式来播放。而客户端发布视频也同样会将视频发布在streams文件夹下面的_definst_文件夹里面。客户端只需要使用ns.publish(你设定的文件名,"record")这样的方式即可把用户的视频发布。 那么Red5呢? 答案是:一样的简单。 Red5在视频播放和发布方面可以说和FMS一样的方便快捷。 废话不多说了,我们来看代码。 客户端: 文档类:testRed5.as package { importflash.display.Sprite; importflash.events.MouseEvent; importflash.events.NetStatusEvent; importflash.media.Camera; importflash.media.Microphone; importflash.media.Video; importflash.net.NetConnection; importflash.net.NetStream; importflash.net.Responder; importflash.text.TextField; /** *...Red5服务器测试... *@authorJerry */ publicclasstestRed5extendsSprite{ //属性 privatevarnc:NetConnection; privatevarns:NetStream; privatevarns2:NetStream; privatevarcam:Camera; privatevarmic:Microphone; privatevarIP:String; privatevarsvrPath:String; privatevarusername:String; //构造函数 publicfunctiontestRed5(){ _init(); } privatefunction_init(){ IP="localhost"; svrPath="rtmp://"+IP+"/myChat"; username="cosmos53076"; nc=newNetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS,_statusHandler); nc.connect(svrPath,username); nc.client=this; } privatefunction_statusHandler(evt:NetStatusEvent){ if(evt.info.code=="NetConnection.Connect.Success"){ trace_txt.text+="连接成功!n"; _login();//登录显示 _playVideo();//播放视频 _publishVideo();//发布视频 } if(evt.info.code=="NetConnection.Connect.Failed"){ trace_txt.text+="连接失败!n"; } } privatefunction_login(){ nc.call("login",newResponder(_onGet,_onError)); } privatefunction_onGet(obj){ trace_txt.text+=obj; } privatefunction_onError(obj){ trace_txt.text+=obj; } //被服务端调用的方法 publicfunctionlogin(_name){ varmsg=_name+",您登录了Red5服务器!"; trace_txt.text+=msg+"n"; } privatefunction_playVideo(){ ns=newNetStream(nc); ns.client=this; ns.addEventListener(NetStatusEvent.NET_STATUS,_statusHandler); liveVideo.attachNetStream(ns); ns.play("IronMan"); } //从视频中读取相关信息 publicfunctiononMetaData(info:Object){ mess.text="节目时长:"+info.duration+"t"+"原始大小:"+info.width+"x"+info.height+"t"+"节目视频:"+info.framerate; } //发布视频 privatefunction_publishVideo(){ ns2=newNetStream(nc); cam=Camera.getCamera(); mic=Microphone.getMicrophone(); myVideo.attachCamera(cam); ns2.client=this; ns2.addEventListener(NetStatusEvent.NET_STATUS,_statusHandler); ns2.attachCamera(cam); ns2.attachAudio(mic); ns2.publish("myVideo","record"); } } } 代码我想应该不用多解释了,从上面的代码我们会发现,客户端的实现方式和FMS如出一辙。可以说,如果你以前写过FMS的客户端代码(视频方面的),你可以原封不动的拿过来直接用。 然后我们在看一下客户端的界面:那么服务端的代码呢? 用上一节我们用过的服务端代码就好了。和FMS一样,视频方面,我们无需再服务端写任何代码即可完成我们想要的功能。 唯一不同的是,我们只需要把要播放的文件直接放在应用程序文件夹下面的streams文件夹里就可以了。 快试试吧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |