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( "rtmp://127.0.0.1/red5_5", username);

使用到的As3中NetConnection的方法如下:

(1)connect  :用于网络的连接 第一个参数可以写Url地址

第二个参数是:携带的用户信息

(2) addEventListener 第一个参数是传入 netStatus 函数的参数值。

其包含的数据有连接是否成功,如上图是连接成功是,返回“NetConnect.....Success”;

而red5服务端,是这样运行的:

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){
          //1,判断是否有用户名         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);             //2 ,新建作用域SharedObject
             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);
     }}

如下图所示:

3,最后是发送与接收信息:

时间: 2024-08-29 01:56:06

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

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; impor

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

PMBOK 指南 第三章 项目经理的角色

项目经理的角色 3.1 概述 项目经理类似于交响乐团的指挥 成员与角色 在团队中的职责 知识和技能:具备项目管理知识.技术知识.理解和经验. 3.2 定义 项目经理是由执行组织委派,领导团队实现项目目标的个人. 3.3 影响力范围 3.3.1 概述 项目经理的影响力范围示例 3.3.2 项目 领导项目团队实现项目目标和相关方的期望.利用可用资源,以平衡相互竞争的制约因素: 项目发起人.团队成员与其他相关方的沟通者. 与团队和发起人等相关方沟通的能力: 通过多种方法(口头.书面和非言语)培养完善的

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.

蚂蚁区块链BaaS平台应用开发指南(三):从一个简单合约开始

Could IDE的入口 新版的Cloud IDE已经去除证书配置的要求,开发者开通区块链之后可直接开始智能合约的开发.在本节中,我们将会使用Could IDE来进行合约的编写.编译和调试的工作.如果是体验链,请在新手引导引导界面,找到合约体验链卡片,点击调试合约. 如果是正式的托管链或区块链创新大赛的链,通过合约管理>新建工程或编辑已有工程进入Cloud IDE. 从一个最简单的合约开始 选择目标链 编译部署合约前,要指定好所要部署的链以及部署用的账户:在右边栏中,点击环境配置: 在本例中,选

JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系

转载请注明出处:http://blog.csdn.net/xyang81/article/details/42047899 当我们在调用一个Java native方法的时候,方法中的参数是如何传递给C/C++本地函数中的呢?Java方法中的参数与C/C++函数中的参数,它们之间是怎么转换的呢?我猜你应该也有相关的疑虑吧,咱们先来看一个例子,还是以HelloWorld为例: HelloWorld.java: package com.study.jnilearn; class MyClass {}

Less开发指南(三)- 代码文件跟踪调试

案例背景:在大型网站中,css样式划分为多个模块文件,如reset.css,layout.css,skin.css等等(颗粒化越小,样式重用率越高),页面需要的时候引入它们即可! 回到less项目中这里,我们也可以将划分为 reset.less,layout.less,skin.less等,然后在本页面样式(如index.less)嵌入它们(嵌入的方式,就减少了多个HTTP请求,性能相对好,也可以了解为合拼),代码如下: index.less @import 'block/reset.less'

IOS 开发指南 第三章学习

1 uiwindow 的rootwiew决定了应用程序的类型 2 反映视图关系的3个属性 superview:有且仅有一个(除了uiwindow) subviews:子视图的集合 window:获得当前视图的uiwindow对象 3 按钮至少有两种:uibutton uibarbuttonitem 4 selector是一个指针变量,意思是将方法指定给控件去做 sender是事件源,指要使用这个方法的控件对象 5 使控件的事件与动作关联在一起 1)addTarget:action:forCont

Knockout应用开发指南 第三章:绑定语法

12   value 绑定 目的 value绑定是关联DOM元素的值到view model的属性上.主要是用在表单控件<input>,<select>和<textarea>上. 当用户编辑表单控件的时候, view model对应的属性值会自动更新.同样,当你更新view model属性的时候,相对应的元素值在页面上也会自动更新. 注:如果你在checkbox或者radio button上使用checked绑定来读取或者写入元素的 checked状态,而不是value