`
nanjingjiangbiao_T
  • 浏览: 2594992 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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文件夹里就可以了。

快试试吧!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics