使用nginx的rtmp模块搭建RTMP和HLS流媒体服务器
文章目录
- 使用nginx的rtmp模块搭建RTMP和HLS流媒体服务器
- 环境搭建
- 参数配置
- 验证结果
前面文章中已经介绍了《使用nginx搭建rtmp流媒体服务器》和《使用nginx搭建HLS服务器》,其实nginx的RTMP模块本身就支持接收RTMP推流、提供RTMP拉流服务及HLS切片器功能,因此可以直接通过nginx的rtmp模块直接接收RTMP推流、对音视频流进行HLS切片,而不需要ffmpeg去生成切片。
环境搭建
操作系统操作centos 7版本,有关nginx源码下载、编译和安装过程,参照《使用nginx临时搭建rtmp服务器》文章,这里不做过多介绍
参数配置
修改nginx.conf文件,修改后如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
# rtmp配置
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
##开启RTMP实时流推流和拉流服务,地址格式:rtmp://ip:1935/live/xxx
live on;
##开启HLS切片服务
hls on;
##HLS切片保存路径
hls_path /tmp/hls;
record off;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#HLS切片文件及索引文件拉取路径
location /live{
add_header Access-Control-Allow-Origin *;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
# HLS切片文件目录
alias /tmp/hls;
expires -1;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
这里需要配置RTMP服务相关参数,开启RTMP实时推拉流,开启HLS,配置HLS切片及播放列表索引文件存放路径、切片长度、播放列表长度:
application live {
##开启RTMP实时流推流和拉流服务,地址格式:rtmp://ip:1935/live/xxx
live on;
##开启HLS切片服务
hls on;
##HLS切片保存路径
hls_path /tmp/hls;
hls_fragment 4;
hls_playlist_length 30;
record off;
}
然后配置HLS协议的HTTP服务,支持播放器拉取播放列表和切片文件:
location /live{
add_header Access-Control-Allow-Origin *;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
# HLS切片文件目录
alias /tmp/hls;
expires -1;
}
配置完成后,执行:/home/wangdenuan/nginx/sbin/nginx -s reload
,使得配置生效。
验证结果
- 在PC机上安装ffmpeg,具体安装方式可百度
- 找一个可播放的RTSP地址,通过vlc播放器验证rtsp地址播放是否正常,这里以rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream为例:
- 打开命令提示行,输入如下ffmpeg命令,推送rtmp视频流到rtmp服务器,这里假设rtmp服务器IP为:10.45.12.29
ffmpeg -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec copy -acodec copy -f flv rtmp://10.45.12.29:1935/live/test
ffmpeg推流命令成功后,出现如下图所示界面: - 用vlc播放如下串流:rtmp://10.45.12.29:1935/live/test,验证是否rtmp拉流成功:
- 用VLC播放如下串流:http://10.45.12.29/live/test.m3u8,验证是否hls能够播放成功: