首页 > 使用Cumulus和Flash Player搭建视频会议示例

使用Cumulus和Flash Player搭建视频会议示例

该篇文档取材于Cumulus官网上的视频会议代码,详见

https://github.com/OpenRTMFP/Cumulus/wiki/Server-Application,-Samples

我根据它的指示来逐步完成了实现细节.

下面是该示例所用到的代码,我已经上传到如下网址:

http://download.csdn.net/detail/tao_627/6900621



作为RTMFP协议的交互实例,总体演示环境上需要:

服务器:CentOS 6.3 64bit上运行Cumulus(安装配置参见前面的博文),运行在192.168.90.26上并监听1935端口.

客户端:2台Windows环境的主机,以我的配置为例,Windows7 64位,安装有FlashBuilder 4.7 64位破解版,同时要求安装有摄像头,便于视频会话.





下面是FlashBuilder 4.7破解版的下载链接,按照自己的操作系统选择安装32位或是64位版本:

http://332374363.blog.51cto.com/5262696/1102036

你需要首先登陆http://www.adobe.com/downloads/,才能下载成功。另外在安装时,选择试用版安装,需要输入你的AdobeID。win 7和win 8.1都可以安装。



我选择的是32位版本FlashBuilder_4_7_LS10.exe,在win 8.1系统上面.安装完成后在安装目录下依次修改下列3个文件:

(1)..AdobeAdobeFlashBuilder4.7(64Bit)eclipsepluginscom.adobe.flexbuilder.project_4.7.0.349722META-INF下面的MANIFEST.MF

修改:Bundle-Version: 0.0.0

(2)..AdobeAdobeFlashBuilder4.7(64Bit)eclipsefeaturescom.adobe.flexide.feature_4.7.0.349722下面的feature.xml

修改:0.0.0"/>

(3)..AdobeAdobeFlashBuilder4.7(64Bit)eclipsepluginscom.adobe.flexbuilder.flex_4.7.0.349722

下面:复制config.xml并重命名为config_builder.xml

注:以上红色文字部分为具体的版本号,请跟据实际版本号进行查找

修改完成之后,再启动AdobeFlashBuilder4.7,恭喜你,你会发现自己彻底拥有了这款RIA工具了。

下面是官网最新版本的flash player调试版链接地址,如果你不使用桌面版本而是默认选择网页内嵌的Flash player,也可以不下载安装:

http://www.adobe.com/support/flashplayer/downloads.html





服务器端配置:

将下面的内容保存为main.lua文件,存放到Cumulus的如下目录下面:

CumulusServer/www/meeting/main.lua

这是一个扩展的服务器应用meeting:

function onStart(path)NOTE("Application '"..path.."' started")
endfunction onStop(path)NOTE("Application '"..path.."' stopped")
endfunction onConnection(client, userName, meeting)client.userName = userName;client.meeting = meeting;INFO("User connected: ", client.userName , "meeting: ", client.meeting);function client:getParticipants(meeting)result = {}i = 0;for key, cur_client in cumulus.clients:pairs() doif (cur_client.meeting == meeting) theni = i+1;participant = {};participant.userName = cur_client.userName;participant.meeting = cur_client.meeting;if cur_client.id thenparticipant.protocol = 'rtmfp';endparticipant.farID = cur_client.id;			result[i] = participant;endend	return result;endfunction client:sendMessage(meeting, from, message)for key, cur_client in cumulus.clients:pairs() doif (cur_client.meeting == meeting) then		cur_client.writer:writeAMFMessage("onMessage", from, message);endendendsendParticipantUpdate(client.meeting);
endfunction onDisconnection(client)INFO("User disconnecting: "..client.userName);sendParticipantUpdate(client.meeting);
endfunction sendParticipantUpdate(meeting)for key, cur_client in cumulus.clients:pairs() doif (cur_client.meeting == meeting) then		cur_client.writer:writeAMFMessage("participantChanged");endend
end






注意:

先要在www(如果没有可以先创建一个)下面生成一个子目录meeting,这个目录是客户端和服务器共同协商好的,客户端连接时的url中要指明这个path,当然你也可以改为其它

的名字,只要在Client请求url中相应修改path就可以了.然后将上面的main.lua放到meeting中去.





