red5 视频应用开发指南。第二个项目成功运行经验(2)

1,第二个项目通过最开始使用书本介绍的red5 1.0.0 ,发现连接的时候总是出现

NetConnection.Connect.Failed
undefined

连接出错,具体代码是这样的

服务端代码

package com.red5app;

import java.util.HashMap;
import java.util.List;
import java.util.Map;  

import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.Red5;
import org.red5.server.api.scope.IScope;
import org.red5.server.api.service.IServiceCapableConnection;
import org.red5.server.api.so.ISharedObject;  

public class Application  extends ApplicationAdapter{
    private Map<String,IConnection>  clientDic = new HashMap<String,IConnection>();
    //最开始执行的程序
    public Boolean appStart(){
         return true;
     }
     //断开连接时执行的程序
     public void appStop(){

     }
     //连接时执行的程序
     public boolean connect (IConnection conn,IScope scope,Object[] params){
         if(params.length==0){
             rejectClient("Must pass the login name.");
         }
         String loginname=params[0].toString();
        conn.setAttribute("UserName", loginname);
        if(!clientDic.keySet().contains(loginname))
         {
             clientDic.put(loginname, conn);
             ISharedObject so = getSharedObject(scope, "UserSO");
             if(so==null)
             {                 //发现如果注释掉下面三句就能连接成功,所以可以肯定的是软件哪里出了问题
                 this.createSharedObject(scope, "UserSO", true);
                 so = getSharedObject(scope, "UserSO");
             }
             so.setAttribute("userlist", clientDic.keySet().toArray());
         }
         else{
             rejectClient("The same user has logged in already");
         }

         return super.connect(conn, scope, params);
     }
     public void disconnect (IConnection conn,IScope scope){
         String loginname=conn.getAttribute("UserName").toString();
         if(loginname!=null){
             clientDic.remove(loginname);
             ISharedObject so= getSharedObject(scope,"UserSO");
             if(so!=null){
                 so.setAttribute("userlist",clientDic.keySet().toArray());
             }
          }
          super.disconnect(conn, scope);
     }
     /**
      * @category 发送全局消息,所有上线的人都能够看到
      * @param params
      */
     public void sendMessage(List<String> params) {
         IConnection conn = Red5.getConnectionLocal();
         IScope scope = conn.getScope();
         ISharedObject so = getSharedObject(scope, "UserSO");
        // log.info("Server: call sendMessage and params " + params.get(0));
         so.sendMessage("receiveMsg", params);
     }  

     /**
      * @category 发送私聊信息,只有被选中的人能够看到信息
      * @param params
      */
     public void sendPrvMessage(List<String> params) {
         if(params.size() == 3) {
             String sender = params.get(0);
             String content = params.get(1);
             String receiver = params.get(2);  

             if(clientDic.keySet().contains(receiver)) {
                 IConnection conn = clientDic.get(receiver);
                 if(conn instanceof IServiceCapableConnection) {
                     IServiceCapableConnection sc = (IServiceCapableConnection) conn;  

                     sc.invoke("receivePrvMsg", new Object[]{sender,content});
                 }
             }
         }
     }
}
Flash cs3的代码是这样的
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.events.MouseEvent;
import flash.net.SharedObject;

var nc:NetConnection=new NetConnection();
nc.connect("rtmp://127.0.0.1/red5_6","asasa");
nc.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
nc.client = this;
function netStatus(event : NetStatusEvent ):void
{
	switch(event.info.code){
		case "NetConnection.Connect.Rejected":
		trace("连接被拒绝!");break;
		case "NetConnection.Connect.Success":
		var so:SharedObject = SharedObject.getRemote("UserSO",nc.uri,true);
		 so.addEventListener(SyncEvent.SYNC,onSync);
		 so.connect(nc);
		break;
	}
	trace(event.info.code);
	trace(event.info.application);
}
function onSync(event:SyncEvent):void{
	   trace("event"+event);
	   for(var i:Object in event.changeList)
	   {
		var changeobj:Object =event.changeList[i];
		trace("Change Code:"+changeobj.code);
	   }
}
function receiveMessage(mesg:String):void
{
	trace("mesg"+mesg);
}
 //发现如果注释掉下面三句就能连接成功,所以可以肯定的是软件哪里出了问题
                 this.createSharedObject(scope, "UserSO", true);
                 so = getSharedObject(scope, "UserSO");
             so.setAttribute("userlist", clientDic.keySet().toArray());换个版本的软件,安装过程是这这样的:
