您的位置:首页 > 其它

Flash Media Server 教程(2)

2012-05-10 10:19 288 查看
视频,一个是录一个是放

用摄像头录视频:
//从麦和设像头显示视频
my_video.attachVideo(Camera.get());
my_video.attachAudio(Microphone.get());
//连接
nc = new NetConnection();
nc.connect("rtmp://localhost/aaaa");
nsOut = new NetStream(nc);
nsOut.attachVideo(Camera.get());
nsOut.attachAudio(Microphone.get());
//发布2.flv
nsOut.publish("2", "record");

publish后边的参数有record,则录成文件2.flv,

不加参数默认为live,即现场流,类似在线直播,不需要录成文件,其他人可以同时播放视频流

把fla发布一下, 录一会儿,把视频关掉,打开你的

叉盘:\Program Files\Macromedia\Flash Media Server 2\applications\aaaa\

是不是多了个streams\_definst_

打开C:\Program Files\Macromedia\Flash Media Server 2\applications\aaaa\streams\_definst_

看见2.flv了吧。。

播放

几行代码而已

nc = new NetConnection();
nc.connect("rtmp://localhost/aaaa");
res = new NetStream(nc);
view.attachVideo(res);
view.attachAudio(res);
res.play("2");


我们已经看过怎样跟服务器建立连接了,忘了的回头看看。。http://www.nshen.net/blog/article.asp?id=394

现在我们深入一点点。。看看有些细节问题

info.code:

连接后info.code会告诉你连接的状态,以前看的都是NetConnection.Connect.Success, 还有一些其他值,和这些值是什么意思,自己看看。

值得注意的是。NetConnection.Connect.Rejected,收到这条消息的时候说明服务器端拒绝了你,接着马上你会收到另一条,NetConnection.Connect.Closed,连接就关闭了~~~

mync = new NetConnection();
mync.onStatus = function(info) {
switch (info.code) {
case "NetConnection.Connect.Success" :
trace("连接成功");
break;
case "NetConnection.Connect.Failed" :
//关掉服务器的情况
trace("连接失败,请检查你的网络");
break;
case "NetConnection.Connect.Rejected" :
//注意这里,服务器拒绝你的情况,如果遭到拒绝,将会调用两次mync.onStatus,
//第一次"NetConnection.Connect.Rejected"第2次"NetConnection.Connect.Closed"
trace("遭到服务器拒绝");
trace("服务器返回信息:"+info.application.msg);
break;
case "NetConnection.Connect.Closed" :
trace("连接关闭");
break;
}
};
mync.connect("rtmp://localhost/connect", "N神");
//mync.connect("rtmp://localhost/connect","小新")


服务器端拒绝连接?好象见过。。。回头找找。。。。。。。。哦在这里

application.onConnect = function(client) {

this.rejectConnection(client);

}

我不能所有人都拒绝了。。我要把讨厌的人拒绝了。。。

传给服务器一个人名~~

mync.connect("rtmp://localhost/connect", "N神");

服务器看看是不是讨厌的人。。

application.onConnect = function(client, name) {
trace(name);
if (name == "N神") {
//拒绝连接,并返回个错误对象{msg:"服务器不想"+name+"进去,哈哈~"},包含错误消息
application.rejectConnection(client, {msg:"服务器不想"+name+"进去,哈哈~"});
} else {
application.acceptConnection(client);
//成功不能返回客户端信息
}
};


看最上边的代码。。

case "NetConnection.Connect.Rejected" :
//注意这里,服务器拒绝你的情况,如果遭到拒绝,将会调用两次mync.onStatus,
//第一次"NetConnection.Connect.Rejected"第2次"NetConnection.Connect.Closed"
trace("遭到服务器拒绝");
trace("服务器返回信息:"+info.application.msg);
break;

遭到服务器拒绝后会trace出服务器返回的错误消息

=======================================

还有一些代码。是在一本电子书上学到的。。。传上来看看

//test2 ,拒绝多余的回调信息
mync = new NetConnection();
mync.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
trace("连接成功");
this.handleCloseEvents = true;
}
if (!this.isConnected && this.handleCloseEvents) {
this.handleCloseEvents = false;
if (info.code == "NetConnection.Connect.Rejected") {
trace("遭到服务器拒绝");
} else {
trace("连接关闭");
}
}
};
mync.handleCloseEvents = true;
mync.connect("rtmp://localhost/connect", "N神");
//mync.connect("rtmp://localhost/connect","小新")
//test3 ,连接时显示正在连接,检查是否uri错误
mync = new NetConnection();
mync.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
trace("连接成功");
this.handleCloseEvents = true;
}
if (!this.isConnected && this.handleCloseEvents) {
this.handleCloseEvents = false;
if (info.code == "NetConnection.Connect.Rejected") {
trace("遭到服务器拒绝");
} else {
trace("连接关闭");
}
}
};
mync.handleCloseEvents = true;
//uri="rtmp://localhost/connect"
uri = "rtmp2://localhost/connect";
//错误的uri
if (mync.connect(uri, "N神")) {
trace("尝试连接服务器中。。");
} else {
trace("没有尝试连接服务器~是uri错误???");
}
//mync.connect("rtmp://localhost/connect","小新")


onStatus都有什么,看清楚~~~

// onStatus( ) handler.
NetConnection.prototype.onStatus = function (info) {
trace("this.isConnected: " + this.isConnected);
trace(" info.level: " + info.level);
trace(" info.code: " + info.code);
trace("info.description: " + info.description);
if (info.application) {
for (var prop in info.application) {
trace("info.application." + prop + ": " + info.application[prop]);
}
}
trace("\n");
};


说明:很简单的东西,基本上就是共享对象的运用,没有用到服务器端,大型聊天室可能不会这么做,这个只适用于初学者:/

注释很详细,不说多了:

//用户名
myname="游客"
//建立连接
var myNC = new NetConnection();
myNC.connect("rtmp://localhost/smallchat");

//搞到rso
Talk_SO = SharedObject.getRemote("Talk", myNC.uri, false);
Talk_SO.onSync = function() {
//先把聊天文本框清空
remoteText.text = "";
//把聊天列表显示出来,talklist的格式就是[谁谁说:啊啊啊,谁谁谁说:2222]
var t = this.data.talklist;
for (var i = 0; i<t.length; i++) {
writeln(t[i]);
}
};
Talk_SO.connect(myNC);

//发消息函数
function post() {
//如果不存在talklist就建一个,这里没用server端,是个技巧
if (Talk_SO.data.talklist[0] == undefined) {
Talk_SO.data.talklist = [];
}
//限制数组长度,是个队列。保证里边有5条消息,当然也可以更多,但如果没有限制,flash会垮的
if (Talk_SO.data.talklist.length>=5) {
Talk_SO.data.talklist.shift();
}
//把消息装到so里
Talk_SO.data.talklist.push(myname+"说:"+meText.text);
meText.text = "";
}
//文字显示,换行
function writeln(msg) {
remoteText.text += msg+"\n";
remoteText.vPosition =remoteText.maxVPosition
}
//-----------------------------------------------
Btn.onRelease = function() {
post();
};
this.onKeyDown = function() {
if (Key.isDown(Key.ENTER)) {
post();
}
};
Key.addListener(this);


原文件

http://www.nshen.net/blog/attachments/200602/smallchat.fla
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: