如何创建Red5应用程序

news/2024/11/9 15:43:05

一.序言:

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

本文档的目的是描述如何在Red5中创建应用程序.需要使用Red5中所给的API.

二.应用程序目录:

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

在默认的情况下,Red5将所有的应用程序存放在根目录的"Webapps"目录下面.因此在创建一个新的应用程序之前,首先需要在这个目录中创建一个子目录.习惯上这个子目录的名字应该和马上创建的应用程序的名字是一样的.

在你的新应用程序中,需要一个"WEB-INF"的文件夹用来存放关于使用类情况的配置文件.你可以使用Red5提供的一个模板,它可以在"doc/templates/myapp"文件夹中找到.

在Red5启动的时候,所有文件夹中的配置文件都会搜索到.

三.配置:

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

这个主要的配置文件是:"Wed.xml".它包含了如下参数:

1.globalScope:

如下例子"globalScope"为参数名字,"default"为参数对应的默认值.

<context-param>

  <param-name>globalScope</param-name>

  <param-value>default</param-value>

</context-param>

2.contextConfigLocation

设置应用程序中控制文件的名称.这些控制文件列出了应用程序连接或断开客户端的类,同时也提供客户端可以调用的方法的类.

控制文件还设定了这些类的有效范围.

在这个路进中还可以使用通配符,从而可以包含进来多个文件.::

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/red5-*.xml</param-value>

  </context-param>

3.locatorFactorySelector

指定根应用程序上下文配置文件通常是"red5.xml"::

  <context-param>

    <param-name>locatorFactorySelector</param-name>

    <param-value>red5.xml</param-value>

  </context-param>

4.parentContextKey

父上下文的名字,通常是"default.context"::

  <context-param>

    <param-name>parentContextKey</param-name>

    <param-value>default.context</param-value>

  </context-param>

5.log4jConfigLocation

指定子log系统的路径.

  <context-param>

    <param-name>log4jConfigLocation</param-name>

    <param-value>/WEB-INF/log4j.properties</param-value>

  </context-param>

6.webAppRootKey

应用程序唯一的名称::

  <context-param>

    <param-name>webAppRootKey</param-name>

    <param-value>/myapp</param-value>

  </context-param>

四.配置文件

每一个控制配置文件都至少包括如下三种Bean.

1.Context

这个Context bean有个预留的名字"web.context",它用来将路径放入域中,同时查找服务和控制器.默认的类是"org.red5.server.Context".

具体代码如下:

<bean id="web.context" class="org.red5.server.Context" autowire="byType" />

每个应用程序只能有一个Context.然而这个Context能够夸多个域共享.

2.域(Scope)

每一个应用程序至少有一个Scope,这个Scope将控制器(Handler)连接到了Context和Server.这个Scopes用来建造一个树结构,客户端能够连接到这个树上的任何一个节点和共享对象(例如共享对象或者实时流).你可以将Scope看作是一个房间或者实例.

默认的Scope通常有个名字"web.scope",但是这个名字可以任意的选择.

这个Bean有如下的属性.

"server"----设置全局的服务器域"red5.server".

"parent"----设置父域,通常是"global.scope".

"context"----指当前域,使用上面提到的"web.context"

"handler"----当前域的控制器(Handler,下面将会提到).

"contextPath"----连接当前域的路径.

"virtualHosts"----用逗号分割开当然域(scope)运行的一组主机名或者IP地址.

例如:

  <bean id="web.scope" class="org.red5.server.WebScope"

      init-method="register">

    <property name="server" ref="red5.server" />

    <property name="parent" ref="global.scope" />

    <property name="context" ref="web.context" />

    <property name="handler" ref="web.handler" />

    <property name="contextPath" value="/myapp" />

    <property name="virtualHosts" value="localhost, 127.0.0.1" />

  </bean>

你可以将"contextPath"和"virtualHosts"的值转移到一个单独的properties文件,然后用参数表示.如果是这样的话,你就需要另外的一个Bean::

  <bean id="placeholderConfig"

      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location" value="/WEB-INF/red5-web.properties" />

  </bean>

假设一个"red5-web.properties"文件包含如下数据::

  webapp.contextPath=/myapp

  webapp.virtualHosts=localhost,127.0.01

那么,在Scope中的参数将会变成如下样子::

  <property name="contextPath" value="${webapp.contextPath}" />

  <property name="virtualHosts" value="${webapp.virtualHosts}" />

这个"contextPath"将会被看作域的"根(root)".当需要动态创建扩展域的时候,你可以在这个路进后边添加新的元素.

这个额外域将使用同一个控制器(Handler),但是他们都拥有自己独立的属性,共享对象和实时流.

3.控制器(Handlers)

每一个Context都需要一个控制器(Handler),它实现一个方法,这个方法将在一个客户端连接这个域(Scope)时触发.这个控制器需要实现的接口是:"org.red5.server.api.IScopeHandler",然而如果你想控制访问共享对象或者流,你也可以实现其它接口.

有一个"org.red5.server.adapter.ApplicationAdapter"作为一个基础类可以在类库中找到,这个类就是一个简单实现的例子.更多详细信息请查阅javadoc文档.

这个Bean作为一个域的控制器要进行如下配置::

  <bean id="web.handler" class="the.path.to.my.Application" singleton="true" />

这个ID的参数就是上面提到的域(scope)设置.

五.简单控制器

用下面几行代码实现一个简单的控制器::

  package the.path.to.my;

  import org.red5.server.adapter.ApplicationAdapter;

  public class Application extends ApplicationAdapter{

  public Double add(Double a,Double b){

  return a+b;

  }

  }

 

假设已经经过了上面的配置,你可以通过如下的脚本来调用这个方法.

  nc = new NetConnection();

  nc.connect("rtmp://localhost/myapp");

  nc.onResult = function(obj){

  trace("This result is " +obj);

  }

  nc.call("add",nc,1,2);

输出的结果如下:

The result is 3;


http://www.niftyadmin.cn/n/530361.html

相关文章

elasticsearch-mathc和term的区分

elasticsearch和mysql在思想上是有不同的&#xff0c;elasticsearch有分词一说&#xff0c;比如北京奥运分词成北京&#xff0c;奥运&#xff0c;北京奥运。分词要要考虑两点&#xff0c;一个是查询字符串要不要分词&#xff0c;还有就是原存储字段是不是精确值。 1. match 查询…

easyexcel设置下拉选项不能覆盖_Excel2016下拉菜单怎么做?

在 Excel 中&#xff0c;制作一些有选择分类功能的表格时&#xff0c;需要制作下拉菜单&#xff0c;以便于每一行选择和减少输入&#xff0c;那么 Excel下拉菜单怎么做&#xff1f;这主要用公式中的定义名称和数据中的数据验证两项功能&#xff0c;用这两项功能可以制作出一级下…

《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程

计算机原理概念&#xff1a; 1、CPU和内存中的存储单元通信线路称为总线&#xff08;BUS&#xff09;&#xff0c;总线是被指令和数据复用的&#xff0c;所以也称为前端总线。 2、计算机中计算频率的时间标准即晶体振荡器原理&#xff0c;精确计算时间长度&#xff0c;根据相同…

FLASH与XML的数据交互

在FLASH中,使用XML接口获取外部数据是最有效的方法之一.(通常还有WebSerivce接口和LoadVars方法) 下面来看一个简单的XML文档(city.xml) 这个文档描述的是城市地区的信息 xml version"1.0" encoding"gb2312"?> <root> <city name"上海&q…

python mysql数据库编程_python使用mysql数据库

import pymysqlconn pymysql.connect( #Connect() 方法用于创建数据库的连接&#xff0c;里面可以指定参数&#xff1a;用户名&#xff0c;密码&#xff0c;主机等信息host localhost, #这只是连接到了数据库&#xff0c;要想操作数据库需要创建游标port 3306,user root,pa…

三目运算符判断三个值_Day10:Java语言基础-运算符之赋值运算符

大家好&#xff0c;我在这里讲解一下为什么我在课程中大量使用图片来展示我的演示程。是因为虽然编辑文章的时候&#xff0c;有代码块功能可以实现代码的结构展示。但是在手机端的样式兼容做的不够好&#xff0c;我在手机端看了自己的内容&#xff0c;觉得很难看&#xff0c;所…

让Flash更好的利用Xml

英文原文地址&#xff1a; http://www.darronschall.com/weblog/archives/000065.cfm 在网上许多XML的解释数据都涉及到在FLASH不断地从一个XML文档中读取节点树来释放数据。这种做法有两个不足的地方&#xff1a;速度和可读性。下面我将教大家一种不是新的&#xff0c;但是&am…

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)...

1 //数组间的关系arr[]中的数字为几&#xff0c;[]内就有几个数2 //{ }内的数是从0开始&#xff0c;如需要打印应从0开数3 如{2,6,9,8,7}打印arr[4]就是74 #include <stdio.h>5 #include <stdlib.h>6 int main()7 {8 int arr[] { 1,2,3,4,8};9 10 …