如何限制RTMP及HLS单路直播流的输出带宽
单路RTMP/HLS直播流带宽限制可行方案
方案1:流媒体服务层配置(首选,操作最简单精度最高)
绝大多数RTMP/HLS直播服务基于Nginx + nginx-rtmp-module搭建,可直接通过模块自带指令实现单流限速,无需修改系统层面规则:
- RTMP流单路限速:在nginx.conf的rtmp配置块中新增限速指令,以下为1.5Mbps配置示例:
rtmp { server { listen 1935; application live { live on; hls on; hls_path /usr/local/nginx/html/hls; # 开启单连接带宽限制 bw_limit on; # 单路RTMP流限制为1.5Mbps(1500k比特每秒),要1Mbps则改为1000k bw_limit 1500k; } } }
- HLS流单路限速:HLS基于HTTP协议分发,可在Nginx的HTTP配置块对应HLS分发路径中添加
limit_rate指令,注意该指令单位为字节/秒,1.5Mbps对应192KB/s,1Mbps对应128KB/s:
http { server { listen 80; location /hls { root /usr/local/nginx/html; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } # 单路HLS流限制为1.5Mbps limit_rate 192k; } } }
配置修改后执行nginx -s reload生效即可。
方案2:系统层tc命令针对特定流量限速
如果你的流媒体服务不支持配置限速,可使用Linux系统自带的tc(Traffic Control)工具,针对RTMP(默认1935端口)、HLS服务端口做单连接限速,不会影响服务器其他业务带宽:
- 首先配置队列规则:
tc qdisc add dev eth0 root handle 1: htb default 10 tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
- 针对RTMP 1935端口配置单连接1.5Mbps限速:
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1.5mbit ceil 1.5mbit tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 1935 0xffff flowid 1:10
- 如果HLS用独立端口(比如8080),可参考上述规则新增对应端口的过滤规则即可。
如果需要删除规则执行tc qdisc del dev eth0 root即可。
方案3:进程级限速
如果需要限制整个流媒体服务进程的总出口带宽,可使用trickle工具针对进程限速,不会影响服务器其他进程的带宽使用:
- 安装trickle:
apt install trickle(Debian/Ubuntu系)或yum install trickle(CentOS/RHEL系) - 启动流媒体服务时添加限速参数,比如限制Nginx总上传带宽为10Mbps:
trickle -u 10000 nginx
注意trickle仅支持动态链接的程序,静态编译的Nginx无法使用该方式。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

