2.class=“org.red5.server.adapter.ApplicationAdapter“
3.singleton=“true“/>
handler的例子
1.packagethe.path.to.my;
2.importorg.red5.server.adapter.ApplicationAdapter;
3.publicclassApplicationextendsApplicationAdapter{
4.publicDoubleadd(Doublea,Doubleb){
5.returna+b;
6.}
7.}
这里假设使用上边的配置,则在客户端调用的时候使用以下方式
1.nc=newNetConnection();
2.nc.connect(“rtmp:
//localhost/myapp“);
3.nc.onResult=function(obj){
4.trace(“Theresultis“+obj);
5.}
6.nc.call(“add“,nc,1,2);
返回因该有输出:
Theresultis3
///////////////////////////////////////////////////////////////
基于red5的在线视频录制实例和详细注释
最近在学校做毕业设计
顶着压力,昨天晚上研究了一个晚上red5和as3发现还是蛮有意思的
red5和fms都是个不错的东西,发现在压力下学东西学起来特别快哈
//预定义声明
importmx.utils.Delegate;
//创建一个基本的网络连接对象
varnc:
NetConnection=newNetConnection();
//连接到本地的Red5服务器
nc.connect("rtmp:
//localhost/online");
//将已和red5服务器建立连接的nc传递给NetStream
varns:
NetStream=newNetStream(nc);
//从摄像头和麦克风取得信息
varcam:
Camera=Camera.get();
varmic:
Microphone=Microphone.get();
//初始化摄像头和麦克风,调用函数
setupCameraMic();
//保存上次录制的内容,并进行清空
varlastVideoName:
String="";
//监听开始录制和停止录制两个按键的点击动作并进行相应的处理
playButton.addEventListener("click",Delegate.create(this,playClick));
stopButton.addEventListener("click",Delegate.create(this,stopClick));
//定义开始录制的playclick函数
functionplayClick():
Void
{
//此flv文件是保存在webapps/oflaDemo/streams/文件夹
//将摄像头和麦克风赋给ns
ns.attachVideo(cam);
ns.attachAudio(mic);
//将摄像头信息赋给视频显示窗口,这样我们可以即时看到信息
videoContainer.attachVideo(cam);
//此处是定义存储名字的,用随机数目获得一个唯一的文件名
lastVideoName="red5RecordDemo_"+random(getTimer());
ns.publish(lastVideoName,"record");
//锁定开始按键使其失效
playButton.enabled=false;
//锁定停止按键使其生效
stopButton.enabled=true;
}
functionstopClick():
Void
{
//关闭ns与red5的连接
ns.close();
//并清空视频显示窗口
videoContainer.attachVideo(null);
videoContainer.clear();
//锁定开始按键使其生效
playButton.enabled=true;
//锁定停止按键使其失效
stopButton.enabled=false;
//播放已经录制的视频
playLastVideo();
}
functionplayLastVideo():
Void
{
//传递录制的视频信息给视屏显示窗口
videoContainer.attachVideo(ns);
//回访已经上次录制的视频片段
ns.play(lastVideoName);
}
functionsetupCameraMic():
Void
{
//启动摄像头
cam=Camera.get();
//设置尺寸
cam.setMode(320,240,30);
//设置录制质量
cam.setQuality(0,70);
//启动麦克风
mic=Microphone.get();
mic.setRate(44);
}
///////////////////////////////////////////////////////////////
公司今天需要装一台RED5的服务器用来开发程序。
发现RED5的0.6已经正式放出,以前我写过一篇关于用SVN进行抽取,然后建立RED5项目的文章。
而对于一般的开发者来说,不需要去修改RED5本身的程序,只需要建立自己的应用程序就可以了。
现在把建立过程记录下来,希望对各位有所帮助。
本文适合第一次接触RED5(WIN平台下),而不知道如何开始建立自己的应用程序的用户。
流程:
1.下载最新版本的RED5 http:
//osflash.org/red5
2.安装RED5,注意在安装RED5前要先安装好JRE,安装RED5的时候会要求指定JRE的目录的。
3.到RED5的安装目录,找到doc/templates目录,该目录中存放了一个标准的RED5应用程序模版myapp,将其复制到RED5安装目录中的webapps目录下,并改名为你喜欢的文件夹名,比如你要开发一个聊天的程序,那么可以把myapp改为myChat,这个名字就是以后你要连接的服务名了。
4.在WEB-INF中新建一个文件夹src用来存放程序的源代码,新建一个classes文件夹用来存放编译后的文件。
5.打开Eclipse,将工作区指定为RED5安装目录下webapps,然后新建一个项目,项目名为myChat.这个时候你应该发现刚才myChat中的文件都被加载进来了,我们首先把src目录指定为源代码目录,右键选择src,在弹出的菜单中选择BuildPath->UseasSourceFolder,即将其指定为代码文件夹。
接下来要指定项目的目标目录,在项目名上右键选择Properties,选择JavaBulidPath,在选择Source标签,在下面的Browse中选择Classes目录,将其指定为目标目录。
然后选择Libraries,点击AddExternalJARs,将RED5安装目录下的red5.jar包含进来。
6.这个时候,在Eclipse的左边应该多了WEB-INF/src这样一个东东,我们将要在这里开始写入我们的第一个项目代码。
右键选择它,在弹出的菜单中选择New->Package,新建一个包,举例,包名可以为org.d5.first,然后再在生成的org.d5.first这个包上继续右键选择New->File,输入文件名Application.java。
并在建好的文件中输入以下代码:
packageorg.d5.first;
importorg.red5.server.adapter.ApplicationAdapter;
publicclassApplicationextendsApplicationAdapter{
publicStringlogin(){
return"WelcometoChatServers";
}
}
7.进行配置。
编辑WEB-INF下的red5-web.xml,找到beanid=”web.handler”一句,将class=”XXX”中的XXX位置修改为org.d5.first.Application,这样本程序将以刚才写的Application来运行。
删除后面的beanid=”server.handler…整句,因为我们暂时用不到这个东东。
编辑web.xml,找到webAppRootKey,将其下面的param-value标签中的值修改为/myChat。
编辑red5-web.properties,将第一句修改为webapp.contextPath=/myChat
8.编译项目
9.重新启动RED5服务器
10.在FLASH中新建一个文件,输入以下代码:
import.NetConnection;
import.Responder;
varresponder:
Responder=newResponder(chat);
varnc:
NetConnection=newNetConnection();
nc.connect("rtmp:
//localhost/mytest");
nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
functionchat(obj:
Object):
void{
trace(obj);
}
functionstatusHandler(event:
NetStatusEvent):
void
{
trace(event.info.code);
switch(event.info.code)
{
case"NetConnection.Connect.Success":
trace("Theconnectionwasmadesuccessfully");
break;
case"NetConnection.Connect.Rejected":
trace("sorry,theconnectionwasrejected");
break;
case"NetConnection.Connect.Failed":
trace("Failedtoconnecttoserver.");
break;
}
}
nc.call("login",responder);
运行程序,显示结果为WelcometoChatServers。
第一个RED5应用程序诞生了,呵呵:
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
忙了好几天,最近也算把Red5服务器服务端基本搞定了。
为了熟悉服务端代码,以及了解API,我仿照着FMS的模式做了一个多人聊天室。
基本实现了视频、群聊、私聊几个基本功能。
看到网上似乎还没有人放出这类的源代码,我索性就先当回螃蟹吧!
我们先来看代码:
服务端:
Application.java
packageorg.jerry.videochat;
importjava.util.*;
importorg.red5.server.adapter.ApplicationAdapter;
importorg.red5.server.api.IConnection;
importorg.red5.server.api.IScope;
importorg.red5.server.api.service.IServiceCapableConnection;
importorg.red5.server.api.so.ISharedObject;
publicclassApplicationextendsApplicationAdapter{
//属性
privateIScopeappScope;
privateStringusername;
privateISharedObjectlistSO;
privateISharedObjectmsgSO;
privateMaponLineClient=newHashMap();
//方法
//此应用开始运行时触发的方法
publicbooleanappStart(IScopeapp){
if(!
super.appStart(app)){
returnfalse;
}
appScope=app;
returntrue;
}
//客户端连接的时候触发的方法
publicbooleanappConnect(IConnectionconn,Object[]params){
username=(String)params[0];
//登入时将连接ID和连接信息形成对应关系并存入在线列表
Stringlink_id=conn.getClient().getId();
onLineClient.put(username,conn);
//为用户列表共享对象添加属性
//创建用户列表共享对象
listSO=getSharedObject(appScope,"listSO",false);
//创建用户聊天内容共享对象
msgSO=getSharedObject(appScope,"msgSO",false);
listSO.setAttribute(link_id,username);
returntrue;
}
//广播消息
public