CentOS搭建Nginx-RTMP直播服务器

唠嗑:

        一个low货朋友开车回家的时候总喜欢给我打微信语音聊天,玩LOL的时候也一样,也不知道玩游戏的时候聊别的东西怎么一心二用才能把游戏玩好。于是我和他语音聊天的同时,仍然开起了别人的直播间...

        后来想想,让这low货自己开个直播间,我和他聊天还能看看他究竟能菜成什么样,于是就想搭建一个直播服务器,让他推到我的电脑里。毕竟如果开播,推哪里不是推,还不如让我看看..


于是准备自己动手搭建直播服务器。准备好一些软硬件:

VMware(本文搭建在虚拟机环境下。物理机,阿里云均可)

CentOS(本文使用8.2版本的iso镜像)

lnmp环境

Nginx-RTMP模块(Nginx开源中的一个模块,默认不会自带安装)

网络环境准备:

  1. 内网环境:
    1. 服务器与播放客户端IP之间互相能ping通
  2. 如果是家庭宽带动态IP,外网推流则需要准备
    1. 宽带IP为公网IP
    2. 使用桥接模式拨号上网
    3. 路由器端口转发内外网端口的映射
  3. 固定公网IP
    1. 阿里云、腾讯云等则需在主机配置中开放端口

本文做内网部署,后续通过家庭宽带映射端口的方式,从外网IP映射到虚拟机服务器上。


VMware安装CentOS的安装过程本文不再赘述,需要的可自行搜索其他文章查看。

安装完CentOS之后,以Root账户登录,首先配置网卡地址。

Ps:安装CentOS过程中,仔细发现可以看到有手动配置网卡信息的入口,如果忘记配置,则可以手动对网卡进行配置。

如果你是装的GUI服务器,那么右上角设置按钮可以直接进行IP地址以及网卡开关的配置(没错,CentOS需要手动打开网卡网络连接情况),如果装的是核心,那么需要手动配置。

虚拟机配置网络为桥接模式 打开centos终端,进入网卡文件夹。

cd /etc/sysconfig/network-scripts/ 

使用ls命令查看网络配置文件

 看到配置文件名称为ifcfg-ens33,这是一块网卡配置,我们使用vi命令编辑他。

vi ifcfg-ens33

根据需要自行选择dhcp自动分配IP地址,或者是设置static模式手动配置。

网卡重要参数说明:

BOOTPROTO=static #配置模式,默认为none,可修改为dhcp或static静态获取

ONBOOT=yes #开机启用本配置,注意这个不修改无法开启网卡。

IPADDR=192.168.104.227 #静态IP

GATEWAY=192.168.104.254 #默认网关

NETMASK=255.255.255.0 #子网掩码

DNS1=192.168.x.x #DNS 配置

Vi编辑器的用法

  1. 进入后按键盘i进入编辑模式
  2. 编辑完后按esc退出编辑模式
  3. 按:进入选项
    1. q退出
    2. w写入
    3. wq保存文件并退出
    4. q! 不保存文件直接退出

 配置完成后可以输入reboot重启centos,然后使用ping命令测试网络是否通畅。

CentOS搭建Nginx-RTMP直播服务器_第1张图片

=============================手动分割线=============================

蛋疼的网络配置搞好了,如果在安装过程中直接配置,或者是GUI下用鼠标操作会更加方便快捷。

开始配置环境。

服务器需要先安装一些依赖,或者编译的时候看错误需要什么就安装什么

yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc gcc-c++

 如果是新建的服务器,那你使用yum安装的时候,很可能提示:Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: No URLs in mirrorlist。原因如下:

在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。 CentOS 8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。

现官方镜像已无法使用,所以我们需要更换yum源才能正常下载。国内很多地方提供了yum的源,大家可以自行去搜索,本文已阿里云yum源做修改。

1、将源文件备份
cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/
2、下载阿里源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
3、更新源里面的地址
sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
4、生成缓存
yum clean all && yum makecache

生成缓存之后,再执行yum安装。

CentOS搭建Nginx-RTMP直播服务器_第2张图片

如果没有加入-y命令,则需要在此处输入Y再继续。

安装一些支持工具,如vim,wget和lsof

yum install -y vim wget lsof git zip unzip

安装完依赖环境之后,安装LNMP服务。

LNMP的含义

L:linux

N:Nginx

M:myqsl

P:php

A:Apache

这次安装暂时不需要安装apache,所以只安装lnmp即可,需要的可以进行 lnmpa安装。

LNMP一键安装包官网:https://lnmp.org/ 里面有一部分软件帮助

wget http://soft.vpser.net/lnmp/lnmp1.8.tar.gz -cO lnmp1.8.tar.gz && tar zxf lnmp1.8.tar.gz && cd lnmp1.8 && ./install.sh lnmp

Ps:如需要安装LNMPA或LAMP,将./install.sh 后面的参数lnmp替换为lnmpa或lamp即可。

搭建的版本号:

Mysql版本:5.6  #选择后自定义数据库密码

PHP版本:7.3

安装过程中若出现Failed to download metadata for repo 'base'等提示,说明yum源访问有问题,通过CentOS自带的火狐浏览器访问http://mirrors.aliyun.com查看阿里云镜像的源,页面提示找不到服务器。

