这两天又完善了下细节性的东西,包括上下线提醒,视频请求交互……本以为很容易的,但是做的过程中还是发现了许多问题,同时也有一些疑问,在此和大家分享一下。
上下线提醒:
当有用户进入的时候,服务器端的方法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视频功能进行初步学习用 代码流程很清楚
flex与red5服务器结合,实现流视频的实时播放!
red5和flex的链接实例,毕设老师给的参考,希望可以帮助到你。
Red5 英文说明文档, flex视频 ,flash流媒体
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
Flex+Red5+Tomcat视频语音录制、播放
Flex Red5 Tomcat 视频语音录制和播放 在网上找,总发现文章都一样,而且都是不完整的, 这里希望能够给跟我一样学习中的朋友一些帮助, 详细说明在压缩文件中有。 Flex+Red5+Tomcat视频播放器: ...
java和Flex的视频通话,使用的是red5的服务器,其中服务器和客户端的源码都写好了,可以直接运行
flex + red5 简单实例,Flex作为一个客户端。同Red5自带的例子中的一个服务,客户端请求服务器的简单例子
NULL 博文链接:https://feiyan35488.iteye.com/blog/509766
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
Red5的Web视频、音频系统开发
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
Flex作为一个客户端。同Red5自带的例子中的一个服务一起使用,合成一个简单的聊天例子。
基于red5的多人聊天,使用了sharedobject,此例子仅用于对不了解sharedobject的人做一个入门的例子
基于Red5的Web视频、音频系统开发.pdf
Red5 基于 Java 和一些功能强大的开源框架,为企业级应用奠定了标准。它使用 RTMP,RTMPT,RTMPS 和 RTMPE 流媒体协议, 支持:将音频(MP3)和视频(FLV,MP4,F4V,3GP)转换成播放流;录制客户端播放流;共享对象...
flex与java之间的信息交互,使用的框架是red5
import org.red5.server.api.Red5; import org.red5.server.api.service.IServiceCapableConnection; import org.red5.server.api.so.ISharedObject; import org.red5.server.api.ScopeUtils; import org.red5....
简单的flex+red5学习,对初步学习者很有帮助