突然又需要FMS做视频录制,却遇到一些意想不到的问题,我在想当年做的时候怎么没遇到。。。
报错:
Error #2044: 未处理的 NetStatusEvent:。 level=error, code=NetStream.Record.NoAcces
问题原因:
查资料发现,居然FMS在默认情况下不允许record文件到服务器,必须要进行设置,在服务器端的应用程序文件夹(默认位置在<FMS_Installation_Dir>/applications/live),在这个文件夹下面有一个main.far,main.far是个压缩文件(可以用winrar解压),解压后里面有两个文件main.asc 和 Application.xml, 打开Application.xml,代码如下:
<Application> <SharedObjManager> <ClientAccess override="no">false</ClientAccess> </SharedObjManager> <StreamManager> <StreamRecord override="no">false</StreamRecord> </StreamManager> </Application>
默认是SharedObject远程共享对象和StreamRecord录制都不允许。
修改Application.xml如下:
<Application> <SharedObjManager> <ClientAccess override="yes">true</ClientAccess> </SharedObjManager> <StreamManager> <StreamRecord override="yes">true</StreamRecord> </StreamManager> </Application>
除此修改之外还要修改main.asc
打开main.asc,找到以下函数:
application.onConnect = function( p_client, p_autoSenseBW ) { // Check if pageUrl is from a domain we know. // Check pageurl // A request from Flash Media Encoder is not checked for authentication if( (p_client.agent.indexOf("FME")==-1) && (p_client.agent.indexOf("FMLE")==-1)) { // Authenticating HTML file's domain for the request : // Don't call validate() when the request is from localhost // or HTML Domains Authentication is off. if ((p_client.ip != "127.0.0.1") && application.HTMLDomainsAuth && !this.validate( p_client.pageUrl, this.allowedHTMLDomains ) ) { trace("Authentication failed for pageurl: " + p_client.pageUrl + ", rejecting connection from "+p_client.ip); return false; } // Authenticating the SWF file's domain for the request : // Don't call validate() when the request is from localhost // or SWF Domains Authentication is off. if ((p_client.ip != "127.0.0.1") && application.SWFDomainsAuth && !this.validate( p_client.referrer, this.allowedSWFDomains ) ) { trace("Authentication failed for referrer: " + p_client.referrer + ", rejecting connection from "+p_client.ip); return false; } // Logging trace("Accepted a connection from IP:"+ p_client.ip + ", referrer: "+ p_client.referrer + ", pageurl: "+ p_client.pageUrl); }else{ // Logging trace("Adobe Flash Media Encoder connected from "+p_client.ip); } // As default, all clients are disabled to access raw audio and video and data bytes in a stream // through the use of BitmapData.draw() and SoundMixer.computeSpectrum()., Please refer // Stream Data Access doccumentations to know flash player version requirement to support this restriction // Access permissions can be allowed for all by uncommenting the following statements //p_client.audioSampleAccess = "/"; //p_client.videoSampleAccess = "/"; this.acceptConnection(p_client); // A connection from Flash 8 & 9 FLV Playback component based client // requires the following code. if (p_autoSenseBW) p_client.checkBandwidth(); else p_client.call("onBWDone"); }
打开以下注释:
//p_client.audioSampleAccess = "/"; //p_client.videoSampleAccess = "/";
如果想允许SharedObject远程共享对象,可以加上以下代码:
p_client.writeAccess = "/";
然后将修改后的文件重新打包mian.far,替换原来的,重启FMS服务器即可。