如何限制NGINX RTMP服务器码率及H.265支持性技术问询
解决NGINX RTMP输出码率固定及H.265编码支持问题
一、将输出码率调整至4Mbps
你的问题核心是NGINX RTMP未配置自定义转码参数,导致输出码率被固定在7Mbps。通过FFmpeg转码可以强制指定输出码率,具体操作步骤如下:
- 先确认你的NGINX已集成FFmpeg支持(若未集成,需重新编译NGINX时添加FFmpeg依赖,或安装带FFmpeg的NGINX预编译包)
- 打开NGINX的RTMP配置文件(通常是
/etc/nginx/nginx.conf中的rtmp块,或单独的/etc/nginx/conf.d/rtmp.conf) - 在推流对应的
application块中添加转码规则,示例配置如下:
rtmp { server { listen 1935; chunk_size 4096; application live { live on; # 转码为4Mbps的H.264流,推送到新的流地址(如live/stream_4m) exec ffmpeg -i rtmp://localhost/live/$name \ -c:v libx264 -b:v 4M -preset medium -c:a aac -b:a 128k \ rtmp://localhost/live/$name_4m; } } }
- 参数说明:
-b:v 4M用于指定视频码率为4Mbps;-preset medium平衡转码速度与画质,可根据服务器性能调整(fast转码更快,slow画质更优) - 保存配置后重启NGINX:
sudo systemctl restart nginx - 后续用户可拉取
rtmp://你的服务器地址/live/你的流名_4m获取4Mbps的输出流
如果之前已有转码配置但码率固定,只需将原配置中的码率参数(如7M)替换为4M即可。
二、NGINX RTMP对H.265编码的支持
NGINX RTMP本身仅作为流媒体传输载体,编码格式的支持完全依赖FFmpeg。只要你的FFmpeg编译时包含libx265编码器,就能实现H.265转码,将码率降至2Mbps,具体配置如下:
- 先验证FFmpeg是否支持libx265:执行
ffmpeg -codecs | grep libx265,若输出包含EV libx265则说明支持 - 若不支持,需重新编译FFmpeg并添加
--enable-libx265参数,或安装带libx265的FFmpeg包 - 在RTMP配置的
application块中添加H.265转码规则:
application live { live on; # 转码为2Mbps的H.265流 exec ffmpeg -i rtmp://localhost/live/$name \ -c:v libx265 -b:v 2M -preset medium -c:a aac -b:a 128k \ rtmp://localhost/live/$name_2m_h265; }
- 注意事项:H.265压缩效率更高,2Mbps的画质基本接近H.264的4Mbps,但需确保客户端支持H.265解码(主流播放器如VLC、Chrome最新版均支持,部分老设备或浏览器可能存在兼容性问题)
- 重启NGINX后,用户可拉取
rtmp://你的服务器地址/live/你的流名_2m_h265获取低码率H.265流
最后提醒:转码会消耗服务器CPU资源,若用户量较大,建议根据服务器性能调整转码预设,或使用硬件加速转码(如NVIDIA NVENC、AMD VCE)降低CPU负载。
内容的提问来源于stack exchange,提问作者Jonathan Robert
相关产品推荐
相关产品推荐

