经过一段时间的研究,视频聊天在今天终于告一段落了,特此发码 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="800" height="600" creationComplete="init()"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <!--[CDATA[ import mx.collections.ArrayCollection; import mx.collections.IList; import mx.collections.XMLListCollection; import mx.controls.Alert; private var IP:String; private var redPath:String; private var nc:NetConnection; private var ns:NetStream; private var ns2:NetStream; private var cam:Camera private var mic:Microphone; private var listSO:SharedObject; private var msgSO:SharedObject; [Bindable] private var userArr:ArrayCollection; private var sendMsg:String; private var now:Date; private var userIDObj:Object; private var video:Video; private function init():void{ IP="192.168.1.100"; redPath="rtmp://"+IP+"/makeFriend"; nc=new NetConnection(); now=new Date(); main.visible=false; login.visible=true; userList.visible=true; chatVideo.visible=false; } private function startConnect():void{ nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler); nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityHandler); nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncHandler); nc.connect(redPath,username.text,userpwd.text); nc.client=this; } private function statusHandler(e:NetStatusEvent):void{ if(e.info.code=="NetConnection.Connect.Success"){ Alert.show("登录成功"); login.visible=false; main.visible=true; publishVideo(); setListSO(); setMsgSO(); btnSend.addEventListener(MouseEvent.CLICK,sendBtnByClick); main.addEventListener(KeyboardEvent.KEY_DOWN,sendBtnByKey); } if(e.info.code=="NetConnection.Connect.Failed") { Alert.show("连接失败"); } if(e.info.code=="NetConnection.Connect.Closed") { Alert.show("账号密码不正确,请重新输入!!!"); } } private function securityHandler(e:SecurityError):void{ Alert.show("低调的安全沙箱错误"); } private function asyncHandler(e:AsyncErrorEvent):void{ Alert.show("低调的异步错误"); } private function publishVideo():void{ ns=new NetStream(nc); cam=Camera.getCamera(); mic=Microphone.getMicrophone(); myVideo.attachCamera(cam); ns.client=this; ns.addEventListener(NetStatusEvent.NET_STATUS,statusHandler); ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncHandler); ns.attachCamera(cam); ns.attachAudio(mic); ns.publish(username.text,"live"); } private function setListSO():void{ listSO=SharedObject.getRemote("listSO",nc.uri,false); listSO.connect(nc); listSO.addEventListener(SyncEvent.SYNC,listSOSyncHandler); } private function setMsgSO():void{ msgSO = SharedObject.getRemote("msgSO", nc.uri, false); msgSO.addEventListener(SyncEvent.SYNC, msgSOSyncHandler); msgSO.connect(nc); } private function msgSOSyncHandler():void{ for (var i in msgSO.data) { txtmessage.text =txtmessage.text+ msgSO.data[i]; } } private function listSOSyncHandler(e:SyncEvent):void{ showUserList(); userList.addEventListener(MouseEvent.CLICK,updateChatTo); userList.addEventListener(MouseEvent.DOUBLE_CLICK,updateVideoShow); } private function showUserList():void{ userArr=new ArrayCollection(); for(var tmp in listSO.data){ userArr.addItem(listSO.data[tmp]); } userArr.addItemAt("所有人",0); this.userList.dataProvider=userArr; } private function updateChatTo(e:MouseEvent):void{ main.title="您正与"+userList.selectedItem+"聊天中"; } private function updateVideoShow(e:MouseEvent):void{ if(userList.selectedItem=="所有人"||userList.selectedItem=="") { Alert.show("不能和所有人进行视频聊天。"); return ; } userList.visible=false; chatVideo.visible=true; video=new Video(); ns2=new NetStream(nc); ns2.addEventListener(NetStatusEvent.NET_STATUS,statusHandler); ns2.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncHandler); ns2.play(userList.selectedItem); ns2.client=this; video.attachNetStream(ns2); video.width=288; video.height=218; chatVideo.addChild(video); chatVideo.play(); } private function sendBtnByClick(e:MouseEvent):void{ sendMsge(); } private function sendBtnByKey(e:KeyboardEvent):void{ if(e.keyCode==Keyboard.ENTER&&e.ctrlKey==true) { sendMsge(); } } private function sendMsge():void{ var mess:String=username.text+"说:"+sendmessage.text+"\r\n"; if(username.text==userList.selectedItem){ Alert.show("您不能与自己聊天,请重新更换聊天对象"); return; } if(sendmessage.text==""){ Alert.show("发送信息不能为空"); return ; } if(userList.selectedItem=="所有人"){ nc.call("broadcastUserMsg",null,mess); sendmessage.text=""; return; } if(userList.selectedItem!=null){ nc.call("msgFromPrivate",null,mess,username.text,userList.selectedItem); sendmessage.text=""; } } public function showMsgByPrivate (msg:String):void{ txtmessage.text=txtmessage.text+msg; } ]]--> </fx:Script> <s:Panel id="login" title="欢迎您的访问" width="100%" height="100%"> <s:Label x="381" y="109" text="登 录" width="192" height="35" fontSize="25" verticalAlign="middle" textAlign="center" fontWeight="normal" fontStyle="normal"/> <s:Label x="353" y="167" text="用户名:" width="73" height="24" verticalAlign="middle" fontSize="16"/> <s:Label x="353" y="212" text="密 码:" width="73" height="24" verticalAlign="middle" fontSize="16"/> <s:TextInput id="username" x="446" y="168" width="154" textAlign="left" maxChars="18"/> <s:TextInput id="userpwd" x="445" y="214" width="154" textAlign="left" displayAsPassword="true" maxChars="18"/> <s:Button x="373" y="257" label="登录" id="btnsub" click="startConnect()"/> <s:Button x="501" y="257" label="取消" id="cancel" click="navigateToURL(new URLRequest('javascript:window.close()'),'_self')"/> </s:Panel> <s:Panel id="main" width="100%" height="100%"> <mx:VideoDisplay id="myVideo" x="468" y="276" width="288" height="217" /> <s:Group x="468" y="24" width="288" height="218"> <mx:VideoDisplay id="chatVideo" width="100%" height="100%"/> <s:List id="userList" width="100%" height="100%" doubleClickEnabled="true" doubleClick="updateVideoShow(event)" /> </s:Group> <s:Button id="btnSend" x="279" y="519" label="发送"/> <s:TextArea enabled="false" id="txtmessage" x="46" y="26" width="402" height="292"/> <s:TextArea id="sendmessage" x="47" y="348" width="397" height="145"/> <s:Button id="btnexit" x="374" y="519" label="退出"/> </s:Panel> </s:Application>
您还没有登录,请您登录后再发表评论
摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...
简易QQ mfc实现源码(学习使用的简单版本) 支持tcp,udp.聊天功能ok。 请下载前注意:视频抓取功能有问题
java简易版开心农场源码 智慧北京 项目角色 产品经理(产品狗,产品汪) 决定开发什么东西, 需求文档(原型图) 程序员(码农, 程序猿, 攻城狮) 负责开发 Android开发工程师 IOS开发工程师 服务器开发工程师JavaEE/...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国学校实现网上 办公,提高效率,了解民众呼声提供全站程序. ...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国政府机构实现网上 办公,提高效率,了解民众呼声提供全站程序...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国学校实现网上办公,提高效率,了解民众呼声提供全站程序. ...
102套python源码实例含Py源代码,提供python语言学习者。目录简述: 根据出生日期判断你的星座 根据出生日期判断生肖 使用Python制作简易数字累加器 商品竞猜价格 根据计算机硬盘、主板、CPU生成注册信息 语音版东北...
16、Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 17、Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据 18、Silverlight(20) - 2.0通信之...
交友网站正式版栏目频道有,征婚,圈子,诊所,活动,约会,聊天,视频,博客,相册,搜索,故事。是建立大型征婚婚恋门户网站的优惠网站系统,交友网站智能建站系统,征婚网站自助建站整站程序. 完美的asp编程的网络交友征婚...
最强大学校网站系统全站源代码学校网站模板下载,学校网站源码学校网页模板正式版,学校网站管理系统源码,学 校模板正式版,学校网站管理系统全站源码正式版,后台管理从前台网站输入http://***.***.***/login.asp 进入...
实例053 屏蔽TextBox控件上默认的右键菜单 62 2.2 ComboBox控件应用 63 实例054 美化ComboBox控件下拉列表 63 实例055 用ComboBox控件制作浏览器网址输入框 64 2.3 RichTextBox控件应用 65 实例056 在...
整站幻灯片为旧版的加强版支持所有常规浏览器,并已测试通过,纯js+css完成,支持一个页面调用多个幻灯片; 系统使用三色调配原则,大家可以按颜色喜欢在后台直接调试喜欢的色彩风格; 阿赛全新聊天系统嵌入版本; ...
8.3.2 Socket应用(简易聊天室) 8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器...
相关推荐
摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...
摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...
简易QQ mfc实现源码(学习使用的简单版本) 支持tcp,udp.聊天功能ok。 请下载前注意:视频抓取功能有问题
java简易版开心农场源码 智慧北京 项目角色 产品经理(产品狗,产品汪) 决定开发什么东西, 需求文档(原型图) 程序员(码农, 程序猿, 攻城狮) 负责开发 Android开发工程师 IOS开发工程师 服务器开发工程师JavaEE/...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国学校实现网上 办公,提高效率,了解民众呼声提供全站程序. ...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国政府机构实现网上 办公,提高效率,了解民众呼声提供全站程序...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国学校实现网上办公,提高效率,了解民众呼声提供全站程序. ...
102套python源码实例含Py源代码,提供python语言学习者。目录简述: 根据出生日期判断你的星座 根据出生日期判断生肖 使用Python制作简易数字累加器 商品竞猜价格 根据计算机硬盘、主板、CPU生成注册信息 语音版东北...
16、Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 17、Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据 18、Silverlight(20) - 2.0通信之...
交友网站正式版栏目频道有,征婚,圈子,诊所,活动,约会,聊天,视频,博客,相册,搜索,故事。是建立大型征婚婚恋门户网站的优惠网站系统,交友网站智能建站系统,征婚网站自助建站整站程序. 完美的asp编程的网络交友征婚...
最强大学校网站系统全站源代码学校网站模板下载,学校网站源码学校网页模板正式版,学校网站管理系统源码,学 校模板正式版,学校网站管理系统全站源码正式版,后台管理从前台网站输入http://***.***.***/login.asp 进入...
实例053 屏蔽TextBox控件上默认的右键菜单 62 2.2 ComboBox控件应用 63 实例054 美化ComboBox控件下拉列表 63 实例055 用ComboBox控件制作浏览器网址输入框 64 2.3 RichTextBox控件应用 65 实例056 在...
整站幻灯片为旧版的加强版支持所有常规浏览器,并已测试通过,纯js+css完成,支持一个页面调用多个幻灯片; 系统使用三色调配原则,大家可以按颜色喜欢在后台直接调试喜欢的色彩风格; 阿赛全新聊天系统嵌入版本; ...
整站幻灯片为旧版的加强版支持所有常规浏览器,并已测试通过,纯js+css完成,支持一个页面调用多个幻灯片; 系统使用三色调配原则,大家可以按颜色喜欢在后台直接调试喜欢的色彩风格; 阿赛全新聊天系统嵌入版本; ...
8.3.2 Socket应用(简易聊天室) 8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器...
学校网站管理系统正式版助中国各级学校行政单位走上信息化道路,学校单位网站管理系统正式版助中国学校走上网络,为公众服务,学校网站管理系统正式版为中国学校实现网上 办公,提高效率,了解民众呼声提供全站程序. ...