最近在使用AMS服务器录制本机的摄像头视频的时候总是不成功,由于只有一台机器,服务器和客户端都在一台机器上,所以发现问题多多。
先把代码贴出来:
package
{
import flash.display.*;
import flash.media.*;
import flash.events.*;
import flash.net.*;
import fl.motion.MotionEvent;
public class recordVideo extends MovieClip
{
var nc:NetConnection;
var ns:NetStream;
var video:Video;
var cam:Camera;
var mic:Microphone;
public function recordVideo()
{
//videoName.text = "";
beginRecordBtn.label = "开始录制";
beginRecordBtn.addEventListener(MouseEvent.CLICK, onBeginRecord);
stopRecordBtn.label = "停止录制";
stopRecordBtn.addEventListener(MouseEvent.CLICK, onStopRecord);
video = new Video(400, 300);
cam = Camera.getCamera();
mic = Microphone.getMicrophone();
video.attachCamera(cam);
addChild(video);
}
private function onBeginRecord(evt:MouseEvent):void
{
nc = new NetConnection();
nc.client = this;
nc.addEventListener(NetStatusEvent.NET_STATUS, onBeginRecordStatusHandler);
nc.connect("rtmp://localhost/live");
}
public function onBWDone(){}
private function onBeginRecordStatusHandler(evt:NetStatusEvent):void
{
if(evt.info.code == "NetConnection.Connect.Success")
{
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, onBeginRecordStatusHandler);
var obj = new Object();
obj.onMetaData = function(){};
ns.client = obj;
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish(videoName.text, "record");
}
}
private function onStopRecord(evt:MouseEvent):void
{
nc.close();
}
}
}
如果想把视频录到.../applications/live文件夹下,则出现 如下日志:
Application doesn't have permissions for server-side record/append of streams; access denied to stream 123.
就是说应该没有权限向服务器端录制流,对123流的录制被拒绝。(123为我要录制的视频名称)
如果录到.../applications/vod下,则出现下面的日志显示:
Write access denied for stream ww.
即写流ww的通道被拒绝。(ww是我录制的视频名称)
如果是录制到你自己创建的应用下面,则根据你是从哪个默认应用下拷贝的main.far文件有关。具体这里就不说了。
这里就说说录制到live文件夹下的解决方案.
1.首先解压live文件夹下的main.far(可以用常用解压工具),会出现如下几个文件:
2.用编辑工具打开Application.xml,显示如下:
<Application>
<SharedObjManager>
<ClientAccess override="no">false</ClientAccess>
</SharedObjManager>
<StreamManager>
<StreamRecord override="no">false</StreamRecord>
</StreamManager>
</Application>
这里的信息大致意思是禁止共享对象的客户端访问和流录制,只要将其访问和流录制都改为允许,则能解决问题。
即改为:
<Application>
<SharedObjManager>
<ClientAccess override="yes">true</ClientAccess>
</SharedObjManager>
<StreamManager>
<StreamRecord override="yes">true</StreamRecord>
</StreamManager>
</Application>
3.改好后,将其所在文件夹重新压缩一下,如果后缀是rar或者zip什么,不要紧,直接改后缀为.far就行了。
4.重启服务,再次运行程序,服务器端的摄像头录制没问题,问题解决,哈哈。