基于java Red5服务器客户端视频聊天室搭起床了
基于java Red5服务器客户端视频聊天室(ldfu)
开发环境:
Red5(视频服务端内嵌Tomcat6),Mina(高性能 socket通讯框架),
Flash(Flex) Builder4,Myeclipse8.0,java sdk6.0
一.先看看客户端的界面,呵呵。
(1)Flash Buidler开发原型图
(2)全屏图:
(3)UI部分源码:
(4)服务器启动:
(5)开始视频接受对方数据流以及聊天记录:
二.原理:
(1)服务器启动ServerSocket监听RTSP协议数据流;
@Override
public boolean appStart(IScope arg0) {
/**
* 此应用启动时,第一个触发
*/
System.out.println("服务器启动成功!");
return super.appStart(arg0);
}
(2)客户端Flash启动获取摄像头以及音频输入显示在本地左下方区域;
private var rtmpUrl:String="rtmp://192.168.1.100/chatlive";
camera= Camera.getCamera();
if (camera!=null)
{
writeMessage("您的系统已经安装摄像头");
camera.addEventListener(ActivityEvent.ACTIVITY,cameraActivityHander);
camera.addEventListener(StatusEvent.STATUS, cameraStatusHander);
this.myVideo.attachCamera(camera);
}
else
{
writeMessage("您的系统没有安装摄像头");
}
mic = Microphone.getMicrophone();
if (mic!=null) {
writeMessage("您的系统已经安装麦克风");
mic.setSilenceLevel(0);
mic.gain = 100;
}
else
{
writeMessage("您的系统没有安装麦克风");
}
(3)客户端Flash连接Red5服务器是否已经存在,存在则从服务器获取一个
自己的ID.不存在着提示:
nc = new NetConnection();
nc.client = this;
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect(rtmpUrl, localUsername);
(4)哈哈,其他代码暂时不公布,呵呵。
三.此视频架构缺点:
1.客户端需要服务器来中转数据流,严重依赖于服务器;
2.严重地占用服务器的资源,包括CPU,内存以及网络带宽,可扩展性差;
除非像ku6那样每年给电信烧十几亿的带宽费;客户端越多,服务器
需要越多,带宽要求越高。
四.感言:
这种架构没有太多钱投资情况下,几乎是无法运行的,呵呵。所以我想基于
P2P架构进行点对点聊天。经过多天的摸索,目前已经找到一种点对点直接视频
方式,它不需要服务器中转。不过稍微深入一点的技术,其技术难点:
(1)如何穿透在NAT服务器后面的私有内部网络进行UDP数据传送,因为你的内部
IP地址在外面是看不到,外面也是无法主动连接内部IP;
(2)如何穿透防火墙的阻拦;呵呵,现在的公司一般都打开http 80端口,我们就在这个
上面下功夫,那就是利用Http隧道穿越!或JXTA技术,is No Problem。
(3)以怎么样的协议传送视频音频数据
(4)如何获取摄像头以及声音;
目前(1),(2)两点已经实现基本的解决方案代码,加油,有挑战性,呵呵
ningwu_05@126.com
感激不尽!
zhjb_0000@qq.com
icecooly.du@qq.com
liuyu19865@vip.qq.com
hotdoor1981@yahoo.com.cn
官方所有demo代码的svn地址:http://red5.googlecode.com/svn/java/example/trunk (可在官网找到最新下载链接) 其中的videoconerence即为此例代码
楼主只不过想自我炫耀一下罢了.
再有,基本red5的视频会议运用,一般在内网运行.基于NIO技术的流传播,支持个千把链接没问题.
123020576@qq.com
谢谢啦
hillhaw@qq.com
7779177@qq.com