Red5 项目的流事件回调流程和注意事项

回调流程

参考:Red5的一般客户端连接各个事件的触发顺序,经验证实际过程如下:

程序开始(在RED5启动的时候会自动去启动APP,从而触发以上事件)

Start:MyChatRoom
appStart:MyChatRoom

第一个客户端连接(MyChatRoom/lobby/roomA)

Start:/lobby
roomStart:/lobby
Start:/lobby/roomA
roomStart:/lobby/roomA
appConnect:0
connect
appJoin:0:
roomConnect:0
connect:/lobby
roomJoin:0:/lobby
roomConnect:0
connect:/lobby/roomA
roomJoin:0:/lobby/roomA

第二个客户端连接

appConnect:1
connect
appJoin:1:
roomConnect:1
connect:/lobby
roomJoin:1:/lobby
roomConnect:1
connect:/lobby/roomA
roomJoin:1:/lobby/roomA

第二个客户端离开

roomDisconnect:1
disconnect:/lobby/roomA
roomLeave:1:/lobby/

roomAroomDisconnect:1
disconnect:/lobby
roomLeave:1:/lobby

appDisconnect:1
disconnect:
appLeave:1:

第一个客户端离开

roomDisconnect:0
disconnect:/lobby/roomA
roomLeave:0:/lobby/roomA

stop:/lobby/roomA
roomStop:/lobby/roomA

roomDisconnect:0
disconnect:/lobby
roomLeave:0:/lobby

stop:/lobby
roomStop:/lobby

appDisconnect
disconnect:
appLeave:0:

程序退出

stop
appStop:

注意事项

1. 在我第一次测试时,我继承的Adapter实现了connect、appConnect、roomConnect三个方法。发现无论何时,程序只会回调connect而不会回调另外两个。查看connect的代码和注释发现若要区分地调用appConnet和roomConnect,就不需要实现connect函数,仅实现后两者就够了。否则,Red5只会调用connect,而传入的参数scope中有区别。

  对disconnect、appDisconnect、roomDisconnect同理。

  需要强调这一点有些重要。因为我在使用Red5的挑战认证(CRAM)例子的时候,发现当我在appStart中把例子作为listener注册到我的应用里面,应用程序根本不会回调例子的appConnect,解决方法就是这一点。应用程序把事件分发给了connect而不是appConnect。

  还要说的是,如果我们把CRAM的例子改为connect而不是appConnect,那可能需要对scope做一些区别。只有scope的值为app name的时候才执行例子中的代码。否则可能会多次执行认证过程。(未验证)

2. 我的程序中测试结果跟参考的博文在start和appStart、stop和appStop上的调用顺序有所差异,原因是什么暂时不了解。先记录下面线索:

  1. 执行线程是一直的,如日志

    [WARN] [Red5_Scheduler_Worker-10] org.red5.core.Application - stop scope Name: test
    [WARN] [Red5_Scheduler_Worker-10] org.red5.core.Application - roomStop

  2. 我继承的父类是MultiThreadApplicationAdapter,被我参考的博文使用的是ApplicationAdapter
  3. 版本号可能不一样,我使用1.0.5,对方使用的版本未知,看其发文的时间显然应该是比我早得多。
时间: 2024-11-13 10:36:57

Red5 项目的流事件回调流程和注意事项的相关文章

框架 day56 BOS项目练习(activiti,历史数据操作,流程变量,任务组,监听器,网关,spring整合)

BOS项目笔记第10天 内容: 1.历史数据查询(历史流程实例数据.历史任务数据.历史活动数据) 2.流程变量 3.组任务(候选人.候选组) 4.监听器(执行.任务) 5.网关(排他.并行) 6.spring整合activiti 1.    历史数据查询 历史是一个组件,它可以捕获发生在进程执行中的信息并永久的保存,与运行时数据不同的是,当流程实例运行完成之后它还会存在于数据库中. 在流程引擎配置对象中可以设置历史记录规则: 1.1   查询历史流程实例数据 表中内容包含已经完成的流程和正在进行