解决方案:可以通过修改主机DNS地址为阿里云公用DNS:223.5.5.5或者223.6.6.6,然后关闭有线连接开关后再次开启有线连接,看到DNS变成阿里云的DNS之后,重新访问阿里巴巴镜像站,发现可以访问,重新执行lnmp命令。

安装lnmp的过程比较持久,大约需要几十分钟左右。通过测试,rtmp模块暂时只支持Nginx13-15版本,所以在安装完成后,需要重新安装nginx与 rtmp模块。

下载前可以在根目录新建一个文件夹,用于存放下载的文件。

mkdir softdown
cd softdown
wget http://nginx.org/download/nginx-1.14.2.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.1.tar.gz

 安装完毕后,解压nginx与rtmp压缩包

tar xf v1.2.1.tar.gz
tar xf nginx-1.14.2.tar.gz
Ps:确保nginx源码文件夹和rtmp模块源码文件夹在同一目录下,如果装带GUI的服务器,可以在文件里查看

CentOS搭建Nginx-RTMP直播服务器_第3张图片

重新安装Nginx:

cd nginx-1.14.2

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module-1.2.1/ --with-http_ssl_module

make && make install #开始编译安装

分享一个安装过程的捷径:

安装过程可能会存在提示错误(根据nginx版本不同):

 解决方案:

进入nginx文件夹,用vi命令打开objs/MakeFile 文件。注意存放的文件夹以及nginx版本号文件夹。Make的M是大写的。

vi softdown/nginx-1.14.2/objs/Makefile

 按i键进入编辑模式,删掉-Werror参数即可

按esc后,输入冒号,输入wq保存退出。

装GUI服务器的,可以直接进入文件夹,双击以记事本打开,直接编辑后保存即可。

重新执行make && make install。

安装完毕。使用命令查看是否安装成功

/usr/local/nginx/sbin/nginx -t

 

 提示successful表示安装成功了,用命令启动nginx。

/usr/local/nginx/sbin/nginx

CentOS搭建Nginx-RTMP直播服务器_第4张图片

启动后,打开浏览器输入127.0.0.1访问,出现欢迎界面,nginx安装完毕。

用vi或者vim命令,打开nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf

添加rtmp支持
rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live{
                        live on;
                        hls on;
                        hls_path /home/wwwroot/hls_live;
                }
        }
}

此时用虚拟机访问127.0.0.1显示页面正常,但用局域网其他机器访问提示404,这是因为系统的防火墙阻止了端口访问。

http默认端口为80,rtmp默认端口为1935,当然端口可以自定义设置。

PS:CentOS系统中在1024以内的端口号必须使用root账户才能开启。

使用命令开启防火墙的80与1935端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=1935/tcp --permanent

输入之后,重启一下防火墙。

firewall-cmd --reload

 到此配置结束,到测试流程。

1.用其他机器使用ping命令来测试centos的通畅情况。

2.用其他机器访问网页,测试访问结果。


测试推流:

使用obs工具配置rtmp

CentOS搭建Nginx-RTMP直播服务器_第5张图片

串码流是一段字符串,可自定义。如果直播做了鉴权,那么需要在在串码中加入验证信息。

推送后,OBS会显示流量大小,也有红色绿色标注。在CentOS的hsl_path 设定的文件夹中,也会出现xxx.m3u8的文件。

使用工具拉流:

PotPlayer播放器

VLC播放器

两者均可,打开推流的地址:

rtmp://192.168.104.227:1935/live/stream

发现正常播放。直播服务器搭建结束。


RTMP还有一个功能:鉴权推流

鉴权推流的总体思路:

在rtmp服务中加入一个属性:on_publish

鉴权推流
rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live{
                        live on;
                        hls on;
                        hls_path /home/wwwroot/hls_live;
                        on_publish http://localhost/api.php;
                }
        }
}

api.php地址可以自行更换成可以访问到的地址,可以是同站点,也可以是其他站点。

鉴权推流的机制:

访问on_publish所带的页面,若页面返回状态码为200,则正常推流。若返回其他的状态码,服务器就会拒绝推流。

所以api.php代码思路就是验证传过来的字符串,是否是我允许的用户进行推送,所以就需要对推送过来的字符串做验证。

api.php总体思路代码:

假设代码为:

$check_keys = '123456';

则推流地址应该为:

rtmp://192.168.104.227:1935/live/stream?keys=123456

只有get字符串代码匹配全了才可以正常推流,否则OBS会返回连接服务器失败等提示。


有些坑无人替我踩,那我就只能自己去踩了。在安装过程中出现了许多错误,错误也可以自行度娘去搜索。记录下这篇文章,一是为了给许多想搭建直播服务器或者想了解如何搭建的人一个参考,二也是为了让我自己以后能找到一篇搭建过程相对较完善的文章。

本文分享了我自己搭建直播服务器的过程,有很多地方可能不是很完善,也需要大佬批评指正。我也参考过非常多的文章,这篇文章记录了我走过了一些坎。有一篇捷径式的文章对新手朋友来说,可以少碰很多避。

你可能感兴趣的:(直播服务器,RTMP,网络)