• 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,对方使用的版本未知,看其发文的时间显然应该是比我早得多。
  • 相关阅读:
    CentOS 7.3 系统安装配置图解教程
    图床神器:七牛云 + Mpic + FScapture
    Markdown 使用教程
    Python小游戏、小程序
    深入理解Python中的yield和send
    替代crontab,任务计划统一集中管理系统cronsun简介
    变量命名神器Codelf
    Spring Aspect实现AOP切面
    SpringCloud之注册中心Eureka搭建
    SpringCloud中eureka配置心跳和剔除下线的服务的时间
  • 原文地址:https://www.cnblogs.com/developerdaily/p/4647752.html
Copyright © 2020-2023  润新知