Android4.0 input事件输入流程详解(中间层到应用层)

在Android系统中,类似于键盘按键.触摸屏等事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序进行处理.系统启动时,窗口管理服务也会启动,该服务启动过程中,会通过系统输入管理器InputManager来负责监控键盘消息.当某一个Activity激活时,会在该Service下注册一个接收消息的通道,表明可以处理具体的消息,然后当有消息时,InputManager就会分发给当前处于激活状态下的Activity进行处理. InputManager的启动

android开源项目之OTTO事件总线(一)

Otto是由Square发布的一个着重于Android支持的基于Guava的强大的事件总线,在对应用程序不同部分进行解耦之后,仍然允许它们进行有效的沟通. 开源项目地址:https://github.com/square/otto 使用说明:http://square.github.io/otto/ 以下文字来源于官方说明加上自己的体会. 1,使用 创建一个事件总线实例: Bus bus = new Bus(); 因为Bus是唯一有效的(如果它是共享总线),我们建议通过注射或其他适当的方式来获得

Android按键事件发布流程

总结一下,Android按键事件发布流程 //InputReader.cpp void InputReader::loopOnce() { ... size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE);      if (count) { processEventsLocked(mEventBuffer, count); } ...  } InputReader线程启动后,循环调用l

浅析在项目开发(使用Delegate回调时)如何正确使用ARC

ARC(自动引用计数)是2011年伴随iOS5来的一项技术.简单来说就是通过LLVM3.0编译器帮助程序处理“一大部分”OC中的内存管理.为什么是“一大部分”,这个等会儿解释. 一直以来内存管理这个话题都是初学iOS开发,初学OC语言必须要面对的知识点,也是大家容易出错的地方.对象释放后调用会造成crash.不释放的对象会造成内存泄漏这些问题困扰着初学者.ARC的到来按理说应该是福音,不需要自己管理内存了嘛,多简单.但是随之而来的两个问题:1,我发现周围有些拥有2-5年开发经验的“半老手”(要谦

使用aicp实现事件回调模式

相对于asio事件等待池aiop的reactor模式,基于proactor模式的事件回调池aicp封转的更加的上层. 在类unix系统上 底层是基于aiop的实现,在一个线程里面进行事件等待,然后分发所有事件,在worker中处理完后调用回调返回到上层. 并对不同系统的aiop支持力度,进行针对性优化. 如果aiop支持边缘触发(例如:epoll.kqueue),尽量启用边缘触发,以减少系统api的频繁调用. 使用sendfile对发送文件进行优化 针对linux系统,启用native file

关于Android事件派发流程的理解

以前看了很多人介绍的Android事件派发流程,但最近使用那些来写代码的时候出现了不少错误.所以回顾一下整个流程,简单介绍从手触摸屏幕开始到事件在View树派发.从源码上分析ViewGroup.dispatchTouchEvent. 事件从触摸到View简述 Android的事件产生是从我们触摸屏幕开始,在经过Input子系统,最后达到我们的应用程序(或者经过WindowManagerService到达应用程序). 而其中Input子系统在Java层对应着InputManagerService,

android源码解析(三十)-->触摸事件分发流程

前面一篇文章中我们分析了App返回按键的分发流程,从Native层到ViewRootImpl层到DocorView层到Activity层,以及在Activity中的dispatchKeyEvent方法中分发事件,最终调用了Activity的finish方法,即销毁Activity,所以一般情况下假如我们不重写Activity的onBackPress方法或者是onKeyDown方法,当我们按下并抬起返回按键的时候默认都是销毁当前Activity.而本文中我们主要介绍触摸事件的分发流程,从Nativ

JS中的事件传播流程

JS中的事件传播流程 1,Javascript与HTML之间的交互是通过事件实现的. 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 可以使用侦听器来预定事件,以便事件发生时执行相应代码. 2,DOM事件流存在三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段. 事件流:事件发生时,事件在元素节点与根节点之间的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即DOM事件流.事件传播顺序的两种事件流模型:事件冒泡,事件捕获. 事件捕获(event capturing):事件从最不