RED5集群原理

1.        边(Edge ):

1.         边的主要作用是管理连接,并可以复用

2.         当添加边时,集群里会广播该边的消息

3.         边连接源通过MRTMP:9035

4.         边上不需要部署服务

5.         边和源最好不要同一台机器

6.         连接由SimpleMRTMPEdgeManager管理,可自己实现IMRTMPEdgeManager

7.         它和客户端是长连接,故有连接数限制

2.        源:(origin

1.         当添加源时,该源的其他边会自动连上来

                                                    i.              因为如果边连接不到源(或者源中途停了),则会不断地隔时连接

3.        边启动--开放一个端口:RTMP用于监听客户端

1.         监听客户端minartmp:调用RTMPMinaTransportstart方法 ,EdgeRTMPMinaIoHandler 用于接收客户端请求,并向源取数据

a)         与客户端建立长连接:

                                                    i.              EdgeRTMPMinaIoHandler.sessionCreated()=>

                                                  ii.              EdgeRTMPMinaIoHandler.createRTMPMinaConnection()

                                                iii.              RTMPConnManager.createConnection()=>

                                                 iv.              创建EdgeRTMPMinaConnection并根据hashCode计算出conn.setId()

                                                   v.              RTMPConnManager.connMap存放(conn.getId(),conn

b)        访问资源

                                                    i.              EdgeRTMPMinaIoHandler.messageReceived()=>

                                                  ii.              EdgeRTMPHandler.messageReceived()=>

                                                iii.              handleConnect()=>

                                                 iv.              sendConnectMessage(conn)()=>

                                                   v.              SimpleMRTMPEdgeManager.lookupMRTMPConnection(conn)

                                                 vi.              将客户端请求资源转发给源

2.         连接源minamrtmp:根据red5-edge-core.xml里面配置MRTMPClientstart方法,创建线程轮循连接源,用于与源之间的连接,等待源返回资源,将资源发给客户端

a)         建立连接

                                                    i.              如果和源建立好连接后mrtmpManager.registerConnection(conn);

b)        源返回资源:

                                                    i.              EdgeMRTMPHandler. messageReceived()=>

                                                  ii.              conn =rtmpConnManager.getConnection(clientId);

                                                iii.              conn.write(rtmpBody.getRtmpPacket());

                                                 iv.              即将源返回的资源发给客户端

4.        源启动--开放两个端口:MRTMP用于监听边,8080用于应用(是否必须?)

1.         org.red5.server.Bootstrap入口:并找到red5.xml并交给spring初始化,

2.         通过red5.xml=red5-origin-core.xml

3.         调用MRTMPMinaTransportstart方法,该方法会监听9035端口(等待边的连接)

4.         与边建立连接

a)         执行OriginMRTMPHandler.sessionCreated()注册连接

b)        SimpleMRTMPOriginManager.registerConnection(conn);

5.         收到拿资源、返回资源:

a)         OriginMRTMPHandler.messageReceived()=>

b)        BaseRTMPHandler. messageReceived()=>

c)         BaseRTMPHandler.onInvoke();=>

d)        RTMPHandler.onInvoke()=>根据协议中的path可以知道tcUrl=rtmp://localhost:1933/helloWorld中的helloWorld,再通过它找到red5-web.xml

                                                    i.              channel.write(reply);=>

                                                  ii.              connection.write(packet);

e)         StreamService.play()

f)         PlayEngine.play()

g)        File file = ProviderService. getVODProviderFile(scope, name)获取文件

h)        msg = msgIn.pullMessage();//会生成*.flv.meta文件

i)          它是支持文件夹目录的

5.        自己的想法

java/spring/mina

边、源:

       边有效保护了源上媒体安全

       减小源负载连接

       边有压缩作用的意味:将所有连接的请求复用

       边任务:流分离、流缓存

       和源建立好连接后,客户端的请求可以利用这个连接

       在边上可以做统计流量

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值