还是拿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文件夹里就可以了。
快试试吧!