目录
- 参考资料
- 基础工作流程
- 正文
- 流媒体服务器
- 安装VMware和CentOS 7.0
- 安装 git
- 下载Nginx和nginx-http-flv-module源代码
- 克隆nginx-http-flv-module源代码
- 下载Nginx源码
- 编译安装
- 修改nginx配置文件
- 启动Nginx
- 防火墙
- OBS推流
- VLC、flv.js拉流、播放
- VLC
- flv.js
参考资料
通过 nginx 搭建一个基于 http-flv 的直播流媒体服务器CentOS 7 安装配置gitVMwear安装Centos7超详细过程nginx +rtmp+nginx-http-flv-module 环境搭建CentOS7查看和关闭防火墙
在参考上述资料时我遇到一些坑,所以没有坑的地方我会直接略过(直接参考上述资料),有坑或不同的的地方会详细说。
基础工作流程
- 视频来源(包括任何进行直播行为的设备:电脑、手机、网络摄像头)将视频数据“推流”到流媒体服务器上的某个(端口+地址)
- 视频接收方通过另一个(端口+地址)“拉流”视频数据以收看直播内容
本例中:
- 流媒体服务器由加载了nginx-http-flv-module模块的nginx充当,nginx安装在 VMware虚拟机 上的CentOS 7.0(选择后缀为DVD-2009的iso文件)中
- 视频来源使用 OBS 进行推流
- 接收方使用 flv.js (ReadMe中的Demo) 或者 VLC播放器 进行播放测试
- 本例的实现效果有15s左右的时延
正文
流媒体服务器
安装VMware和CentOS 7.0
下载并安装VMware和CentOS 7.0,步骤参考上方参考资料。注册自己搞定。
安装过程中打开网卡后,需要记下获取到的IP地址(安装完毕后再查询亦可),后面会用上。
注意这样安装好的CentOS 7.0是缺少一些功能的(主要是c的编译器),用root登陆后执行以下命令:
yum -y install unzip
yum -y install gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
安装 git
参考上方资料,注意配置信息处的用户名和邮箱要修改成自己的。
下载Nginx和nginx-http-flv-module源代码
我们要把源码都到临时文件夹里,进入临时文件夹
cd /tmp
克隆nginx-http-flv-module源代码
git clone https://github.com/winshining/nginx-http-flv-module.git
下载Nginx源码
wget https://nginx.org/download/nginx-1.19.9.tar.gz
注意这里nginx的版本号可能有更新的(见上方链接),自行决定,之后涉及到的版本号需要保持一致
解压并进入文件夹
tar -xzf nginx-1.19.9.tar.gz
cd nginx-1.19.9
编译安装
在nginx文件夹中依次执行
./configure --add-module=/tmp/nginx-http-flv-module --with-http_ssl_module
make
make install
执行完毕后nginx 会被安装在 /usr/local/nginx
修改nginx配置文件
本例中CentOS安装了图形界面,建议本步骤使用图形界面操作
使用root用户登陆,打开 /usr/local/nginx/conf/nginx.conf 文件,编辑内容见参考资料第一个链接
其中从默认配置修改的部分为
添加了
rtmp {
server {
listen 9999; # 接受推流的端口号
chunk_size 8192; # 单一推流数据包的最大容量
application myapp { # myapp 模块,可以自行更换名字
live on; # 打开直播
meta off; # 为了兼容网页前端的 flv.js,设置为 off 可以避免报错
gop_cache on; # 支持GOP缓存,以减少首屏时间
allow play all; # 允许来自任何 ip 的人拉流
}
}
}
修改了http/server的listen端口为8080,并在http/server下添加了
location /live { # 拉流时的 uri ,可以自行修改
flv_live on; # 打开 http-flv 服务
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*'; # 允许跨域
add_header 'Access-Control-Allow-Credentials' 'true';
}
保存退出
启动Nginx
cd /usr/local/nginx/sbin
./nginx
启动成功后的推流和拉流地址分别为:
- 推流:rtmp://localhost:9999/myapp/mystream
- 拉流:http://localhost:8080/live?port=9999&app=myapp&stream=mystream
其中:
localhost 需要替换为之前记下或查看的CentOS系统的IP地址
live 为nginx配置文件中添加的 location的uri
myapp 为nginx配置文件中规定的app模块名称,配置文件、推流、拉流中出现的名称需要保持一致
mystream 推流的流名称,推流、拉流中出现的名称需要保持一致
防火墙
推流成功还需要通过Linux的防火墙,本例中选择直接关闭防火墙(见开头参考资料),实际应用中应该修改防火墙配置开放推流拉流所使用的端口(本例中为9999和8080)
至此服务器准备完毕
OBS推流
安装并启动OBS,在下方“来源”处点加号,添加一个“显示器采集”,直接确定,此时应该在OBS主界面看到电脑屏幕的实时画面
然后选择: 文件 - 设置 - 推流(左侧),在右边窗口中
服务选择 “自定义” ,“服务器”填写 rtmp://localhost:9999/myapp/ ,“串流密钥”填写mystream(实际内容均需与前文保持一致),确定退出
点击右下角“开始推流”,推流成功后按钮变为“停止推流”,且状态栏右下角会出现实时的每秒流量数据
至此推流完毕
VLC、flv.js拉流、播放
VLC
媒体 - 打开网络串流 ,URL填写上方的拉流地址(实际内容均需与前文保持一致),播放
flv.js
打开 flv.js 的Demo页面 Stream URL 中填写上方的拉流地址,点下方 Load