Nginx-rtmp模块是一个基于Nginx的RTMP/HTTP流媒体服务器,可以实现高效的实时视频流传输。以下是实现直播媒体实时流效果的完整方案:
# 下载Nginx和rtmp模块源码
wget http://nginx.org/download/nginx-1.xx.x.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
# 解压并编译安装
tar -zxvf nginx-1.xx.x.tar.gz
unzip master.zip
cd nginx-1.xx.x
./configure --add-module=../nginx-rtmp-module-master
make
sudo make install
编辑Nginx配置文件(通常位于/usr/local/nginx/conf/nginx.conf
):
rtmp {
server {
listen 1935; # RTMP默认端口
chunk_size 4096;
application live {
live on;
record off;
# 低延迟配置
interleave on;
wait_key on;
wait_video on;
# HLS支持(可选)
hls on;
hls_path /tmp/hls;
hls_fragment 1s;
hls_playlist_length 3s;
# 降低延迟的额外配置
idle_streams off;
sync 100ms;
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /path/to/nginx-rtmp-module/;
}
}
}
rtmp {
server {
application live {
# 关键帧同步
wait_key on;
wait_video on;
# 减少缓冲
buflen 100ms;
# 禁用闲置流检测
idle_streams off;
# 同步音视频
sync 100ms;
}
}
}
hls on;
hls_path /tmp/hls;
hls_fragment 1s; # 分片长度
hls_playlist_length 3s; # 播放列表长度
hls_base_url http://yourserver/hls/;
hls_continuous on; # 连续模式
hls_cleanup on; # 自动清理旧分片
hls_nested on; # 嵌套模式
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency \
-c:a aac -f flv rtmp://yourserver/live/streamkey
-preset ultrafast
: 最快编码速度-tune zerolatency
: 零延迟调优-g 60 -keyint_min 60
: 设置关键帧间隔访问http://yourserver/stat
查看实时流统计信息。
Q: 延迟仍然很高(>5s)怎么办? A: 检查推流和播放端的缓冲设置,确保所有环节都配置了低延迟参数
Q: 如何验证延迟? A: 使用同步时钟或推流端显示时间戳,与播放端对比
Q: 出现卡顿或丢帧? A: 适当提高码率或降低分辨率,检查服务器带宽是否充足
通过以上配置,可以实现1-3秒延迟的实时直播效果。如需进一步降低延迟,可考虑WebRTC方案。