安装步骤: 1).解压压缩文件到没有空格和中文的目录中 2).配置环境变量 RED5_HOME=red5-server的解压目录的地址 在PATH=;%RED5_HOME%; 保存OK! 3).运行cmd  4).进入dos命令窗口,敲入red5 回车 OK!  5).显示服务正在启动中…  出现192.168.1.101-5080 表示启动成功! 这个ip我是配置了red5-server 目录 conf 下面 的red5-properties 文件 初次测试可以不用配置,访问时 用localhost访问即可 如果想要配置,配置即可  没有配置之前的访问链接http://localhost:5080 配置了IP之后的访问链接http://192.168.1.108:5080 6)下载oflaDemo,下载 好了之后将文件解压到red5-server目录中 webapps 目录中即可 下面给出oflaDemo的下载地址: 链接:http://pan.baidu.com/s/1ntCiJod 密码:au2z 7).在dos中ctrl+c 按 y 关闭服务器 ,再重新输入red5 启动即可! 8).然后访问 来自:http://blog.csdn.net/tgendure/article/details/50166305

发现可以了,显示连接成功

NetConnection.Connect.Success
null
event[SyncEvent type="sync" bubbles=false cancelable=false eventPhase=2 changeList=[object Object]]
Change Code:change

 
 
时间: 2024-08-10 02:12:19

red5 视频应用开发指南。第二个项目成功运行经验(2)的相关文章

red5 视频应用开发指南。第三个项目成功运行经验(3)

1,接着第二篇的文章,书写flash的发送与接收程序 来讲讲设计的思路与原理: 1,flash连接服务器,通过NetConnection   携带用户名信息 username = loginName.text; nc = new NetConnection(); nc.addEventListener( NetStatusEvent.NET_STATUS , netStatus );// connect to red5, passing false as parameter nc.connect

web端实时音视频功能开发指南

yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 简介 yun2win-sdk-web提供web端实时音视频功能完整解决方案,方便客户快速集成音视频功能. SDK 提供整套解决方案 yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 开发准备 1.准备Chrome浏览器版本49及以上 2.给网站配置CA证书 3.

简历生成平台项目开发-STEP4第二次项目例会讨论

时间:2016.7.15周五7点半 地点:图书馆 讨论主题:交流各自手头项目进展,确定下一步任务 内容:按照之前的讨论的任务大家各自汇报进度. 汇报人:谭卓.尹忠诚 内容:1.基于富文本编辑器的模板,用户直接编辑. ~浏览器端生成(貌似不可行) ~直接打印页面(调研如何隐藏页眉页脚,貌似不可行) 见 http://stackoverflow.com/questions/1960939/disabling-browser-print-options-headers-footers-margins-

[翻译]现代java开发指南 第二部分

DedeCMS%E5%8E%BB%E6%8E%89%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5%E4%B8%AD%E2%80%9C%E7%BB%87%E6%A2%A6%E9%93%BE%E2%80%9D%E7%9A%84%E6%96%B9%E6%B3%95 ?????tkLiiJ????????? http://auto.315che.com/langyue/qa23587857.htm?j59 http://auto.315che.com/shanghaiyingl

Knockout应用开发指南

第一章:入门 1.Knockout简介 (Introduction) Knockout是一个轻量级的UI类库,通过应用MVVM模式使JavaScript前端UI简单化. Knockout有如下4大重要概念: 声明式绑定 (Declarative Bindings):使用简明易读的语法很容易地将模型(model)数据关联到DOM元素上. UI界面自动刷新 (Automatic UI Refresh):当您的模型状态(model state)改变时,您的UI界面将自动更新. 依赖跟踪 (Depend

转:Google技术开发指南:给大学生自学的建议

原文来自于:http://blog.jobbole.com/80621/ 技术开发指南 想要成为成功的软件工程师,必须拥有坚实的计算机科学的基础.本指南针对大学生,给出一条自学途径,让学生以科班和非科班方式提高技术技能.读者可以学习本指南中介绍的课程,但是为了能正常毕业,还是请侧重于自己本身的专业.本指南中介绍的在线课程无法代替你在大学中的课程.但可以作为其补充,或者作为计算机方面的介绍. 使用说明: 请自行决定如何使用本指南 除了本指南中介绍的内容,如果你有其他想学的,尽情去学吧! 即使学习了

技术福利【干货】音视频 iOS CallKit 开发指南

iOS CallKit 开发指南 简介 CallKit 是融云音视频通话功能的 UI 界面 SDK.包含了单人.多人音视频通话的界面的各种场景和功能.您可以快速的集成 CallKit 来实现丰富的音视频通话界面,并进行自己的 UI 定制开发.同时我们开源了 CallKit,您可以根据您的需要去使用. GitHub 项目:CallKit 开源代码 使用说明 由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的 VoIP 不能互通. 音视频 SDK 为商用收费

HelloX项目github协同开发指南

概述 为了提高协同开发效率,HelloX项目已托管到github站点上. 依据眼下的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-project/HelloX_Kernel.git HelloX操作系统GUI模块项目:https://github.com/hellox-project/HelloX_GUI.git 面向STM32的移植版:https://github.com/hellox-project/HelloX_STM3

node开发指南中的microblog项目中遇到的问题总结及解决方法

1      使用connect-mongdo时,报错:Cannot read property 'Store' of undefined 解决: require('connect-mongo')的时候加一个参数express,如下: var express = require('express'); var MongoStore = require('connect-mongo')(express), 2      使用app.use(express.router(routers)) 提示 h