cenfee's blog->Flash.Flex.ActionScript.RIA.Js.Php(新博客地址:http://cenfee.com/)

导航

用fms做一个双向视频聊天和多人聊天系统

翻阅了fms帮助文档,自己也弄个视频聊天出来

双向:

多向:

先讲双向的,同样是netConnection和netStream这玩意,其实来来去去还是这东东,先把它搞熟,什么都不难了。

这回先放服务器端脚本上来,不用急,等下可以回头再看

vidStreams = ["left","right"];
application.onAppStart = function(){
	trace("good");
}
application.onConnect = function(currentClient){
	if(vidStreams.length<=0){
		application.rejectConnection(currentClient);		
	}
	currentClient.cliNow = vidStreams.pop();
	application.acceptConnection(currentClient);
	currentClient.streamSelect = function(){
		trace("Stream "+currentClient.cliNow+" used");
		return currentClient.cliNow;
	}
}
application.onDisconnect = function(currentClient){
	vidStreams.push(currentClient.cliNow);
}

 

惯例:(服务器端脚本就是放在personsVideo那个文件夹内)

var rtmpNow:String = "rtmp://localhost:88/personsVideo";
nc.connect(rtmpNow); 

这回因为涉及到多向的问题,为了使得客户端代码都是一致的,我们由服务器端来判定选择相应的流,所以在客户端就要用到回调函数

_responder = new Responder(streamNow);
nc.call("streamSelect",_responder);

streamSelect就是上面服务器端定义的函数,所有return后,客户端这边就会马上执行streamNow函数了,确认你是做left,还是做right

private function streamNow(streamSelect:String):void{
				
	setCam();  //设置麦克风,摄像头,video
	setMic();
	setVid();
				
	switch(streamSelect){
		case "left":
			outStream= "left";
			inStream ="right";
			break;
		case "right":
			outStream = "right";
			inStream ="left";
			break;
	}
	netOut= new NetStream(nc);
	netOut.attachCamera(cam);
	netOut.attachAudio(mic);
				
	vidOut.attachCamera(cam);  //若加入其他流,这个会被覆盖
	netOut.publish(outStream,"live");
				
	netIn  = new NetStream(nc);
	vidIn.attachNetStream(netIn);
				
	netIn.play(inStream);
}

如果是多向的,其实就是加多几个流,服务器脚本那个数组加多几个值就是了。简单吧!

posted on 2010-11-13 16:06  cenfee  阅读(512)  评论(0)    收藏  举报