Flash Media Server 教程(2)

视频,一个是录一个是放

用摄像头录视频:
    //从麦和设像头显示视频  
    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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值