前提:
电脑的系统为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实现负载均衡来降低推流延时
- 局域网内有3台Ip分别为10.0.0.118,10.0.0.119,10.0.0.120的服务器。
- 在三台服务器上部署好同样的推流项目,并在其中一台服务器上部署数据库,其他两台服务器远程访问。
- 在前文中已搭好nginx服务器上(10.0.0.118)进行nginx配置文件修改。
-
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; } } }
- 使用nginx -t检查nginx.conf文件是否有错,并重启nginx服务器。
注意:远程访问数据库时如出现1130-host...is not allowed to connect to this Mysql server的问题时。
- 查看是否MySQL Server绑定了本地地址
gedit /etc/mysql/mysql.conf.d/mysqld.cnf
- 修改bind-address = 127.0.0.1为bind-address = 0.0.0.0
- 授权
mysql -uroot -proot(密码) GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.118' IDENTIFIED BY 'root' WITH GRANT OPTION;
- FLUSH PRIVILEGES刷新该表。
参考:
https://blog.csdn.net/fireroll/article/details/51902018