- 浏览: 591334 次
文章分类
- 全部博客 (174)
- Core Java 学习 (6)
- Hibernate 学习 (3)
- Struts 学习 (3)
- Spring 学习 (9)
- EJB 学习 (0)
- 设计模式 (0)
- Oracle 学习 (6)
- JRuby (0)
- PHP (18)
- MySql (7)
- Apache (6)
- Informix (2)
- JSTL (1)
- CSS+HTML (8)
- Ajax (2)
- javaScript (16)
- reverse Ajax (1)
- Discuz (7)
- 网站 (11)
- SEO (5)
- Linux (4)
- ecshop (1)
- 电子商务 (1)
- 文档在线浏览 (18)
- 服务器技术 (10)
- flex (17)
- 用户体验 (1)
- java (1)
- flex+blazeDS (1)
- tomcat (1)
- 开发管理 (1)
最新评论
-
niaoqq1:
真坑爹,全是中文字符,复制全部报错!
<c:forEach 详解 -
jhys7s8jd:
pdf打印机下载http://www.onlinedown.n ...
命令行下转换word文档成PDF -
海豚12315:
flashPaper读取磁盘上的文件路径,
最好是放到某个系统 ...
在线文档阅读实现的解决方案 -
八月约克:
火狐不支持这个东东
Scripting.Dictionary的使用 -
longgol:
有一问:怎么通过flashPaper读取磁盘上的文件路径呢。我 ...
在线文档阅读实现的解决方案
本篇是视频聊天,会议开发实例系列文章的第3篇,该系列所有文章链接如下: 1.工作原理 关于NetStream.publish方法还可以看我上篇文章 要实现视频会议就是使用的“live”这一类型 来看一下原理图,参加会议的用户将自己本地摄像头捕捉到的画面publish到fms,存放在fms端userList这个集合对象中,集合中存放的是每个用户名也就是他们发布视频的名字。每当用新用户加入或者退出会议的时候,fms就把这个userList广播给每个还在线的用户。用户取得userList只需播放其他几个用户的视频即可。怎么样原理很简单吧! 2.准备工作 3.开始代码 asc文件中有2个重要的类: Application类有几个重要事件如下: Application类有几个重要方法如下: Client类有1重要方法如下: 4.先编写asc文件,打开写字板,键入下面代码,并保存为test_video2.asc,然后copy此文件到test_video2文件夹(asc文件要求和文件夹同名或者叫main.asc) application.onAppStart=function() application.onConnect = function(currentClient) application.onDisconnect=function(currentClient) 代码说明: 6.在主mxml中拖动控件,界面如下: 7.导入包和定义变量如下: 代码说明: 8.creationComplete="init()",页面初始化代码 private function netStatusHandler(evt:NetStatusEvent):void 9.实现按钮事件 private function communicateStataHandler(str:String):void private function outMyVideo():void 10.showServerMsg方法实现 11.playOtherVideo方法实现: 12.运行程序,图片如下,其中有一人没视频摄像头 13.代码下载 提供代码是为了互相学习,一起探讨!请大家多交流!
http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#sp
NetStream.publish方法的应用
publish () 方法:将音频流、视频流和文本消息流从客户端发送到 Flash Media Server,并可选择在传输期间录制该流。 此方法仅供指定的流的发布者使用。
第1个参数:标识该流的字符串。
第2个参数:指定如何发布该流的字符串。 有效值为“record”、“append”和“live”。 默认值为“live”。 (这3个参数区别如下:)
如果传递“record”,Flash Player 将发布并录制实时数据,同时将录制的数据保存到名称与传递给 name 参数的值相匹配的新文件中。 该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果该文件存在,则覆盖该文件。
如果传递“append”,Flash Player 将发布并录制实时数据,同时将录制的数据附加到名称与传递给 name 参数的值相匹配的文件中,该文件存储在服务器上包含服务器应用程序的目录的子目录中。如果未找到与 name 参数相匹配的文件,则创建一个文件。
如果省略此参数或传递“live”,则 Flash Player 将发布实时数据而不进行录制。 如果存在名称与传递给 name 参数的值相匹配的文件,则删除它。
http://www.cnblogs.com/aierong/archive/2009/01/10/flex_fms_video_start.html
在fms安装目录下的application中,新建一个文件夹test_video2,然后启动fms服务器
这次代码分2部分:服务器端的asc文件和客户端
Application类:Application类包含有关一个Flash Media Server应用程序实例的信息,它会一直维持这些信息直到这个应用程序实例被卸载。
Client类:Client类让你处理连接到一个Flash Media Server应用程序实例的每一个用户或说client。
Application.onAppStart 当这个应用程序被服务器装载时调用。
Application.onAppStop 当这个应用程序被服务器卸载时调用。
Application.onConnect 当一个客户机连接到这个应用程序时调用。
Application.onDisconnect 当一个客户机从这个应用程序断开连接时调用。
Application.acceptConnection() 接受一个来自客户机的至一个应用程序的连接。
Application.broadcastMsg() 向所有连接的客户机广播一条消息。
Application.disconnect() 从服务器断开一个客户机的连接。
Application.rejectConnection() 拒绝至一个应用程序的连接。
Client.call() 在Flash客户机上异步的执行一个方法,并把值从Flash客户机返回到服务器。
userList=[];
{
trace("fms服务器启动......");
}
{
application.acceptConnection(currentClient);
if (userList.length>=3)
{
currentClient.call("showServerMsg",null,"已经达到最大用户数");
application.rejectConnection(currentClient);
}
else
{
currentClient.communicateServer= function(value)
{
currentClient.username=value;
trace(currentClient.username+"加入聊天室");
userList.push(value);
trace("当前用户列表"+userList);
application.broadcastMsg("playOtherVideo",userList);
}
}
}
{
trace("用户"+currentClient.username+"离开聊天室");
for(j=0;j<userList.length;j++)
{
if ( userList[j]==currentClient.username )
{
userList.splice(j,1);
}
}
trace("当前用户列表"+userList);
application.broadcastMsg("playOtherVideo",userList);
}
(1)application.broadcastMsg ("客户端方法名",参数..);是asc中一个比较重要的方法,他的作用是向所有连接着的客户端进行广播,调用客户端的函数。这个方法相当于循环遍历Application.clients数组并在每一个独立的客户机上调用Client.call(),但这个方法的效率更高(尤其是当连接的客户机数量很大时)。唯一的不同是当你调用broadcastMsg()时你不能指定一个响应对象,除此以外,两种语法是一样的。
(2)userList.splice(a,b)这个函数,它的作用是从a位置开始移除数组中的b个元素(asc用的是as1语法)
(3)代码中做了限制,只允许最多3人连接fms
5.打开Fb3,创建一个项目
具体代码如下:
<mx:Label x="10" y="10" text="你的画面"/>
<mx:VideoDisplay x="10" y="38" width="120" height="90" id="vd_myVideo"/>
<mx:TextInput x="152" y="38" text="输入你的名字" id="txt_username" width="116" focusIn="txt_username.text=''"/>
<mx:Button x="288" y="38" label="进入聊天室" id="btn_start"/>
<mx:VBox x="10" y="161" width="120" id="vb_otherVideo">
</mx:VBox>
import mx.controls.Label;
import mx.controls.Alert;
private var netConnection:NetConnection;
private var outNetStream:NetStream;
private var camera:Camera;
private var microphone:Microphone;
private var responder:Responder;
private var appServer:String="rtmp://192.168.0.249/test_video2";
private var username:String="";
outNetStream就是你要发布给fms的视频流,通俗的说就是你的画面
responder 如果client端调用server端as1代码中的某个方法需要有回调函数的话就要定义这个responder,后面会有具体说明
username 每个用户的用户名,也就是发布时候给视频取得名字
private function init():void
{
netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
netConnection.connect(appServer);
netConnection.client=this;
initMedia();
}
private function initMedia():void
{
camera = Camera.getCamera();
camera.setMode(120,90,15);
camera.setQuality(0,90);
vd_myVideo.attachCamera(camera);
microphone=Microphone.getMicrophone();
}
{
trace(evt.info.code);
if ( evt.info.code=="NetConnection.Connect.Success" )
{
btn_start.addEventListener(MouseEvent.CLICK,startCommunicate);
}
else
{
Alert.show("fms连接失败"+evt.info.code);
}
}
代码比较简单,不明白可以看我上篇
http://www.cnblogs.com/aierong/archive/2009/01/10/flex_fms_video_start.html
private function startCommunicate(evt:MouseEvent):void
{
username=txt_username.text;
responder=new Responder(communicateStataHandler);
netConnection.call("communicateServer",responder,username);
}
{
outMyVideo();
btn_start.enabled=false;
}
{
/* 发布视频 */
outNetStream = new NetStream(netConnection);
outNetStream.attachCamera(camera);
outNetStream.attachAudio(microphone);
outNetStream.publish(username,"live");
}
代码说明:
Responder 类提供了一个对象,该对象在 NetConnection.call() 中使用以处理来自与特定操作成功或失败相关的服务器的返回值。
netConnection.call调用asc文件中的communicateServer,调用成功后,回调communicateStataHandler方法
public function showServerMsg(msg:String):void
{
Alert.show(msg);
}
代码说明:
供asc文件中调用
public function playOtherVideo(newUserList:Array):void
{
vb_otherVideo.removeAllChildren();
for(var i:int=0;i<newUserList.length;i++)
{
if ( newUserList[i]!=username )
{
var vd:VideoDisplay = new VideoDisplay();
var video:Video = new Video();
video.width=120;
video.height=90;
var inNetStream:NetStream= new NetStream(netConnection);
video.attachNetStream(inNetStream);
inNetStream.play(newUserList[i]);
var label:Label= new Label();
label.text=newUserList[i]+"的画面";
vd.addChild(video);
vd.width=120;
vd.height=90;
vb_otherVideo.addChild(label);
vb_otherVideo.addChild(vd);
}
}
}
代码说明:
asc文件中application.broadcastMsg方法调用,向所有连接的客户机广播
http://files.cnblogs.com/aierong/Video2.rar
您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!
1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!
2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!
发表评论
-
图片遮罩
2011-11-25 18:03 1163<mx:Canvas width="10 ... -
Flex:使用ArrayCollection过滤Tree
2011-11-16 14:22 1430Flex中的 Tree 是很难被过滤的,因为它们包 ... -
datagrid中滚动条问题
2011-11-14 18:26 3687经常有人在看了前面写的《Flex实现多文 ... -
flex 弹出菜单
2011-11-04 14:38 1232<?xml version="1.0" ... -
AIR管理文件关联, 指定文件默认打开方式
2011-10-30 17:50 2317参考:http://help.adobe.com/zh_CN/ ... -
如何区分不同的订阅者。以便实现个性化订阅。
2011-10-28 04:12 1603参考文章 http://hi.baidu.com/wos ... -
在messaging服务中的服务端的一些属性的说明
2011-10-27 03:29 1122Subscription-timeout-minutes:在这 ... -
Flex事件冒泡机制
2011-09-28 23:22 2765在网上浏览了几篇文章,大体总结了一下,简单说明如下: 事 ... -
Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用
2011-09-26 15:27 1060现在说说Module,这篇教程代码不是最重要的,怎么样合理的使 ... -
12条有用的Flex代码
2011-09-19 21:46 10521.复制内容到系统剪贴板 System.setClipbo ... -
Flex中的 for in 与 for each in
2011-09-12 19:07 1192for...in循环中的迭代变量是对象中的键名(Flex中 ... -
Flex AIR)创建“不规则形状”的Air透明窗体(二)--使用Flex SDK4.5.1
2011-09-10 15:53 2456在此之前,我曾写过一篇关于《创建“不规则形状”的Air透明 ... -
Flex Application 初始化顺序
2011-09-08 16:12 1469Flex应用程序共由两帧组成,第1帧为preloader部分, ... -
Adobe Flash Builder的强大功能--移动设备控制桌面Apps
2011-09-08 14:29 1014这个视频中,Adobe平台技术经理Tomas Krcha将会给 ... -
利用AIR的ServerSocket类让 AIR 做socket服务器
2011-08-30 16:13 5859新的air sdk 新增了 ServerSocket类, ... -
Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
2011-08-27 13:59 1098本章主要总结数据库的插入,删除,修改,以及语句参数的使用本 ...
相关推荐
总结来说,使用FMS3和Flex构建在线多人视频会议系统,需要掌握音视频处理、网络通信、用户界面设计等多个方面的技术。有了这个教程及源代码,开发者可以深入学习并实践这一过程,为构建自己的视频会议平台打下坚实...
总的来说,通过Flex和FMS3的结合,我们可以构建出功能完善的在线多人视频会议和视频聊天系统。这个过程中,不仅需要扎实的编程基础,还需要对音视频处理、网络通信和服务器管理有深入的理解。提供的"Video2"文件可能...
标题中的“免费多人视频会议功能加强版本(Fms3和Flex开发(附源码))”指的是一个基于Fms3(Flash Media Server 3)和Flex技术开发的多人视频会议系统,该系统不仅提供基本的视频交流功能,还进行了性能优化和功能增强...
【FMS多人视频会议系统】是一个利用Flash Media Server (FMS) 技术构建的高效、稳定的多人在线视频交流平台。这个系统的核心是FMS,它是由Adobe开发的一款服务器软件,专门用于实时流媒体处理,支持音频、视频的直播...
《FMS视频会议源代码详解》 ...总的来说,FMS视频会议源代码是研究实时多媒体通信和远程协作系统的重要参考,通过深入学习,我们可以了解Web音视频传输的底层机制,为开发更高效、更可靠的视频会议应用打下坚实基础。
FMS3特别适用于开发基于Flash和Flex的应用,因为这两个技术平台可以无缝集成FMS,创建出具有高质量音视频效果的实时通信应用。 **实时视频聊天的技术原理** 1. **RTMP协议**:RTMP是实时消息协议,用于在客户端(如...
Flex视频会议系统是一种基于Adobe Flex技术构建的在线交互式沟通平台,主要利用FMS(Flash Media Server)服务器作为后台支持,提供高效、稳定的音视频通信服务。Flex是ActionScript 3.0的一个开发框架,它使得...
Flex和FMS3是构建实时互动应用程序的强大工具,尤其适合创建在线聊天室这样的实时通信平台。这个源码和文档集合提供了详细的步骤和技术说明,帮助开发者理解如何利用这些技术实现一个功能完备的聊天室。 Flex是一种...
本文将详细介绍如何利用FMS服务器(Flash Media Server)和Flex技术实现在线视频聊天功能。FMS服务器是一种强大的实时流媒体服务器,它支持多种实时通信协议,包括RTMP(Real-Time Messaging Protocol),使得视频和...
【标题】"简易聊天室flash多人聊天 FMS实现"揭示了这个项目的核心是构建一个基于Flash的多人在线聊天系统,采用FMS(Flash Media Server)作为后台技术来实现实时的通信功能。Flash是一种广泛应用于网页上的多媒体...
通过研究并实践这个“FMS3.0实现视频会议”的项目,你可以掌握Flex和FMS3.0的核心特性,理解实时多媒体通信的原理,这对于进一步深入学习WebRTC、互动直播、在线教育等领域都大有裨益。同时,这个项目也可以作为开发...
描述中提到的“多人会议视频 支持多人同时在线视频语音可使用于远程网络会议等”,表明这个系统或应用具有实时音频和视频通信的能力,允许多用户同时参与,非常适合远程协作和会议。这种功能在现代工作环境中尤为...
【fms 视频会议】是一种基于Adobe Flash Media Server (FMS) 技术实现的在线视频交流系统。FMS是Adobe公司推出的一款强大的流媒体服务器软件,它能够支持实时的音频、视频通信以及数据共享功能,广泛应用于在线直播...
4. **实时通信**:为了实现视频聊天,FMS支持多人视频会议功能,允许多个用户同时进行视频通话。通过服务器的多路复用和流分发,可以将一个用户发送的视频流分发给其他用户,实现群聊。 5. **安全性与优化**:FMS...
总的来说,这个“fms多人聊天”项目展示了如何利用Flash Media Server和ActionScript 3技术来构建一个实时的、多人参与的在线聊天环境,结合了文本、音频和视频等多种通信方式。这样的应用在教育、娱乐、协作等多个...
Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。
【FMS 视频会议源代码】是一款基于Adobe Flash Media Server (FMS) 开发的视频会议系统,它为用户提供了一种实时、交互式的在线沟通平台。FMS 是Adobe公司的服务器端流媒体技术,能够处理音频、视频以及数据的实时...
Flex FMS(Flash Media ...通过这个实例,开发者可以学习到如何使用Flex和FMS创建实时的视频应用,这对开发互动式在线教育、远程会议、直播服务等具有重要意义。同时,了解JMS的使用也能拓宽对分布式系统设计的理解。
标题"Fms.rar_flex_flex and fms_fms_fms rtmp_fms flex"和描述中的关键词揭示了这个压缩包包含的是与Adobe Flex和Flash Media Server(FMS)相关的项目资源,主要用于创建一个实时通信应用,例如聊天室。Flex是一种...