声明
转载请注明出处:https://blog.csdn.net/impingo
项目地址:https://github.com/im-pingo/nginx-rtmp-module
服务器介绍
本系列博客中所用到的流媒体服务器是nginx-rtmp-module,文章头部有项目地址。 https://github.com/im-pingo/nginx-rtmp-module是在AlexWoo的基础上进一步开发的。
服务器功能
- 接收rtmp实时流
- 支持rtmp、http-flv、http-ts、hls、hls+(内存切片) 直播服务
- 支持实时录制功能
- 支持主动推流、拉流操作
- 支持动态推流、拉流操作
- 支持鉴权功能
- 支持流状态监控
- 支持时间戳修复
我所做的改进
- 已经修复了AlexWoo项目中的一些bug
- 使rtmp、http-flv、hls、http-ts直播支持mp3、h265编码
- 支持http-ts直播协议
- 支持直播时移服务
- 支持hls+(内存切片)服务(目前仅在dev分支,经过进一步测试后会合并到master分支上)
- 支持服务器端自动修复异常的音视频时间戳功能
- 修复流状态监控后台页面
未来计划
我会持续维护https://github.com/im-pingo/nginx-rtmp-module项目,并且希望能够得到更多人的能够发现问题并且及时在github上提出问题,只要本人看到都会给出回复并且及时修复。
近期准备上线的功能
- 接收http-ts推流
- 支持http-ts回源
- 支持http-fmp4直播协议
搭建流程
环境
本篇文章以Centos系统为例。
安装依赖
yum install -y gcc gcc-c++ openssl openssl-devel pcre-devel
安装
git clone https://github.com/im-pingo/nginx-client-module.git
git clone https://github.com/im-pingo/nginx-multiport-module.git
git clone https://github.com/im-pingo/nginx-toolkit-module.git
git clone https://github.com/im-pingo/nginx-rtmp-module.git
git clone https://github.com/nginx/nginx.git
cd nginx
./auto/configure --add-module=../nginx-client-module
--add-module=../nginx-multiport-module
--add-module=../nginx-toolkit-module
--add-module=../nginx-rtmp-module
make && sudo make install
配置文件
配置文件详解
后面会专门写几篇博客来解析其中的配置项和对应的应用场景。
修改配置
cd /usr/local/nginx
vim conf/nginx.conf
配置模板(此配置能够满足单点服务)
user
开启流监控页面
cd nginx-rtmp-module
cp stat.xsl /usr/local/nginx/html/stat.xsl
启动nginx
cd /usr/local/nginx
./sbin/nginx
注意事项
由于nginx需要监听80和1935端口,所以一定要确保你的服务器防火墙没有屏蔽这两个端口。
推流
RTMP推流地址: rtmp://your-server-ip/live/stream-name
播放地址:
- rtmp播放地址: rtmp://your-server-ip/live/stream-name
- http-flv播放地址:http://your-server-ip/flv/stream-name
- http-ts播放地址:http://your-server-ip/ts/stream-name
- hls播放地址:http://your-server-ip/hls/stream-name.m3u8
常用的推流工具有OBS和ffmpeg,具体使用方法这里不再赘述,只给出ffmpeg推送文件的命令。
ffmpeg -re -i your-input-file -vcodec libx264 -acodec aac -f flv rtmp://your-server-ip/live/stream-name
将上述命令中的your-input-file替换成你的媒体文件名,将your-server-ip替换成你的服务器ip地址,stream-name是你希望命名的流名(可随意)。 注意:ffmpeg命令中-re参数含义是按照真实时间戳速率读取文件,这个选项在推送文件到直播服务器中是必须的。另外-vcodec和-acodec是转码参数,如果你要推送的文件视频编码格式本身就是h264编码并且音频编码格式是aac或者mp3的话则不需要这两个参数。(重新编码非常消耗计算资源,使用时要注意)
后台监控
在浏览器中打开:http://your-server-ip/rtmp_stat 可以通过后台页面实时查看当前在线的推拉流情况。
![f6dc723a4bf7e008b544e39fb49a8e83.png](https://i-blog.csdnimg.cn/blog_migrate/ccb031b80ef2b2ef9279847a74c06d7a.jpeg)