记得以前在XP系统上做过一个基于Flex和Fms的多人视频程序,但是最近把它拿过来放在我的Win7的本里面运行竟然总是报告NetConnection.Call.Failed弄得我莫名奇妙,又有点不知所措,但是作为一个与程序打交道的人,就必须试着去解决这个问题。花了好长时间终于解决了。我看到网上好多人有和我同样的问题,但是似乎还没有解决所以我就在这里写下一片博客与大家分享。
为了给想学的人一些帮助,我尽量详细一些。
首先FMS简介:
Adobe flash meida server 提供了一个流媒体的集合和为建立富媒体应用的群集交互模
式。Flash media server 提供了即时开始,实况视频流和基于用户带宽的可变的流的码率。
Flash media server 有三个版本
Flash Media Interactive Server :拥有完整特性的服务
Flash Media Development Server:一个用于开发的交互式服务的版本。支持所有的特性,
但是有连接数的限制。
Flash Media Streaming Server:只支持实况和视频点播的服务。这个版本不支持服务器
端的脚本或视频编码。
在视频方面FMS应该是很成功的,不知大家有没有注意其实土豆视频就是基于FMS实现的,类似的还有酷六。
关于它的介绍我就不说了,大家可以看看这篇博文,相当于介绍+帮助文档了:http://www.cnblogs.com/dzone/archive/2011/05/05/2037333.html
找一个现成的程序:
因为好多都是现成的东西,所以用不着自己写,只需更改一下别人写过的,改一改符合自己的要求就行(当然,这是针对初学的人)大家可以参考这个博客,里面关于Flex和FMS的介绍和用法及各种实现很多:http://www.cnblogs.com/aierong/archive/2009/01/14/Flex_Fms_VideoChat.html
我就拿这个例子来说:把源码下载下来之后可以试试能不能直接在你自己的机器上运行,如果是Win7的话,我觉得肯定不行。
对于没有安装FMS的首先要下载一个版本的服务器,我在官网下的是4.5版本
安装我就不介绍了,上面介绍的博客里都有。
首先第一个问题:NetConnection.Call.Failed
对于一个对于FMS很陌生的人肯定不知所措,但是稍微对于调试有点经验的人来说,对于陌生的东西,我要先看官方给的demo,到你的FMS安装目录下看看官方的例子就会知道什么是对的,之后给予对的来改正有问题的。
有两个文件夹值得我们看看
我们先要看的就是applications下的live或者vod文件夹下的内容,这里看live下的文件,注意里面的readme.txt 这里面有给我们的很重要的提示。
里面有下面这四条建议:
To deploy an unsigned version of live service you can either replace
the existing service, or create a new service:
1. [New Service] Create a new folder in the
{FMS-Install-Dir}/applications/ folder.
2. [New Service] (Optional) To make your new folder the default live
service, open the file, {FMS-Install-Dir}/conf/fms.ini and edit
the LIVE_DIR parameter and point to the new folder you created
in step 1.
3. [Existing Service] To replace the default Adobe signed
live service, first back up the following files from the folder
{FMS-Install-Dir}/applications/live:
* main.far
* Application.xml
* allowedHTMLDomains.txt
* allowedSWFDomains.txt
4. Copy all files from {FMS-Install-Dir}/samples/applications/live to
the folder you created in step 1 or to the existing folder,
{FMS-Install-Dir}/applications/live.
也就是说我们要把除了readme.txt之外的四个文件拷贝到自己的在application文件夹下建的应用程序文件夹下。这是第一步,第一步完成。
第二步,win7的权限问题,因为我的是win7系统,所以在启动fms服务的时候总是提示:系统错误5 拒绝访问,FMS服务总是无法启动,这个很明显是Win7的权限设置所知,
可以在运行中输入msconfig查看一下启动项,当然还有更简单的方法,就是更改权限。
在你的FMS安装目录中
明白人一看就明白了,给StartServerService.bat和StopserverService.bat创建快捷方式,之后再在快捷方式上单击右键选择以管理员身份运行。这样成功解决权限问题,这样就避开了因为权限问题而出现NetConnection.Call.Failed这个问题。但是还没有彻底解决。
第三步,在控制台中总会出现Method Not found(communicateServer) 的提示,看看自己下载的源码和使用提示,明明在服务器端代码都已经正确了,客户端的也正确了,为什么还找不到方法。这个问题我也解释不好,但是通过查找资料解决了,首先设置客户编码为AMF0
直接改代码就行
netConnection = new NetConnection();
netConnection.objectEncoding=ObjectEncoding.AMF0;
解释可以看看这个博客:http://www.51tianqi.com/reflush-tianqi/resolve/277.html
这样,NetConnection.call.Failed这个问题应该就差不多了。
紧接着是无法找到方法的问题
这个问题综合了两个建议,首先改变服务器端的方法声明,改为
Client.prototype.communicateServer = function(value)
原来的是:currentClient.communicateServer= function(value)
之后再一个英文文章中了解到,如果你的服务器端的asc文件名是main 那么你应该删除main.far这个文件,可是我的不是,那我也这么做,把源代码中的test_video2.asc改成main.asc 之后删除main.far
之后重启服务,登陆控制台,结果成功了。
这就是在win7下对他人的代码更改的过程。你也可能遇到安装FMS时,无法登陆控制台问题,可以换一下端口,源端口是1111,可以换成一个没有占用的,最后要注意address:应该写成IP:port如: 127.0.0.1:8978。
到这里就结束了