Web直播系列4——ffmpeg实时推流+nginx负载均衡降低直播延时_1

前提:

 

电脑的系统为64位Ubuntu16.04TLS及系列文章2中所实现的简易直播平台https://blog.csdn.net/zzhang_12/article/details/79789482

目的:

在网络带宽一定的情况下,从nginx,ffmpeg两方面尝试降低延时

Ubuntu下的实现方法:

  • 注意:在不从提高网络带宽和改善硬件性能等方面着手,而是从修改nginx,ffmpegr参数等方面着手,可能会在降低延时的同时,也降低性能。

1)从ffmpeg推流方面来降低延时(ffmpeg会有40~50帧左右延时)

  • 关闭sync-lookahead
  • 降低rc-lookahead
  • 降低threads
  • 禁用rc-lookahead
  • 禁用b-frames
  • 缩小GOP
  • 开启x264的 -preset fast/faster/verfast/superfast/ultrafast参数
  • 使用-tune zerolatency
  • 注意:使用方法8可以使延时降低只0-1帧之间,但画面质量损失也最严重。个人使用过3,7,8有效。

2)从nginx服务器方面来降低延时(本文遇到的情况是同时推多个视频流)

  • 本文采用nginx+tomcat实现负载均衡来降低推流延时
  1. 局域网内有3台Ip分别为10.0.0.118,10.0.0.119,10.0.0.120的服务器。
  2. 在三台服务器上部署好同样的推流项目,并在其中一台服务器上部署数据库,其他两台服务器远程访问。
  3. 在前文中已搭好nginx服务器上(10.0.0.118)进行nginx配置文件修改。
  4.  
    http {
        #include      /nginx/conf/naxsi_core.rules;
        include       mime.types;
        default_type  application/octet-stream;
    
        #Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配
        #1、轮询(默认)
        #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
        #2、weight
        #指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
        #2、ip_hash
        #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
        #3、fair(第三方)
        #按后端服务器的响应时间来分配请求,响应时间短的优先分配。
        #4、url_hash(第三方)
        #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。  
    
         upstream 10.0.0.118{
             server 10.0.0.118:8080 weight=2;
             server 10.0.0.119:8080 weight=1;
             server 10.0.0.120:8080 weight=1;
         }
    
        sendfile        off;
        #tcp_nopush     on;
    
        server_names_hash_bucket_size 128;
    
        client_body_timeout   10;
        client_header_timeout 10;
        keepalive_timeout     30;
        send_timeout          10;
        keepalive_requests    10;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  10.0.0.118;
    
    	 location / {
    		root   html; 
        	        index  index.html index.htm;
    		proxy_pass http://10.0.0.118;   
                           }
                }
    }
  5. 使用nginx -t检查nginx.conf文件是否有错,并重启nginx服务器。
  • 注意:远程访问数据库时如出现1130-host...is not allowed to connect to this Mysql server的问题时。
  1. 查看是否MySQL Server绑定了本地地址
    gedit /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 修改bind-address = 127.0.0.1为bind-address = 0.0.0.0
  3. 授权
    mysql -uroot -proot(密码)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.118' IDENTIFIED BY 'root' WITH GRANT OPTION;
  4. FLUSH PRIVILEGES刷新该表。

参考:

https://blog.csdn.net/fireroll/article/details/51902018

https://blog.csdn.net/dylanzr/article/details/52135196

https://www.cnblogs.com/zwb121/p/7339182.html

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Windows下一站式搭建ffmpeg推流nginx-http-flv-module直播拉流和flv.js播放环境可以按照以下步骤进行操作: 1. 首先,下载并安装FFmpeg。可以在官方网站(https://www.ffmpeg.org/)上找到适合你的操作系统的安装文件,然后按照指示进行安装。 2. 下载nginx服务器,并在安装目录下找到“conf/nginx.conf”文件,使用文本编辑器打开。编辑该文件,配置推流和拉流的相关设置。 3. 在“http”部分添加以下配置信息: ``` rtmp { server { listen 1935; application live { live on; allow publish all; allow play all; push rtmp://127.0.0.1/live/$name; } } } ``` 4. 在“server”部分添加以下配置信息: ``` location /live { flv; chunked_transfer_encoding on; root html; } ``` 5. 打开命令行,并定位到nginx安装目录的文件夹下运行:“start nginx”命令启动nginx服务器。 6. 下载并安装flv.js(https://github.com/Bilibili/flv.js)。 7. 在项目的HTML文件中引入flv.js库文件,并使用以下JavaScript代码播放视频: ``` if (flvjs.isSupported()) { var videoElement = document.getElementById('videoElement'); var flvPlayer = flvjs.createPlayer({ type: 'flv', url: 'http://localhost/live/stream.flv' }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); } ``` 8. 访问网页并检查视频是否能够正常播放。 通过以上步骤,你可以在Windows系统下一站式搭建起FFmpeg推流nginx-http-flv-module直播拉流和flv.js播放环境,实现流媒体的推流、拉流和播放功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值