两台服务器搭建nginx流媒体服务器,这两台服务器通过F5做负载,
映射到外网,推流可以推成功,获取流的时候有可能获取不到。
举例描述: 两台nginx流媒体服务器 A 和 B . 通过F5做负载有个外网ip。
推流通过外网IP 可以成功。
获取流的时候有可能获取不到, 比如推流是到A服务器,获取流通过F5去B服务器
,这时候是取不到,这个问题有什么解决办法?欢迎留言帮忙提供解决办法,谢谢!
这个问题我们开始使用共享磁盘,发现还是不能实现这个功能,最后看到一篇文章地址:https://blog.nanpuyue.com/2018/047.html
给我启发,最后是否 nginx中的配置 push 和 pull 参数。
A和B服务器 nginx.conf 基本相同: 相关配置如下:
A服务器
rtmp {
server {
listen 1953;
chunk_size 8192;
application live {
live on;
#开始推流回调,url地址为java接口 cloudLive
#on_publish http://IP:8080/cloudLive/vin/auth;
}
#hls配置
application hls {
live on;
hls on;
hls_path /share/local/hls;
push rtmp://B服务器IP:1953/hls; # 推类似转发到B服务器
pull rtmp://B服务器IP:1953/hls; #拉B服务器转发的流视频
#开始推流回调 认证接口,url地址为java接口
#on_publish http://IP:8080/项目/vin/auth;
#推流停止回调 ,url地址为java接口
#on_done http://IP::8080/cloudLive/vin/auth;
}
}
}
B服务器
rtmp {
server {
listen 1953;
chunk_size 8192;
application live {
live on;
#开始推流回调,url地址为java接口 cloudLive
#on_publish http://IP:8080/cloudLive/vin/auth;
}
#hls配置
application hls {
live on;
hls on;
hls_path /share/local/hls;
push rtmp://A服务器IP:1953/hls; # 推类似转发到A服务器
pull rtmp://A服务器IP:1953/hls; #拉A服务器转发的流视频
#开始推流回调 认证接口,url地址为java接口
#on_publish http://IP:8080/项目/vin/auth;
#推流停止回调 ,url地址为java接口
#on_done http://IP::8080/cloudLive/vin/auth;
}
}
}
这样配置通过F5负载从任意一台服务器上拉流视频和 推流视频。
这样配置有几个问题
1、每个服务器同时存在相同的一份文件,浪费磁盘。(停止推流、流文件会被删除)
2、需添加多服务器时,push和pull 配置比较繁琐,不易扩展。
最好的建议是把读写流分开,写视频的 可以做一个集群,暂时叫集群A,拉视频流做一个集群B,写入流A集群,转发到B集群和第三方服务器。大概架构图可以看一下以下图片。大概粗略的画一下, 如有问题欢迎留言谈论,谢谢!