这两天又完善了下细节性的东西,包括上下线提醒,视频请求交互……本以为很容易的,但是做的过程中还是发现了许多问题,同时也有一些疑问,在此和大家分享一下。
上下线提醒:
当有用户进入的时候,服务器端的方法appConnect()自动执行,可以在此方法中加入向其它在线的用户广播上线的方法.在遍历所有在线用户时,我开始用的是:
Iterator<IConnection> it = scope.getConnections();
可是myEclipse报错,按照错误说明是scope.getConnections()应该返回的是Collection<set<IConnection>>类型,我网上查了下,都是像我上面那样用,也没出现上面错误啊,我又查了下red5API中的IScope中的getConnections()方法,返回的的确是IConnection类型啊,这把我郁闷了,难道是red5版本的问题,导致red5.jar包中某些类中方法改变啦,我用的是red5 0.9.没办法,我只得按照不报错来,就换成下面的:
Iterator it = scope.getConnections().iterator();
while(it.hasNext()){
Set connections = (Set)it.next();
IConnection conn = (IConnection)connections.iterator ().next();
callClientLogin(conn,name); //此方法将调用客户端上线提醒方法
}
这下就不报错了,测试了下,也成功了!也不知道怎么回事?没有去看官方版本改进说明,有哪位童鞋知道的麻烦留个言告诉一下,3Q!!
视频请求交互:
实现机制很简单,无非首先得到请求视频对象的IConnection,然后调用客户端方法,被邀请方同意视频请求后,然后再取得邀请方的IConnection,调用客户端取得被邀请方视频的方法,同时被邀请方调用取得邀请方视频的方法。但是这里面很容易出问题,因为参数在客户端和服务器端来回传递,思路一定要清晰,另外我刚开始也遇到了问题,被邀请方能看到邀请方的视频,但是邀请方看不到被邀请方的,参数我是传了的,我打印了下传到服务器端的对象,结果显示null,也就是说参数没保存信息,最后我将被邀请方和邀请方的信息保存在数组里面,这样就好使了。
//客户端:
//邀请他人视频
private function inviteVideo():void{
var To:String = userList.selectedItem.username;
videoUsers[1] = To;
chatCon.htmlText += "您选择的对象是:"+ To;
nc.call("videoInvite",null,videoUsers[0],videoUsers[1]);
Alert.show("正在等待对方连 接...","haha",Alert.CANCEL,this,canelHander);
}
//视频请求交互
public function IsVideoInvite(from:String):void{
Alert.show(from+"邀请你视频,是否同意?","是吗",Alert.YES|Alert.NO,this,alertClientHander);
}
//被邀请方同意视频
private function alertClientHander(event:CloseEvent):void{
if(event.detail==Alert.YES){
nc.call("videoInviteSuccess",null,videoUsers[0]);
}
getVideo();
else{
}
}
//获取邀请方视频
private function getVideo():void{
remoteStream = new NetStream(nc);
remoteStream.bufferTime=1; //缓冲1秒再播放,保证视频流畅
otherVideo.width=remoteVideo.width; otherVideo.height=remoteVideo.height;
otherVideo.attachNetStream(remoteStream);
remoteStream.play(userName);
remoteVideo.addChild(otherVideo);
}
//邀请方获取被邀请方视频
private function getOtherVideo(user:String):void{
remoteStream = new NetStream(nc);
remoteStream.bufferTime=1; //缓冲1秒再播放,保证视频流畅
otherVideo.width=remoteVideo.width; otherVideo.height=remoteVideo.height;
otherVideo.attachNetStream(remoteStream);
remoteStream.play(user);
remoteVideo.addChild(otherVideo);
}
另外还要指出一点,可能大家做的时候会发现相互获取视频的时候调用的方法实现都差不多,我也试着让二者调用同一方法,无非让传参不同,结果没能得到想要结果,因为这个时候会出现异步错误,大家可以增加个监听器看看就知道了
.......
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _asyncHandler);
.......
//异步错误
private function _asyncHandler(evt:AsyncErrorEvent) {
chatCon.htmlText += "异步错误!\n";
}
待续...
接下来将研究下flex动态生成组件问题,每当有人向你请求视频时,动态生成视频窗口,这样会出现多个其它人的视频。
主要为了测试下服务器的带宽消耗,看看red5能支持多少路视频音频流,清晰度,延迟怎样?远程共享白板要放一放了....
分享到:
相关推荐
通过研究这个实例,开发者可以了解如何在Flex客户端中创建RTMP连接,发送和接收数据,以及如何在Red5服务器上创建和管理这些连接。这有助于开发者深入理解Flex与Red5之间的交互机制,为构建更复杂的多媒体应用奠定...
要运行这个Flex视频聊天室,你需要一个支持RTMP的服务器,如Adobe Flash Media Server或开源的Red5。在开发和调试过程中,你可以使用Flex Builder或IntelliJ IDEA等IDE,它们提供了集成的Flex开发环境和调试工具。 ...
标题中的“基于flex,red5,java的一个聊天程序(含私聊)”指的是一个使用Adobe Flex作为前端开发工具,Red5作为流媒体服务器,以及Java作为后端编程语言构建的实时聊天应用程序,其中包括了私聊功能。这个项目可能是...
7. **Red5与Flex/Flash集成**:由于Red5与Adobe Flex和Flash有良好的兼容性,开发者可以使用这些工具创建丰富的用户界面并与Red5服务器进行交互,实现如聊天室、在线视频会议等功能。 8. **错误处理与调试**:了解...
2. **RTMP与RTMPE协议**:RED5使用RTMP协议进行实时数据传输,RTMPE是RTMP的加密版本,确保数据在传输过程中的安全性。这些协议使得用户可以在浏览器上进行实时音视频交互。 3. **FLEX开发**:FLEX提供了MXML和...
- **即时通讯实现**:基于Red5开发即时通讯功能,支持多用户在线聊天。 #### 附录:开发工具使用 - **IDE配置与使用**:推荐使用Eclipse、IntelliJ IDEA等IDE进行Red5开发,包括项目创建、代码编辑、调试等功能。 ...
Red5 Server基于Java技术构建,因此具备跨平台性。它的核心组件包括连接管理器、应用服务器、存储服务和流媒体处理等。连接管理器负责客户端的连接与断开,应用服务器处理业务逻辑,存储服务则用于保存录制的流媒体...
本研究着眼于新的计算机技术在教学中的应用,特别是如何利用开源的Red5流媒体服务器结合Flex RIA(Rich Internet Applications)技术、Spring框架以及Cairngorm微架构技术工具,构建一个基于J2EE架构的FLV流媒体技术...
FluorineFx+Flex视频聊天室源代码是一款基于Adobe Flex和FluorineFx技术构建的实时在线视频聊天应用程序。这个项目展示了如何利用这两项技术实现高效的多媒体通信,为用户提供一个互动性强、功能丰富的聊天环境。...
本文旨在深入探讨Red5的技术架构、工作原理及应用实践,为Flash/Flex应用的服务器端开发提供有价值的参考。 #### 二、Red5介绍 ##### 2.1 Red5优点 - **功能全面**: Red5不仅限于媒体服务器,还支持多种应用场景,...
在实际应用中,开发者可以深入研究源码,了解Openfire与Red5的集成方式,以及SparkWeb如何处理音视频交互。这有助于定制自己的即时通讯解决方案,例如添加新的功能,优化性能,或者改进用户体验。同时,对于学习Flex...
Red5服务器是一款开源的流媒体服务器,主要用于处理视频、音频流以及其他实时数据的传输。它的主要功能包括录制、播放、转码以及互动流媒体服务。标题"red5-server-1.0.4-RELEASE-server"表明这是一个特定版本的Red5...