然后,使用下面的命令开启Cumulus服务器:

sudo ./CumulusServer --pidfile=./CumulusServer.pid -l8 --dump=all

下面是相关的服务器端运行界面:









客户端配置:

1.安装好FlexBuilder 4.7后,下面开始搭建VideoMeeting工程,首先从adobe官网下载相应的样例代码

http://www.adobe.com/devnet/flashmediaserver/articles/real-time-collaboration.html

注意:只需要提取出Client使用的内容,参见下面上传的压缩包





2.打开FlexBuilder 4.7,开始创建一个名为VideoMeeting的Flex项目,会默认生成一个VideoMeeting.mxml和其他的一些文件(夹),将相应的源文件

VideoMeeting.mxml (replace existing VideoMeeting.mxml in src folder), 

ConnectionManager.as, 

SessionManager.as, 

LoginWindow.mxml, 

Participant.as, 

ParticipantListRenderer.mxml, 

ParticipantEvent.as, 

MessageEvent.as, 

Settings.as,

Logger.as

到VideoMeeting/src目录下面,我实际上,会将这些文件手动复制到FlexBuilder4.7的相应工程目录下面:

C:UsersdellAdobe Flash Builder 4.7VideoMeetingsrc下面

注意不要添加main.asc,它是给FMS服务器端使用的脚本,我们这里使用的是Cumulus,因而用不上.





3.在VideoMeeting.mxml中指定相关参数,主要是如下配置:

// this is the name of the FMS application in [fms install folder/applications]

private const Application:String = "meeting";

该参数指明Cumulus等服务器上对应应用程序的名称,比如,按照当前的配置,在Cumulus上对应的应用路径为CumulusServer/www/meeting/,这里

CumulusServer是服务器程序所在的目录.



private const ServiceDefault:String = "192.168.90.26:1935";

private const UserDefault:String = "taoyx";

private const MeetingDefault:String = "meeting";

上面的参数依次指定了Cumulus服务器侦听的ip和port,默认注册的用户名,和当前用户界面上显示的应用程序的名称.





4.将上述文件修改并保存后,勾选工具栏上的"项目(p)"中的"自动构建(M)"选项,每次文件修改后,会像Eclipse那样,自动编译并生成可执行程序.

在编译过程中,发现编译时显示了几处错误,我觉得是程序源码和FlexBuilder类库有个别不兼容的问题,就相应的注释了这几处地方.然后,顺利通过

编译.

现在在工程的bin-debug目录中,双击对应的VideoMeeting.html,就会看到类似如下的画面:





当两个客户端都配置好了后,我们可以看到两个人的视频画面,同时从下面的画面中可以看到数据发送,接收的速率,丢包率等等.同时从服务器端可以

看到数据交互日志,便于理解Cumulus源码的处理逻辑和RTMFP协议的细节.





更多相关:

  • 首先声明: 下面的源码包改编来自github上老太太写的一个"史上最简单的DHT爬虫“项目: https://github.com/laomayi/simDHT 相关源码在附件源码包dht这个文件夹中,这个源码使用python实现,需要使用到mysql数据库. 下面是源码目录下的文件,比较简洁,log文件是刚才运行时创建的....

  • 背景 Linus slashdot:    https://meta.slashdot.org/story/12/10/11/0030249 Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level...

  • 给定一个整数 n, 返回从 1 到 n 的字典顺序。 例如, 给定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。 请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。 根据题目描述,所谓字典顺序,即数值按照类似字符串首字母的ASCII大小进行排序...

  • 二叉树递归遍历存在的问题 如果我们的二叉树只有左子树,而且树的高度还很深的时候,这个时候递归调用遍历的时候,栈帧空间开辟的较大,很可能造成栈溢出。但是我们一个程序中,为堆分配的空间要比栈大的多,这个时候我们可以实现一个二叉树遍历的非递归的实现形式,模拟栈帧调用的过程,自己模拟一个栈用于保存节点,然后实现遍历。 非递归实现树的遍历...

  • 题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数。 思路: 优化2:   int prime[]= {1, 2, 3, 5, 7,11, 13, 17, 19, 23,29, 31, 37, 41,...

  • Chess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 351    Accepted Submission(s): 124 Problem Description 小度和...