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上的调用顺序有所差异,原因是什么暂时不了解。先记录下面线索:
- 执行线程是一直的,如日志
[WARN] [Red5_Scheduler_Worker-10] org.red5.core.Application - stop scope Name: test
[WARN] [Red5_Scheduler_Worker-10] org.red5.core.Application - roomStop - 我继承的父类是MultiThreadApplicationAdapter,被我参考的博文使用的是ApplicationAdapter
- 版本号可能不一样,我使用1.0.5,对方使用的版本未知,看其发文的时间显然应该是比我早得多。
Red5 项目的流事件回调流程和注意事项的更多相关文章
- MQTT事件回调流程
TLS 如下强调: 1.每个IOT设备应该有一对独有的公钥/私钥 2.SERVER的认证通过SERVER的"root certificate" SSL产生过程: $ openssl ...
- Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...
- Android按键事件传递流程(二)
5 应用层如何从Framework层接收按键事件 由3.2和4.5.4节可知,当InputDispatcher通过服务端管道向socket文件描述符发送消息后,epoll机制监听到了I/O事件, ...
- 细说javascripe事件传播流程
当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...
- ZT ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01
ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01 分类: 嵌入式 android framework 里java调用native,使用JNI机制,ja ...
- 「SAP技术」A项目关联公司间退货STO流程
[SAP技术]A项目关联公司间退货STO流程 1)创建公司间退货STO单据. 如下图示的公司间退货STO 4500000572, 2),VL10B, 创建交货单. 如下图交货单号:80044918, ...
- JS中的事件传播流程
JS中的事件传播流程 1,Javascript与HTML之间的交互是通过事件实现的. 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 可以使用侦听器来预定事件,以便事件发生时执行相应代码. 2 ...
- 用block做事件回调来简化代码,提高开发效率
我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...
- Red5 1.0.0RC1 集成到tomcat6.0.35中运行&部署新的red5项目到tomcat中
1.下载red5-war-1.0-RC1.zip 解压之得到 ROOT.war 文件. 2.处理tomcat. 下载apache-tomcat-6.0.35-windows-x86.zip包,解压到你 ...
随机推荐
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- Netty源码阅读(一) ServerBootstrap启动
Netty源码阅读(一) ServerBootstrap启动 转自我的Github Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速 ...
- WebStorm快捷键收集
1.webstorm快捷键: IntelliJ-Idea 的快捷键 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 重构-重命名 Ctrl+X 删除行 C ...
- PHP实现斐波那契数列非递归方法
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n ...
- yii 缓存探究
1.在配置文件中 //在权威指南上是'cache' 其实可以根据不同的缓存组件起不同的名称 //memcache缓存 'memcache' => array( 'class' => 'sy ...
- C/C++易错点
问:void print( int arr[][], int size );这个函数声明是对是错? 当然是错的了,这个根本不是什么函数声明的问题,而是数组声明的问题,int arr[][]这个声明就是 ...
- android 布局权重问题(转载)
//权重和父容器orientation有关 horizontal 指水平方向权重 android:layout_width vertical 指垂直方向权重 android:layout_he ...
- 启动Tomcat出现Using CATALINA_BASE
有一次命令行启动Tomcat的时候,出现: Using CATALINA_BASE: "D:\apache-tomcat-6.0.35"Using CATALINA_HOME: & ...
- Docker系列
Docker学习系列(五):Dockerfile文件 什么是Dockerfile? 它是一个名称为Dockerfile的文件 它是一个脚本文件,由一系列命令和参数构成 Dockerfile是自动构建d ...
- jQuery获取屏幕的宽度
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...