基于flash的视频聊天系统内容摘要:

服务器上的一个方法,然后将 FMS服务器上的方法返回值输出到控制台。 flash 端的开发可以有两种方式实现: Flash 和 Flex。 本文会将这两种方式的实现都给出实例。 首先看看 Flash 里的实现。 启动 Flash CS 开发环境 ,新建立 ActionScript 的 Flash 文件,如下图 : 图 然后在上面新建立的 ActionScript 的 Flash文件上,按 F9 进入动作面板 (输入程序代码的地方 ,当然也可以将代码封装到单独的类文件里 ),如下图 : 图 上图 中已经将通过 Flash 开发连接到 FMS 服务器的代码全部贴出,代码很简单。 NetConnection 这个类在 Flash Player 和 Flash Media Server 应用程序之间或者 Flash Player 和运行 Flash Remoting 的应用程序服务器之间创建双向连接。 通过 NetConnection 建立于 FMS 服务器的连接,然后使用 NetConnection 类的公共方法 connect()通过 RTMP 协议连接到指定的 FMS 服务器上指定的应用,如上图示为连接的 FMS 服务器上名为的 “HelloWorld”的这个应用。 如果对NetConnection 还不熟悉的朋友请先阅读下我的这系列文章的第一篇: FMS3 系列(一 ): FMS 程序连接到 FMS 服务器,随后通过调用 call()方法调用 FMS 服务器上的方法,这里通过调用服务器上提供的 sayHelloWorld()方法。 Responder 类提供了一个对象,该对象在 () 中使用以处理来自与特定操作成功或失败相关的服务器的返回值。 详细见构造 Responder 对象的时候构造方法的参数,一个方法处理操作成功的逻辑,一个方法处理操作失败的逻辑。 OK,完成了上面的 flash 客户端的开发现在就只差 FMS 服务器端的开发了,FMS 服务器理需要有一个通信文件来负责于 flash 客户端的连接交互,通常情况下就是建立一个 的通信文件。 本文中的通信文件的程序代码非常简单,就是接受客户端的连接,然后提供一个客户端调用的方法。 视频聊天系统设计与实 现 方法 该系统主要的功能有: 注册和验证登录 ; 修改密码功能 ; 文本聊天 ; 语音功能 ; 视频功能 ; 用户列表显示 ; 在线人数显示 ; 查看聊天记录; 重新登录和退出功能。 系统流程图为: 图 系统流程图 本论文着重点在于说明如何使用 FLASH 技术实现视频聊天。 而 FLASH 技术要实现视频聊天的功能就需要使用 FMS 技术。 通过 FMS 实现视频时时聊天其实很简单,也就是操作时时流。 如果是单向视频聊天,则两端一边一边为发 布端一边为订阅端,如果是双向视频聊天,则两边都分别是发布端和订阅端。 如果从技术实现上来分析,单向视频聊天就是一边发布流另一边播放流,双向视频聊天则是两边都需要提供两个流,一个负责发布流,一个负责播放流。 在注册 登陆 文字聊天 语音聊天 视频聊天 退出 说专业点就是一个创建流并且发送到服务器的客户端叫发布,一个创建流来接受内容的客户端叫订阅,当同一个客户端同是发布和订阅时,它必须创建两个流,一个是输出流,一个是接受流。 说了这么多下面看看具体是怎么实现的,要实现视频聊天上面分析过,就是一边发布时时视频流一边播放,这同样离不开连接 FMS,代码如下: private function onPublishClick(evt:MouseEvent):void { nc = new NetConnection()。 ( (,onNetStatusHandler)。 } 通过点击按扭连接 (NetConnection)FMS 服务器,然后向 FMS 发布 (publish)视频流,达到视频发布的目的。 这里需要注意一点,在发布方法 publish()中后一参数为 “live”,表示时时视频流。 以 live 的形式发布的流不会在 FMS 里生成 .fla文件,不同于 “record”录制视频流生成 .flv 的视频文件。 private function onNetStatusHandler(evt:NetStatusEvent):void { trace()。 if(==) { ns=new NetStream(nc)。 (,onNetStatusHandler)。 =new CustomClient()。 (cam)。 (mic)。 (,live)。 } } 也可以实现在线视频的录制与回放。 实现方法如下: 使用 Flash/Flex+FMS 实现在线视频录制、视频回放的很简单的。 通过阅读API 文档后基本都可以实现这个功能,本文也意在抛砖引玉,希望对刚入手这块的朋友有所帮助。 首先建立好 Flash(ActionScript )文件,从组件 (可使用 Ctrl+F7 打开 )库中拖 拽相应的组件到 Flash 舞台上,如下图 : 图 界面示例 界面布局好后我们通过程序设置组见的显示文本以及为按扭添加事件监听,新建一个 ActionScript 类文件,编写代码如下: public function PublishPlay():void { =请输入视频文件名 :。 =开始录制。 (,onPublishClick)。 =停止录制。 (,onStopHandler)。 =视频回放。 } 这样我们就可以实现视频的回放功能,对于本系统来说此功能只有在需要保留视频记录时开启即可。 视频模块 代码 本段代码详细的说明了系统视频功能是如何实现的。 package { //导入所需的类 import .*。 import .*。 import .*。 import .*。 import .*。 import .*。 import。 import .*。 import。 import。 import。 public class videoChat extends Sprite { //声明变量 public var IP:String。 public var fmsPath:String。 public var myNC:NetConnection。 public var myNS:NetStream。 private var mySubNS:NetStream。 public var userName:String。 public var mySO:SharedObject。 public var peopleArray:Array。 public var tmpName:String。 public var msg:String。 public var now:Date。 private var myCam:Camera。 private var myMic:Microphone。 //构造函数 public function videoChat() { init()。 startConnect()。 } //初始化 public function init() { //设置所有组件的样式 var myTF:TextFormat = new TextFormat()。 =12。 (textFormat,myTF)。 IP=。 fmsPath= + IP + /videoChat。 userName=guest + int(() * 10000)。 =userName。 =所有人。 now=new Date()。 (,selectChatTo)。 (,getVideo)。 } //开始连接 public function startConnect() { myNC=new NetConnection。 =this。 =。 (,Status)。 (,asyncError)。 (,securityError)。 //开始连接 FMS 服务器,把 userName 一起传给服务器 (fmsPath,userName)。 } public function Status(event:NetStatusEvent):void { switch () { case : +=连接成功 !。 //连接成功后开始创建一个远程共享 对象 setMySO()。 //单击发送按钮时发送聊天内容 (,sendMsgByMouse)。 //按下回车键时发送聊天内容 (,sendMsgByKey)。 //对外发布自己的视频 publishStream()。 break。 case : +=连接失败 !。 break。 case : +=。 break。 } } public function securityError(event:SecurityErrorEvent):void { +=安全性错误 !。 } //创建一个远程共享对象 public function setMySO():void { mySO=(mySO,false)。 (,mySoSync)。 (myNC)。 } //侦听事件 public function asyncError(event:AsyncErrorEvent):void { } //利用远程共享对象创建在线列表 public function mySoSync(e:SyncEvent):void { peopleArray=new Array。 for (var tmp in ) { (tmp)。 } //添加 DataProvider var tmpDP:DataProvider=new DataProvider。 for (var i=0。 i。 i++) { tmpName=peopleArray[i]。 ({label:tmpName})。 } (label)。 //在用户列表顶端加一个 所有人 ({label:所有人 },0)。 =tmpDP。 } //按发送按钮时发送聊天内容 public function sendMsgByKey(event:KeyboardEvent):void { if (==13) { sendMsg()。 } } //按回车键时发送聊天内容 pub。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。