官方WIKI:https://github.com/simple-rtmp-server/srs/wiki/v1_CN_Forward
一、何为Forward
Forward 翻译成中文是向前、前头的、发送等(来自google翻译),还有好多词性。
在SRS中可以理解为把Master节点获得直播流广播给所有的Slave节点。我觉得广播这个词可能要比forward更容易理解。也可以理解为转发,即master把接收到的所有流都转发给Slave节点,即master节点由多少路直播流,那么在每个slave节点也会多少路直播流。
注:在SRS中还有另外一种集群方式,edge方式。注意两种方式的用词不同。
在Forward模式中,中心节点叫Master,边缘节点叫Slave;
在edge模式中,中心节点叫origin(源站),边缘节点叫做edge。
二、适用场景
Forward适合搭建小型集群,为什么这么说呢?因为每个slave节点都和master节点有相同数量的直播流,那么请看下图(从右往左,1、2、3是步骤):
编码器推流给master,那么master就会Forward到每一个Slave。那么在slave节点上不论需不需要都会有master过来的流。试想一下,如果编码器的数量为10,那么master到slave之间的带宽就是:带宽=10 * slave的个数 *直播流码率,随着slave的增多,master的出口带宽会不断提高。而现实是,在某些slave节点其实根本没有人看……这样就造成了master到slave之间的带宽浪费。
所以说Forward适合与搭建小型集群。那么大集群怎么破?----使用edge功能(且看下次分解)。
三、搭建负载均衡的直播流媒体系统
从负载均衡往后其实都是在一个内部环境中,通过负载均衡服务器来分流访问压力到不同的流媒体服务器。
一)负载均衡设备的选择有很多:
财主:F5之类的商业解决方案,稳定、可靠、操作界面友好等等,缺点就是价格高,有钱人才能玩的起。
屌丝:LVS、Haproxy、Nginx(仅限于交付http stream),缺点就是需要自己各种配置,需要动手能力强等,优点就是不花钱,性能也不比商业解决方案差。
这里要提醒一下,不论什么方式请打开ip_hash(不同的设备和软件称呼不同,但作用相同),即保持一个用户的访问总是被负载均衡到固定的后端服务器上,这样就可以避免很多的问题。
二)常见的2个中流,RTMP和HLS的交付方式:
RTMP:只要编码器推流到master上即可,当用户访问负载均衡时,负载均衡服务器分配一个后端服务器为用户服务。
HLS:编码器推流到master上,如果编码器推来的流不是h264+aac的话再master进行直播转码(非h264+aac不能切hls片),然后在slave上进行HLS切片。负载均衡服务器调度用户请求到一台后端服务器进行访问。 这里就需要注意了,一定要打开ip_hash。
四、模拟配置
一)编码器推流(ffmpeg模拟)
./ffmpeg -re -i "abc.rmvb" -vcodec libx264 -vprofile baseline -vb 800k -acodec libfdk_aac -ab 96000 -ar 48000 -ac 2 -f flv rtmp://SRS_Master_IP:1935/live/test
二)Master服务器配置
listen 1935;
pid ./objs/srs.pid;
max_connections 10240;
vhost __defaultVhost__ {
gop_cache on;
forward 192.168.1.6:1935 192.168.1.7:1935;
}
三)Slave服务器配置
listen 1935;
pid ./objs/srs.1935.pid;
max_connections 10240;
vhost __defaultVhost__ {
gop_cache on;
}
五、播放流
源站播放地址:
rtmp://SRS_Master_IP:1935/live/test
Slave播放地址:
rtmp://SRS_Slave_IP:1935/live/test
转载自:https://my.oschina.NET/fengjihu/blog/416883