手把手系列打造基于FMS2的视频聊天室二文档格式.docx
- 文档编号:15399092
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:24
- 大小:72.10KB
手把手系列打造基于FMS2的视频聊天室二文档格式.docx
《手把手系列打造基于FMS2的视频聊天室二文档格式.docx》由会员分享,可在线阅读,更多相关《手把手系列打造基于FMS2的视频聊天室二文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
layout="
absolute"
fontSize="
12"
width="
80%"
height="
50%"
horizontalAlign="
center"
verticalAlign="
middle"
creationComplete="
init()"
Script>
!
[CDATA[
//这里盛放代码,后面讲解的所有代码都将放到此位置
]]>
/mx:
<
HBoxwidth="
100%"
<
Panelheight="
10%"
title="
在线用户列表"
<
VBoxwidth="
<
Listid="
users"
90%"
cachePolicy="
off"
List>
Buttonlabel="
和选中人聊天"
id="
chat"
click="
chatWith()"
/>
VBox>
Panel>
Paneltitle="
对方视频"
backgroundColor="
cyan"
VideoDisplaywidth="
remoteVideo"
maintainAspectRatio="
false"
本地视频"
localVideo"
HBox>
Application>
各位可以先不用管那些事件方法,例如:
chatWith()、init()等。
本页面编写要素:
Ø
利用HBOX、VBOX作为整体框架
Panel作为部件容器
相对百分比控制部件尺寸
下一讲:
连接FMS服务器成功后实现本地视频的播放
第二讲:
利用ActionScript3和VideoDisplay元素可以很容易的实现本地视频的播放;
至于和FMS的连接,AS3里也有相关的API供使用。
以本软件为例:
连接FMS服务器的代码放到了init()方法,即:
页面初始化完成后将触发FMS的连接动作
首先定义程序变量:
//与FMS之间通讯的桥梁对象(后面会详细讲解此对象的用处)
privatevarfmsObj:
Object=newObject();
//与FMS相连的connection对象
privatevarfmsConn:
NetConnection=newNetConnection();
//播放到FMS的视频流(此stream负责采集本地视频并传送到FMS服务器)
privatevarfmsStream:
NetStream=null;
//FMS连接串(例如rtmp:
//127.0.0.1/videochat)
privatevarfmsUrl:
String=null;
//连接的用户名(在线用户名)
privatevaruserName:
//用户在线数据
privatestaticvaruserData:
ArrayCollection=newArrayCollection();
编写init()方法实现FMS的连接:
privatefunctioninit():
void{
//HTML传参,后面讲解
fmsUrl=Application.application.parameters.fms;
userName=Application.application.parameters.user;
//定义客户端与FMS端通讯的client对象(后面讲解)
fmsConn.client=fmsObj;
fmsObj.userUpLine=upLine;
fmsObj.userDownLine=downLine;
//必须设置,原因:
FMS端AS和客户端AS的版本不统一
fmsConn.objectEncoding=ObjectEncoding.AMF0;
//开始连接FMS服务器
fmsConn.connect(fmsUrl,userName);
//网络连接事件处理器(后面会有connectFMS的实现)
fmsConn.addEventListener(NetStatusEvent.NET_STATUS,connectFMS);
}
connectFMS()的实现:
privatefunctionconnectFMS(e:
NetStatusEvent):
varresult:
String=e.info.code;
switch(result){
case"
NetConnection.Connect.Success"
:
playStream();
break;
default:
break;
}
}
playStream()的实现:
privatevarcamera:
Camera=null;
//摄像头对象
privatevarmic:
Microphone=null;
//麦克风对象
privatevarshowVideo:
Video=null;
//远程视频的呈现对象
privatefunctionplayStream():
fmsStream=newNetStream(fmsConn);
//创建连接FMS的stream对象
camera=Camera.getCamera();
//获取机器默认的摄像头
if(camera==null){
Alert.show("
未检测到摄像头,请确认摄像头已被正确安装"
);
mic=Microphone.getMicrophone();
//获取机器默认的麦克风
if(mic==null){
未检测到MIC,请确认MIC已被正确安装"
if(camera!
=null){
camera.setMode(320,240,15);
//分辨率:
320*240每秒15帧
camera.setQuality(100*1000,90);
//设置视频质量
if(mic!
mic.setUseEchoSuppression(true);
}
//本地视频播放的实现,将cameraattach到videodisplay即可
localVideo.attachCamera(camera);
fmsStream.attachCamera(camera);
fmsStream.attachAudio(mic);
//将本地视频发布到FMS上,发布的音视频流名字是在线的用户名
fmsStream.publish(userName,"
live"
上面涉及到的类和相关API可以参照手册:
Adobe_Flex_2.0.1_Language_Reference_[Flex2.org].chm
如需要的话,可mail:
wjhatdq@索取
在线用户功能的实现
第三讲:
本功能的实现主要是利用FMS服务端ActionScript和客户端client对象的交互
编写服务端ActionScript
//此方法在连接到FMS时触发
application.onConnect=function(newClient,name){
newClient.name=name;
//接受客户端的连接
application.acceptConnection(newClient);
varmsg="
Hello!
Youareconnectedas:
"
+newClient.name;
trace("
Sendingthismessage:
+newClient);
for(i=0;
i<
application.clients.length;
i++){
for(j=0;
j<
j++){
if(
application.clients[i].name!
=application.clients[j].name
){
application.clients[i].call("
userUpLine"
null,application.clients[j].name);
}
}
下面解释重要代码的含义
application.onConnect在客户端连接到FMS时触发
function(newClient,name)name的值来自客户端代码
fmsConn.connect(fmsUrl,userName);
中的userName
trace方法后的两个for循环作用:
每次有客户端连接到FMS时,都将调用客户端的userUpLine方法,其中userUpLine方法在客户端代码
fmsConn.client=fmsObj;
fmsObj.userUpLine=upLine;
中定义,其中真正的实现是客户端的upLine
诀窍:
在ActionScript中,所有Object的本质都是一个Dictionary,它可以动态的添加或删除属性,利用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手把手 系列 打造 基于 FMS2 视频 聊天室