0%

搭建自己的直播服务器(nginx + RTMP)

心血来潮想尝试搭建一个直播服务器玩玩,想到买一个服务器没必要,毕竟自己尝试玩玩,不如先用虚拟机搭建一个内网的直播服务器试试,因为本身不是做后台服务器开发的,其实对于搭建服务器并不熟悉。在网上找了一些资料,一步步完成简单的直播服务器搭建(能推流能拉流)。

搭建环境:
虚拟机:VMware Workstations 14 Pro
系统:CentOS Linux release 7.4.1708 (Core)
CPU:双核
内存:2GB
硬盘:40GB
直播软件(推流):OBS Studio
播放软件(拉流):VLC

一、下载 nginx 和 nginx-rtmp-module

怕麻烦,可以直接用root管理员来操作,少点权限问题(我不是专业服务器开发,图省事直接用root来操作),不过实际工作不会这样子用

注意:这次我们采用源码编译的方式安装,这样才能配置上第三方module(例如:nginx-rtmp-module)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 找个地方建的文件夹存放下载的源码
mkdir nginx_source
# 进入文件夹
cd nginx_source
# 下载并解压 nginx源码
wget https://nginx.org/download/nginx-1.13.10.tar.gz
tar -zxvf nginx-1.13.10.tar.gz
# clone nginx-rtmp-module的源码(没安装git,要先安装git)
git clone https://github.com/arut/nginx-rtmp-module.git
# 进入nginx源码文件夹进行安装
cd nginx-1.13.110
# 没安装openssl openssl-devel的话要先安装yum -y install openssl openssl-devel
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
# 编译安装
make && make install

这次采用默认安装路径,安装后nginx在/usr/local/nginx
然后为了方便使用,我做了一个软连接

1
2
# 链接到/usr/local/bin/nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

这样之后,就可以直接像ln、cd这类命令一样,直接使用nginx 命令

1
2
3
4
5
6
7
8
# 检查nginx安装情况
nginx -V
# 然后就会显示以下信息(不同版本可能会有点不同)
nginx version: nginx/1.13.10
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module

至此,nginx 和 nginx-rtmp-module 就安装完成了

配置nginx服务器

修改nginx的配置文件nginx.conf

1
vi /usr/local/nginx/conf/nginx.conf 

在nginx.conf里加入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#RTMP
rtmp {
server {
listen 1935; # listen port
chunk_size 4000;
# server_name 192.168.10.169;
application hls { #rtmp path
live on;
hls on;
hls_path /home/www/nginx_rtmp/html/hls;
hls_fragment 5s;
}
}
}

注意:hls_path 需要可读可写的权限

1
2
# 我直接给了个777,-R是表示包含设置所有子目录
chmod -R 777 /home/www/nginx_rtmp/html

然后修改http

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 81;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /home/www/nginx_rtmp/html;
index index.html index.htm;
}

#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;
}

主要改一下sever里的 listen ,这里我改成81,不改也可以,这里只是想和80区别一下

1
2
3
4
5
# 这里根据实际需要配置路径,前面已经配置了html的读写权限,hls_path 和html的路径都需要读写权限
location / {
root /home/www/nginx_rtmp/html;
index index.html index.htm;
}

至此,服务器基本完成了

开始直播(推流与拉流)

我采用OBS Studio 进行推流,因为简单容易就可以完成推流了

按照服务器的,IP地址端口进行配置,流名称自定义就好了,拉流的时候也是按照这个流名称来拉流的

设置好后就可以推流了

如果成功,右下角会显示绿色的

最后,我们来看看拉流,见证成果的时候
在Safari里输入http://192.168.10.169:81/hls/demo.m3u8
注意:IP地址和端口填上服务器配置好的

在iPhone 上的Safari也可以播放,不过要和服务器在同一个网段,因为这里是局域网的服务器。
至此,我们就完成了一个直播服务器了。

参考

使用nginx与nginx-rtmp-module搭建流媒体服务器