/*
*项目功能:视频聊天(FMS)
*开发人:roy(ilikedesign2003@yahoo.com.cn)
*时间:2007/12/18
*其它:完全图快,没想过以后的扩展,我的想法是以后要写提示框/表情/用户列表三个类,这样模块之间耦合性低,并方便扩展.希望有砖多多扔我
*/
var server_uri:String = "rtmp://192.168.1.26/chat";
//FMS地址;
//var videoName:String = "Roy";
var my_nc:NetConnection = new NetConnection();
//新建一个连接对象,用来连接FMS;
my_nc.connect(server_uri,id);
//连接FMS;
var my_ns:NetStream = new NetStream(my_nc);
//新建流,用来捕获和播放视频;
var my_ns2:NetStream = new NetStream(my_nc);
var my_cam:Camera = Camera.get();
video_r.attachVideo(my_cam);
//获得慑像头,并将摄像头获取的视频载入到video_r里.
my_cam.setQuality (0, 50);
//设置带宽和质量;
var my_mic:Microphone = Microphone.get();
//获得MIC;
my_ns.attachVideo(my_cam);
my_ns.attachAudio(my_mic);
//将摄像头图象和MIC声音装载到流.
video_p._visible = false;
//将播放窗口设置为不可见.
my_nc.onStatus = function(thisObj:Object) {
//trace (thisObj.code);
if (thisObj.code == "NetConnection.Connect.Success") {
//RecordStop("空闲中");
my_nc.call("getUserList", null);
} else {
trace("错误:服务器未启动或URI输入错误.");
}
};
my_nc.say_UserList = function(result:Array) {
//trace(result[0]);
//append(result[0]+" 1 : "+result[1]+" 2 : "+result[2]);
//pushMoney(result[0],result[1]);
userlist_txt.text = result;
myList.dataProvider = result;
trace(result);
};
video_r._visible = true;
video_p._visible = false;
my_ns.publish(id,"record");
//btn_pr.btn_text.text = "停止";
//RecordInterval = setInterval (RecordTime, 1000);
txt_videoname.text = "视 频 名:"+id;
video_p._visible = true;
video_p.attachVideo(my_ns2);
my_ns2.play(otherId);
//btn_pr.btn_text.text = "重录";
my_ns2.onStatus = function(PlayInfo) {
if (PlayInfo.code == "NetStream.Play.Stop") {
my_ns2.seek(0);
my_ns2.pause();
}
};
var chat_so:SharedObject = SharedObject.getRemote("coo", my_nc.uri, false);
chat_so.onSync = function() {
if (chat_so.data.text != undefined) {
append(chat_so.data.text);
}
};
chat_so.connect(my_nc);
chatPush_btn.onPress = addchat;
function addchat() {
var addstr:String = chatIn_txt.text;
chat_so.data.text = "<font color='#ff6600'><b>"+id+"</b></font><font color='#000000'> 说 :"+addstr+"</font>";
//trace(chat_so.data.text);
chatIn_txt.text = "";
}
function append(msg):Void {
usershow_txt.htmlText += msg;
//trace(usershow_txt.htmlText);
usershow_txt.scroll++;
}
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.getCode() == Key.ENTER) {
addchat();
}
};
服务端:
MAXCONNECTIONS = 100;
application.onAppStart = function() {
//在线用户列表 )
//application.onLineNum = 0;
application.onLineUserList = []; //在线用户列表
}
application.onConnect = function (client,name){
client.name = name;
this.onLineUserList.push(client.name);
//trace("上来一个!!!");
//trace(client.ip)
client.getUserList = function(){
application.broadcastMsg("say_UserList", application.onLineUserList);
}
trace("Connet name : " + client.name + client.ip );
if(this.onLineUserList.length>=MAXCONNECTIONS){
//application.rejectConnection
application.rejectConnection(client);
}
return true;
}
application.onDisconnect = function (client){
//this.onLineNum--;
//this.freePeople.shift(client.name);
trace("Disnet name : "+client.name+" IP : "+client.ip+ ' 在线人数:' + this.onLineUserList.length);
trace("onLineUserList :" + this.onLineUserList);
this.onLineUserList.shift(client.name);