资源描述
网络视频聊天交流目前很是热门,但用WEB 视频就不是那么简单了。以前有两种方式可以实现 一个是用客服 ACTIVE 控件 二是用 JAVA APP 但两种都不很理想。源代码下载源代码下载网络视频聊天 交流目前很是热门但用 WEB 视频就不是那么简单了以前有两种方式可以实现 一个是用客服 ACTIVE 控件 二是用 JAVA APP 但两种都不很理想一个是网络信号采集不能自适应带宽,二是技术上的难题 现在流行的 BCHAT(碧聊用的)就是采用第一种方式,但我还是不能把控件给分离出来,网上了也没有 免费 或者商业的现成控件卖 第二个方式我就不说了,因为WIN XP 以上不支持 JAVA 所以免谈但是现 Macromedia 推出的新技术 Flash Communication Server MX确很方便实现了,关于这个方面的介绍大家可以去网上找下载测试版后有几个现成的例子,在这说说怎么利用ASPX 和 FLASH 通信实现两个 ID 的交流这里发一下成品的图片这是我是 +SQL 写的仿 QQ 的在线通信系统功能还不错 QQ 的功能在这都有了最让我得意是终于实现了视频的功能FLASH 的视频功能是 b-s-b 模式 也就是在服务段会有个零时视频文件具体代码就打包让下载好了这个写点重点SP.aspXprivate void Page_Load(object sender,System.EventArgs e)private void Page_Load(object sender,System.EventArgs e)Response.Write(conn=1&Sendid=+Sessionnmd+&R Response.Write(conn=1&Sendid=+Sessionnmd+&Recvid=+SessionRecvid);ecvid=+SessionRecvid);Cam.aspxCam.aspx private void Page_Load(object sender,System.EventArgs e)private void Page_Load(object sender,System.EventArgs e)SessionRecvId=Request.QueryStringRecvId SessionRecvId=Request.QueryStringRecvId;meta http-equiv=Content-Type content=text/html;charset=gb2312无标题文档无标题文档body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0object classid=clsid:D27CDB6E-AE6D-11cf-96B8-44553540000200 embed src=SP.swf quality=high pluginspage=type=application/x-shockwave-flash width=220 height=200 SP.swf 的角本stop();stop();client_nc=new NetConnection();client_nc=new NetConnection();/NetConnection.onStatus(para)/NetConnection.onStatus(para)用来监测用来监测 serverserver 返回的信息返回的信息/当当 serverserver 返回的信息时,此处理器被触发返回的信息时,此处理器被触发/参数是一个包含着返回信息的对象,包含着两个固定变量参数是一个包含着返回信息的对象,包含着两个固定变量 levellevel 和和 codecode,该参数名称,该参数名称可随便命名可随便命名client_nc.onStatus=function(info)client_nc.onStatus=function(info)/利用利用 tracetrace 功能将功能将 serverserver 返回的信息可视化返回的信息可视化 trace(Level:+info.level+newline+Code:+info.code);trace(Level:+info.level+newline+Code:+info.code);/连接到连接到 serverserver 上,建立上,建立 rtmprtmp 连接连接/下面写的是相对地址,原因是我的下面写的是相对地址,原因是我的 web serverweb server和和 flash communication serverflash communication server在一台机器上在一台机器上/如果你的如果你的 web serverweb server和和 flash communication serverflash communication server不在一台机器上,只要满不在一台机器上,只要满足两台机器的足两台机器的 ipip 在一个域在一个域/你就可以同样成功建立连接,可以写成你就可以同样成功建立连接,可以写成client_nc.connect(rtmp:/192.168.0.1/record_video);client_nc.connect(rtmp:/192.168.0.1/record_video);/record_video/record_video 是文件夹的名字,该文件夹必须事先存在是文件夹的名字,该文件夹必须事先存在/假设你是按照默认安装的假设你是按照默认安装的 communication servercommunication server,那么,那么 record_videorecord_video文件夹就文件夹就应该放在应该放在/C:Program FilesMacromediaFlash Communication Server/C:Program FilesMacromediaFlash Communication ServerMXflashcomapplicationsMXflashcomapplications目录下面目录下面client_nc.connect(rtmp:/192.168.0.2/record_video);client_nc.connect(rtmp:/192.168.0.2/record_video);/使用使用 SharedObject.getRemoteSharedObject.getRemote方法,创建远程方法,创建远程 SharedObjectSharedObject/myvideo/myvideo是是 SharedObjectSharedObject 文件名称,对应在文件名称,对应在 serverserver 硬盘上的文件是硬盘上的文件是myvideo.fsomyvideo.fso/client_nc.uri/client_nc.uri是一个必要的参数,指向当前是一个必要的参数,指向当前 rtmprtmp 的连接的连接/第三个是可选参数,第三个是可选参数,truetrue 代表将代表将 myvideo.fsomyvideo.fso写入硬盘,写入硬盘,falsefalse、nullnull 或者省略或者省略代表不写入,只作临时存在代表不写入,只作临时存在rec_so=SharedObject.getRemote(myvideo,client_nc.uri,true);rec_so=SharedObject.getRemote(myvideo,client_nc.uri,true);/sharedobject.onSync(para)/sharedobject.onSync(para)用来动态监测用来动态监测 sharedobjectsharedobject 的变化情况的变化情况/每当每当 sharedobjectsharedobject 发生变化时,此处理器被触发发生变化时,此处理器被触发/参数是一个数组,参数是一个数组,记录记录 sharedobject.datasharedobject.data中发生变化的内容,中发生变化的内容,该参数名称可随便命该参数名称可随便命名名/该数组的每个成员都是一个对象,对象又有两个成员该数组的每个成员都是一个对象,对象又有两个成员 codecode 和和 namename/name/name 代表的是发生变化的代表的是发生变化的 sharedobject.datasharedobject.data里面的发生变化的内容里面的发生变化的内容/code/code 代表的是这个内容发生了什么变化,是系统返回信息代表的是这个内容发生了什么变化,是系统返回信息/将将 sharedobjectsharedobject 功能连接到功能连接到 serverserver 上上rec_so.connect(client_nc);rec_so.connect(client_nc);var Recvid;var Recvid;var Sendid;var Sendid;GetId();GetId();function Recv()function Recv()/创建新的创建新的 NetStreamNetStream 流对象,将会用来播放留言信息流对象,将会用来播放留言信息 in_ns=new NetStream(client_nc);in_ns=new NetStream(client_nc);/通过通过 NetStream.playNetStream.play 方法播放方法播放 serverserver 上的上的 flvflv 文件文件 in_ns.play(Recvid);in_ns.play(Recvid);mybox.attachVideo(in_ns);mybox.attachVideo(in_ns);function Send()function Send()this.cam=Camera.get();this.cam=Camera.get();this.mic=Microphone.get();this.mic=Microphone.get();/在在 client_ncclient_nc 连接上,创建连接上,创建 NetStreamNetStream 对象对象 out_ns=new NetStream(client_nc);out_ns=new NetStream(client_nc);/通过通过 NetStream.attachVideoNetStream.attachVideo方法获得摄像头的图像方法获得摄像头的图像 out_ns.attachVideo(this.cam);out_ns.attachVideo(this.cam);/通过通过 NetStream.attachAudioNetStream.attachAudio方法获得麦克风的声音方法获得麦克风的声音 out_ns.attachAudio(this.mic);out_ns.attachAudio(this.mic);out_ns.publish(Sendid,live);out_ns.publish(Sendid,live);function GetId()function GetId()/构造一个新的构造一个新的 LoadVarsLoadVars 对象对象myload=new LoadVars();myload=new LoadVars();/设定设定 myloadmyload 的动作,以便服务器验证的动作,以便服务器验证myload.action=post;myload.action=post;/验证和服务器连接的函数验证和服务器连接的函数myload.onLoad=function(success)myload.onLoad=function(success)/如果和服务器成功连接则如果和服务器成功连接则 if(success)if(success)/如果验证动作成功则如果验证动作成功则 if(this.conn=1)if(this.conn=1)/将返回对象中的将返回对象中的 outputoutput 变量赋值给场景中变量赋值给场景中 varvar 为为 outputoutput 的的 DynamicDynamicTextText 框框 _root.Recvid=this.Recvid;_root.Recvid=this.Recvid;_root.Sendid=this.Sendid;_root.Sendid=this.Sendid;Send();Send();Recv();Recv();else else /如果和服务器连接不成功则返回失败消息,需要检查路径是否正确如果和服务器连接不成功则返回失败消息,需要检查路径是否正确;myload.sendAndLoad(http:/localhost/WEBQQ/SP.aspx,myload,myload.sendAndLoad(http:/localhost/WEBQQ/SP.aspx,myload,post);post);
展开阅读全文