现在的位置: 首页 > 综合 > 正文

RED5集群原理

2013年10月05日 ⁄ 综合 ⁄ 共 3409字 ⁄ 字号 评论关闭

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 =
Provider
Service. getVODProviderFile(scope, name)
获取文件

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

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

5.       
自己的想法

java/spring/mina

边、源:

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

      
减小源负载连接

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

      
边任务:流分离、流缓存

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

      
在边上可以做统计流量

抱歉!评论已关闭.