目录

  • 参考资料
  • 基础工作流程
  • 正文
  • 流媒体服务器
  • 安装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查看和关闭防火墙

在参考上述资料时我遇到一些坑,所以没有坑的地方我会直接略过(直接参考上述资料),有坑或不同的的地方会详细说。

基础工作流程

  1. 视频来源(包括任何进行直播行为的设备:电脑、手机、网络摄像头)将视频数据“推流”到流媒体服务器上的某个(端口+地址)
  2. 视频接收方通过另一个(端口+地址)“拉流”视频数据以收看直播内容

本例中:

正文

流媒体服务器

安装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