用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);
}
如果是多向的,其实就是加多几个流,服务器脚本那个数组加多几个值就是了。简单吧!
浙公网安备 33010602011771号