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

猜你喜欢

转载自blog.csdn.net/zzhang_12/article/details/79798027
今日推荐