- 浏览: 1453859 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
很多交友网站都具体在线视频认证能,如51.com。参考它的认证流程,基于Flex结合Flash Media Server开发一个自己的认证功能。在编写代码这前我们先来了解我们要实现的功能,见效果图:
(1)客户视频的截图
下面我们将分步讲解具体实现过程:
(一)客户视频截图:
常来访问我的博客且使用Flex的朋友也许会发现,以前我发布的一篇《Flex视频截图并通过WebService(C#)保存》。您猜对了,正是用这种方法实现客户视频载图,在些就不再重述了。
(二)添加FMS应用
安装Flash Midea Server 2,在安装路径的Flash Midea Server 2\applications下建立test文夹件(文件夹名称自己定义),重新启动FMS。
(三)客户视频认证准备
主要实现FMS在线共享视频和接收FMS传送的认证结果信息。详见代码:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” creationComplete=”initApp()” width=”214″ height=”214″>
<mx:Style>
Alert{font-size:12px;}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.controls.Alert;
import flash.net.navigateToURL;
//由于fms使用的是amf0而flex3中的as3默认使用的是amf3.所以要让flex使用AFM0
NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;
private static const DEFAULT_WIDTH:Number = 160; //摄像头显示高度
private static const DEFAULT_HEIGHT:Number = 120; //摄像头显示高度
private var m_camera:Camera; //定义一个摄像头
private var m_microphone:Microphone; //定义一个麦克风
private var m_localVideo:Video; //定义一个本地视频
private var m_netConnection:NetConnection; //定认一个网络连接
private var m_outStream:NetStream; //定义一个输出流
private var m_fmsServer:String; //视频服务器地址
private var m_userId:String; //用户ID
private function initApp():void
{
m_fmsServer = "rtmp://192.168.0.107/test";
//m_fmsServer = Application.application.parameters.videoserver;
m_userId = "1054";
//m_userId = Application.application.parameters.userid;
initCamera();
}
//初始化摄像头
private function initCamera():void
{
m_camera = Camera.getCamera();
if(m_camera != null)
{
m_camera.addEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
m_camera.setMode(DEFAULT_WIDTH,DEFAULT_HEIGHT,30);
m_localVideo = new Video();
m_localVideo.width = DEFAULT_WIDTH;
m_localVideo.height = DEFAULT_HEIGHT;
m_localVideo.attachCamera(m_camera);
t_vd_Video.addChild(m_localVideo);
}
else
{
Alert.show("没有找到摄像头,是否重新查找。","提示",Alert.OK|Alert.NO,this,_initCamera);
return;
}
}
//连接网络
private function checkNetConnection():void
{
m_netConnection = new NetConnection();
m_netConnection.addEventListener(NetStatusEvent.NET_STATUS,__onNetStatusHandler);
m_netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR,__onSecurityErrorHandler);
m_netConnection.connect(m_fmsServer,m_userId);
m_netConnection.client = this;
}
//共享视频流
private function shareVideoStreame():void
{
m_outStream = new NetStream(m_netConnection);
m_outStream.attachCamera(m_camera);
m_outStream.attachAudio(m_microphone);
m_outStream.publish(m_userId,"live");
}
//检测掇像头权限事件
private function __onCameraStatusHandler(event:StatusEvent):void
{
if(!m_camera.muted)
{
checkNetConnection();
}else
{
Alert.show("无法接连接到活动摄像头,是否重新检测。","提示",Alert.OK|Alert.NO,this,_initCamera);
}
m_camera.removeEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
}
//当摄像头不存在,或连接不正常时重新获取
private function _initCamera(event:CloseEvent):void
{
if(event.detail == Alert.OK)
{
initCamera();
}
}
//网络连接事件
//如果网络连接成功,开始共享视频
private function __onNetStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetConnection.Connect.Success":
shareVideoStreame();
t_lbl_Info.visible = true;
break;
case "NetConnection.Connect.Failed":
Alert.show("网络连接失败,请稍后再试。","提示",Alert.OK);
break;
case "NetConnection.Connect.Rejected":
Alert.show("遭到服务器拒绝,请稍后再试。","提示",Alert.OK);
break;
}
}
private function __onSecurityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler:" + event);
}
//接收服务端IM信息
public function AcceptServerMessage(m_result:String):void
{
t_lbl_Info.text = m_result;
}
//接收验证结果信息
public function ServerValidateMessage(m_isPass:Boolean,m_result:String):void
{
if(m_isPass)
{
Alert.show(m_result,"提示",Alert.OK,this,validateSuccessHandler);
}
else
{
Alert.show(m_result,"提示",Alert.OK|Alert.NO,this,validateFaildHandler);
}
m_netConnection.close();
}
//视频验证成功确认事件
private function validateSuccessHandler(event:CloseEvent):void
{
if(event.detail == Alert.OK)
{
//trace("页面转向");
var m_url:URLRequest = new URLRequest("http://www.soave.cn");
navigateToURL(m_url,"_self");
}
}
//视频验证失败确认事件
private function validateFaildHandler(event:CloseEvent):void
{
var m_url:URLRequest;
if(event.detail == Alert.OK)
{
//trace("页面转向,再次进行认证。");
m_url = new URLRequest("http://www.soave.cn");
navigateToURL(m_url,"_self");
}
else
{
//trace("页面转向,取消认证。");
m_url = new URLRequest("http://www.soave.cn");
navigateToURL(m_url,"_self");
}
}
]]>
</mx:Script>
<mx:Panel x=”16″ y=”16″ width=”180″ height=”162″ layout=”absolute” title=”在线认证视频” fontSize=”12″>
<mx:VideoDisplay id=”t_vd_Video” width=”160″ height=”120″/>
</mx:Panel>
<mx:Label id=”t_lbl_Info” x=”14″ y=”184″ text=”视频认证就绪” fontSize=”12″ color=”#FFFFFF”/>
</mx:Application>
checkNetConnection()连接网络方法中
程序代码
m_netConnection.client = this;
定义FMS回调的客户端,当FMS中的main.asc需要调用客户端中的方法时,一定要指定。
shareVideoStreame()共享视频方法中
程序代码
m_outStream.publish(m_userId,”live”);
live表示共享视频流,而不保存,当为record时,则保存视频。
AcceptServerMessage (m_result:String)和ServerValidateMessage(m_isPass:Boolean,m_result: String)方法都是在FMS中的main.asc调用。后面讲解到main.asc时,我们再详细解释。
(四)定义服务端脚本main.asc
新建一个main.asc,保存在安装路径的Flash Midea Server 2\applications\test中。
main.asc代码:
程序代码
application.onAppStart = function()
{
userList_so = SharedObject.get(”userList”,”false”);
}
application.onConnect = function(client,userID)
{
client.userid = userID;
userList_so.setProperty (userID,userID);
return true;
}
application.onDisconnect = function(client)
{
userList_so.setProperty(client.userid,null);
}
Client.prototype.SendMessage = function(userID,sendMsg)
{
for(var i=0;i<application.clients.length;i++)
{
if(application.clients[i].userid == userID)
{
application.clients[i].call(”AcceptServerMessage”,null,sendMsg);
}
}
return “信息发送成功!”;
}
Client.prototype.ValidateUser = function(userID,isPass,sendMsg)
{
for(var i=0;i<application.clients.length;i++)
{
if(application.clients[i].userid == userID)
{
application.clients[i].call(”ServerValidateMessage”,null,isPass,sendMsg);
}
}
return “验证结果信息发送成功!”;
}
Client.prototype.DeleteInvalidUser = function(userID)
{
for(var i=0;i<application.clients.length;i++)
{
if(application.clients[i].userid == userID)
{
application.clearStreams(application.clients[i]);
application.disconnect(application.clients[i]);
}
}
return ”成功踢出无效连接!”;
}
application.onAppStart和application.onConnect方法定义SharedObject对象userList_so,userList_so保存着所有连接进来的客户端信息。
SendMessage 方法向客户端发送即时信息,此方法在后台认证操作管理中调用。参数userID表示要发送的客户端ID,参数sendMsg表示发送的信息内容。
ValidateUser 方法向后台认证操作管理中已进行认证操作的客户端传送认证结果信息,调用客户端准备程序中的ServerValidateMessage方法,参数 userID表示要发送的客户端ID,isPass表示是否通过认证,true表示已通过,false表示被拒绝,参数sendMsg表示发送的信息内容。
DeleteInvalidUser 方法踢除无效的连接。参数userID表示要发送的客户端ID。
(五)后台认证操作管理
主要实现连接选定的客户端共享视频和截图、显示FMS的连接用户列表、传送即时信息到指定的客户端、踢掉连接到FMS的某个用户等。详见代码:
程序代码
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” width=”394″ height=”488″ creationComplete=”initApp()”>
<mx:Style>
Panel,Button,TextArea{font-size:12px;}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
//由于fms使用的是amf0而flex3中的as3默认使用的是amf3.所以要让flex使用AFM0
NetConnection.defaultObjectEncoding= flash.net.ObjectEncoding.AMF0;
SharedObject.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
private static const VIDEO_WIDTH:int = 160; //视频默认宽度
private static const VIDEO_HEIGHT:int = 120; //视频默认高度
private var videoServer:String; //视频服务器地址
[Bindable]
private var videoName:String; //视频名称
private var netConn:NetConnection;
private var inStream:NetStream;
private var sharedObject:SharedObject;
private var callResponser:Responder;
[Bindable]
private var isPass:Boolean; //用户是否通过认证标识
private function initApp():void
{
videoServer = “rtmp://192.168.0.107/test”;
//videoServer = Application.application.parameters.videoserver;
callResponser = new Responder(GetCallResult);
CheckNetConnection();
}
//检测网络连接
private function CheckNetConnection():void
{
netConn = new NetConnection();
netConn.addEventListener(NetStatusEvent.NET_STATUS,__onStatusHandler);
netConn.addEventListener(SecurityErrorEvent.SECURITY_ERROR,__onSecurityErrorHandler);
netConn.connect(videoServer);
netConn.client = this;
}
//获取视频流
private function GetVideoStream():void
{
inStream = new NetStream(netConn);
inStream.addEventListener(NetStatusEvent.NET_STATUS,__onStatusHandler);
inStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,__onAsyncErrorHandler);
//定义onMetaData,获取视频相关数据
var m_CustomerClient:Object = new Object()
m_CustomerClient.onMetaData = function(metadata:Object):void{}
inStream.client = m_CustomerClient;
var m_Video:Video = new Video();
m_Video.attachNetStream(inStream);
m_Video.width = VIDEO_WIDTH;
m_Video.height = VIDEO_HEIGHT;
inStream.play(videoName);
t_vd_Video.addChild(m_Video);
}
//获取在线认证用户列表共享对像
private function GetUserListSharedObject():void
{
//netConn.call(”UserListFromClient”,callResponser);
sharedObject = SharedObject.getRemote(”userList”,netConn.uri,false);
sharedObject.addEventListener(SyncEvent.SYNC,__onSyncHandler);
sharedObject.connect(netConn);
t_list_User.dataProvider = new ArrayCollection();
}
//获取在线认证用户列表
private function GetUserList():void
{
var m_ac:ArrayCollection = t_list_User.dataProvider as ArrayCollection;
m_ac.removeAll();
for(var i:String in sharedObject.data)
{
var item:Object = {userid:i,data:i};
m_ac.addItem(item);
}
t_list_User.dataProvider = m_ac;
//当前用户通过认证后自动显示下一用户
if(m_ac.length > 0)
{
videoName = m_ac[0].data;
t_ta_AcceptText.text = “”;
GetUserPicture();
GetVideoStream();
}
else
{
videoName = null;
}
}
//认证通过和认证拒绝按钮事件
private function SetUserPass():void
{
if(videoName != null)
{
//从SharedObject中删除该用户并发送认证结果信息
var m_Msg:String = “”;
if(isPass)
{
m_Msg = “恭喜您,通过视频认证。”;
}
else
{
m_Msg = “您没有通过视频认证,\n是否重新认证?”;
}
netConn.call(”ValidateUser”,callResponser,videoName,isPass,m_Msg);
}
}
//删除无效的连接用户
private function DeleteInvalidUser():void
{
if(videoName != null)
{
netConn.call(”DeleteInvalidUser”,callResponser,videoName);
}
}
//当点击t_list_User中的用户时,获取该用户的视频和图片
private function GetUserVideoAndImg():void
{
videoName=t_list_User.selectedItem.data;
t_btn_Send.enabled = true;
t_ta_AcceptText.text = “”;
GetUserPicture();
GetVideoStream();
}
//获取用户视频截图
private function GetUserPicture():void
{
t_img_Picture.source = “xxxxx.jpg”;
//可以自定义方法获取视频截图
}
//网络连接事件
private function __onStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case “NetConnection.Connect.Success”:
GetUserListSharedObject();
break;
case “NetConnection.Connect.Failed”:
Alert.show(”网络连接失败,请稍后重试。”,”提示”,Alert.OK);
break;
case “NetStream.Play.StreamNotFound”:
Alert.show(”视频文件不存在,请稍后重试。”,”提示”,Alert.OK);
break;
}
}
private function __onSecurityErrorHandler(event:SecurityErrorEvent):void
{
Alert.show(”服务器发生错误:”+ event.text,”提示”,Alert.OK);
}
//共享对象改变事件
//当共享对角改变时,重新获取用户列表
private function __onSyncHandler(event:SyncEvent):void
{
GetUserList();
}
private function __onAsyncErrorHandler(event:AsyncErrorEvent):void
{
trace(event.error.message);
}
//发送聊天信息按钮事件
//向服务器传送信息,与当前正在视频验证的用户通讯
private function SendMessage():void
{
if(t_ta_SendText.text != “”)
{
if(videoName != null)
{
netConn.call(”SendMessage”,callResponser,videoName,t_ta_SendText.text);
}
t_ta_AcceptText.text += “我:” + t_ta_SendText.text + “\n”;
t_ta_SendText.text = “”;
focusManager.setFocus(t_ta_SendText);
}
}
//与FMS服务器通讯结果
private function GetCallResult(m_Result:String):void
{
trace(”从服务器返回的信息:” + m_Result);
}
]]>
</mx:Script>
<mx:Panel x=”10″ y=”10″ width=”180″ height=”200″ layout=”absolute” title=”{videoName}认证视频”>
<mx:VideoDisplay id=”t_vd_Video” width=”160″ height=”120″/>
<mx:ControlBar horizontalAlign=”right”>
<mx:Button id=”t_btn_Pass” label=”通过认证” click=”{isPass = true;SetUserPass();}”/>
<mx:Button id=”t_btn_Refuse” label=”拒绝” click=”{isPass = false;SetUserPass();}”/>
</mx:ControlBar>
</mx:Panel>
<mx:Panel x=”204″ y=”10″ width=”180″ height=”200″ layout=”absolute” title=”{videoName}认证截图”>
<mx:Image id=”t_img_Picture” width=”160″ height=”120″/>
<mx:ControlBar horizontalAlign=”right”>
<mx:Button id=”t_btn_GetPicture” label=”重新获取” click=”GetUserPicture()” />
</mx:ControlBar>
</mx:Panel>
<mx:Canvas x=”10″ y=”218″>
<mx:List id=”t_list_User” x=”0″ y=”0″ width=”180″ height=”228″ labelField=”userid” itemClick=”GetUserVideoAndImg()”></mx:List>
<mx:Button id=”t_btn_Disconn” x=”0″ y=”236″ label=”踢出” click=”DeleteInvalidUser()”/>
<mx:Button id=”t_btn_UserList” x=”76″ y=”236″ label=”刷新用户列表” click=”GetUserList()”/>
</mx:Canvas>
<mx:Canvas x=”204″ y=”218″>
<mx:TextArea id=”t_ta_AcceptText” x=”0″ y=”0″ width=”180″ height=”182″ editable=”false”/>
<mx:TextArea id=”t_ta_SendText” x=”0″ y=”190″ width=”180″ height=”38″/>
<mx:Button id=”t_btn_Send” x=”128″ y=”235″ label=”发送” enabled=”false” click=”SendMessage()”/>
</mx:Canvas>
</mx:Application>
发表评论
-
控制连接数量和密码保护-flashcom教程 密码保护
2008-10-30 14:03 1239学习flashcom+学习英语(烂到死),无任何目的,本篇仅 ... -
AMF3 + AS 3.0 + ASP.NET 完整配置过程及源文件
2008-09-11 16:04 3583AMF3 + AS 3.0 + ASP.NET 完整配置过程及 ... -
flex 3 + .net开发flash Remoting四[完整代码
2008-08-28 16:11 2215一. 相关说明: 本篇将呈现完整的Flash Remot ... -
FMS Client AS 自訂類別物件傳遞
2008-08-27 15:04 1061透過與 FMS 連線,可以共享 SharedObject 物件 ... -
FMS 常常会用到 3个Call 和3个Send
2008-08-27 14:51 2199FMS 常常会用到 3个Call 和3个Send 关于Flas ... -
flex as3 fms相关的资料(转)
2008-08-27 14:36 1704FMS.rar FMS系列教程http://www.fs2 ... -
视频类
2008-08-27 09:21 1860Flash Player作为流媒体的表现形式之一,视频编码是其 ... -
一步一步学Flash Media Server
2008-08-26 18:03 4359从今天起,我们来学习一下 Flash Media Server ... -
再说说onSync,SharedObject
2008-08-26 16:44 1606* 最多人不懂的就是:那个list参数看代码: my_rso ... -
视频监控软件(2)---异步录像
2008-08-26 16:10 1386不好意思,让大家久等了!今天我要实现的一个功能是异步录像!先讲 ... -
视频监控软件(1)---FMS视频流共享
2008-08-26 16:07 2721呵呵!临近毕业了,本人选择的毕业设计题目是(基于B/S模式的 ... -
flash fms WebService 交互过程
2008-08-26 16:01 1734//flash客户端call服务器端的方法,服务器端调用WS的 ... -
游戏开发常用FMS类
2008-08-26 15:51 1457游戏开发常用FMS类 ... -
FLEX提高篇--------ShareObject对象详解
2008-08-26 14:23 1128ShareObject,顾名思义共享对象,而通常意义上的共享, ... -
客户端呼叫Flash Medis Server3服务端入门
2008-08-26 14:02 1474当你不仅仅只想用FLEX来做纯业务数据的管理时,或者当你的项目 ... -
FMS两种方式实现简易聊天室
2008-08-26 14:01 1689原理和代码都很简单,没什么好说的. 一:利用ShareOb ... -
FLEX提高篇---------FMS简易聊天室加强版
2008-08-26 13:37 1836今天写了下简易聊天室的加强版 , 其实功能也十分有很 , 不过 ... -
Flex连接FMS实现用户列表(使用SharedObject)
2008-08-26 13:33 39901.先在FMS的安装目录中添加自己的应用(例如我的目录D:\M ... -
FMS 教程(SharedObject)用户列表
2008-08-26 13:32 2939FMS实现用户列表,一般都是利用List组件,和SharedO ... -
Fms教程7 理解共享对象
2008-08-26 13:13 1925理解共享对象 共享对象 ...
相关推荐
Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。
Flex是一种开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA),而FMS是Adobe提供的服务器软件,支持实时流媒体和数据传输,尤其适用于在线视频、音频流和实时交互应用。 1. **Adobe Flex**: Flex是...
Flex+FMS实现视频直播源码是一种基于Adobe Flex和Flash Media Server (FMS)技术的视频直播解决方案。这个项目提供了一个简单示例,演示了如何利用Flex进行摄像头和音频的捕获与录制,以及如何将这些内容实时推送到...
【标签】"flex flex_fms fms site:www.pudn.com" 强调了Flex与FMS的结合使用,以及资源可能来源于网络平台www.pudn.com,这是一个提供编程资源共享的网站。 在【压缩包子文件的文件名称列表】中: 1. **FMS广播...
Flex FMS(Flash Media ...通过这个实例,开发者可以学习到如何使用Flex和FMS创建实时的视频应用,这对开发互动式在线教育、远程会议、直播服务等具有重要意义。同时,了解JMS的使用也能拓宽对分布式系统设计的理解。
FMS3特别适用于开发基于Flash和Flex的应用,因为这两个技术平台可以无缝集成FMS,创建出具有高质量音视频效果的实时通信应用。 **实时视频聊天的技术原理** 1. **RTMP协议**:RTMP是实时消息协议,用于在客户端(如...
Flex和FMS3是构建实时互动应用程序的强大工具,尤其适合创建在线聊天室这样的实时通信平台。这个源码和文档集合提供了详细的步骤和技术说明,帮助开发者理解如何利用这些技术实现一个功能完备的聊天室。 Flex是一种...
在IT行业中,流媒体技术是实现在线视频和音频传输的关键技术之一,而Adobe的Flash Media Server(FMS)就是一种广泛使用的流媒体服务器解决方案。本文将深入探讨如何利用FMS作为流媒体服务器,进行实时通信视频聊天...
总的来说,通过Flex和FMS3的结合,我们可以构建出功能完善的在线多人视频会议和视频聊天系统。这个过程中,不仅需要扎实的编程基础,还需要对音视频处理、网络通信和服务器管理有深入的理解。提供的"Video2"文件可能...
【标题】中的“通过FMS实现时时视频聊天(Flash|Flex)源码”是指使用Adobe的Flash Media Server (FMS)技术,结合Flash和Flex这两种编程语言,开发出一款能够实现实时视频通信的应用程序。这个标题暗示了我们将在...
总结来说,使用FMS3和Flex构建在线多人视频会议系统,需要掌握音视频处理、网络通信、用户界面设计等多个方面的技术。有了这个教程及源代码,开发者可以深入学习并实践这一过程,为构建自己的视频会议平台打下坚实...
通过研究并实践这个“FMS3.0实现视频会议”的项目,你可以掌握Flex和FMS3.0的核心特性,理解实时多媒体通信的原理,这对于进一步深入学习WebRTC、互动直播、在线教育等领域都大有裨益。同时,这个项目也可以作为开发...
本文将详细阐述如何使用Flex连接到FMS,并实现视频发送功能。 **一、准备工作** 1. **开发工具**: 首先,你需要安装Flash MX Authoring工具,这是Flex的基础。同时,你也需要Flash MX Communication Server,它是...
另外,结合社交网络功能,用户可以邀请好友加入视频聊天,或者创建公开房间供陌生人参与。 总的来说,"fms之P2P视频聊天"项目涵盖了P2P网络技术、UDP通信、NAT穿透、流媒体服务器应用以及高清视频处理等多个IT领域...
综上所述,Flex视频会议系统通过结合Flex前端框架和FMS服务器后端支持,构建了一个高效、易用的在线会议平台,满足了现代企业远程协作和沟通的需求。而WinMeeting作为其客户端程序,为用户提供了便捷的会议参与方式...
本文将详细介绍如何利用FMS服务器(Flash Media Server)和Flex技术实现在线视频聊天功能。FMS服务器是一种强大的实时流媒体服务器,它支持多种实时通信协议,包括RTMP(Real-Time Messaging Protocol),使得视频和...
在本文中,我们将深入探讨如何使用FLEX技术实现视频摄像头录制,并将录制的视频上传到FMS(Flash Media Server)服务器。首先,我们先来理解一下FLEX是什么以及它的核心功能。 FLEX全称为Flex Framework,是Adobe...
首先下载fms服务器安装好,并在fms安装目录的applications目录下新建一个test_video文件夹目录,一定要与flext程序中rtmp://127.0.0.1/test_video的test_video要一致,fms服务器启动后,执行flex程序,即可实现
《FMS视频会议源代码详解》 在信息技术领域,视频会议已经成为远程协作的重要工具,而FMS(Flash Media Server)则是实现这一功能的关键技术之一。本文将深入探讨基于Flash + FMS的视频会议源代码,解析其核心概念...