Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能

时间:2024-11-17 07:55:57

一、环境介绍

操作系统:虚拟机运行的Ubuntu18.04 64位系统

二、流媒体服务器介绍

百度百科: 流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。作为新一代互联网应用的标志,流媒体技术在近几年得到了飞速的发展。

流媒体服务器是流媒体应用的核心系统,是运营商向用户提供视频服务的关键平台。流媒体服务器的主要功能是对流媒体内容进行采集、缓存、调度和传输播放。流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量。因此,流媒体服务器是流媒体应用系统的基础,也是最主要的组成部分。

流媒体服务器的主要功能是以流式协议(RTP/RTSP、MMS、RTMP等)将视频文件传输到客户端,供用户在线观看;也可从视频采集、压缩软件接收实时视频流,再以流式协议直播给客户端。

nginx服务器是开源的高性能的http服务器,反向代理服务器,在国内许多公司应用比较多。

rtmp是实时消息传输协议(real time messaging protocol),主要应用在流媒体传输,实时音视频通信的协议。

三、搭建流媒体服务器需要下载的软件包

下载示例:

  1.  wbyq@wbyq:~/work_pc$ mkdir nginx      
  2.  wbyq@wbyq:~/work_pc$ cd nginx/
  3.  wbyq@wbyq:~/work_pc/nginx$ wget http:///download/nginx-1.10.
  4.  wbyq@wbyq:~/work_pc/nginx$ wget http:///zlib-1.2.
  5.  wbyq@wbyq:~/work_pc/nginx$ wget https:///pub/pcre/pcre-8.
  6.  wbyq@wbyq:~/work_pc/nginx$ wget https:///source/openssl-1.0.
  7.  wbyq@wbyq:~/work_pc/nginx$ wget https:///arut/nginx-rtmp-module/archive/

下载过程:

  1.  wbyq@wbyq:~/work_pc/nginx$ wget http:///download/nginx-1.10.
  2.  --2020-04-08 09:12:24-- http:///download/nginx-1.10.
  3.  正在解析主机 ()... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
  4.  正在连接 ()|62.210.92.35|:80... 已连接。
  5.  已发出 HTTP 请求,正在等待回应... 200 OK
  6.  长度: 911509 (890K) [application/octet-stream]
  7.  正在保存至: “nginx-1.10.3.”
  8.  ​
  9.  nginx-1.10.3.                    100%[=========================================================================>] 890.15K  38.2KB/s   用时 20s  
  10.  ​
  11.  2020-04-08 09:12:45 (44.0 KB/s) - 已保存 “nginx-1.10.3.” [911509/911509])
  12.  ​
  13.  wbyq@wbyq:~/work_pc/nginx$ wget http:///zlib-1.2.
  14.  --2020-04-08 09:12:48-- http:///zlib-1.2.
  15.  正在解析主机 ()... 68.66.224.49
  16.  正在连接 ()|68.66.224.49|:80... 已连接。
  17.  已发出 HTTP 请求,正在等待回应... 200 OK
  18.  长度: 607698 (593K) [application/x-gzip]
  19.  正在保存至: “zlib-1.2.11.”
  20.  ​
  21.  zlib-1.2.11.                     100%[=========================================================================>] 593.46K   164KB/s   用时 3.6s  
  22.  ​
  23.  2020-04-08 09:12:57 (164 KB/s) - 已保存 “zlib-1.2.11.” [607698/607698])
  24.  ​
  25.  wbyq@wbyq:~/work_pc/nginx$ wget https:///pub/pcre/pcre-8.
  26.  --2020-04-08 09:13:05-- https:///pub/pcre/pcre-8.
  27.  正在解析主机 ()... 131.111.8.88
  28.  正在连接 ()|131.111.8.88|:443... 已连接。
  29.  已发出 HTTP 请求,正在等待回应... 200 OK
  30.  长度: 2065161 (2.0M) [application/x-gunzip]
  31.  正在保存至: “pcre-8.40.”
  32.  ​
  33.  pcre-8.40.                       100%[=========================================================================>]   1.97M   166KB/s   用时 11s  
  34.  ​
  35.  2020-04-08 09:13:17 (191 KB/s) - 已保存 “pcre-8.40.” [2065161/2065161])
  36.  ​
  37.  wbyq@wbyq:~/work_pc/nginx$ wget https:///arut/nginx-rtmp-module/archive/
  38.  --2020-04-08 09:13:39-- https:///arut/nginx-rtmp-module/archive/
  39.  正在解析主机 ()... 52.74.223.119
  40.  正在连接 ()|52.74.223.119|:443... 已连接。
  41.  已发出 HTTP 请求,正在等待回应... 302 Found
  42.  位置:https:///arut/nginx-rtmp-module/zip/master [跟随至新的 URL]
  43.  --2020-04-08 09:13:40-- https:///arut/nginx-rtmp-module/zip/master
  44.  正在解析主机 ()... 13.250.162.133
  45.  正在连接 ()|13.250.162.133|:443... 已连接。
  46.  已发出 HTTP 请求,正在等待回应... 200 OK
  47.  长度: 545945 (533K) [application/zip]
  48.  正在保存至: “”
  49.  ​
  50.                               100%[=========================================================================>] 533.15K   392KB/s   用时 1.4s  
  51.  ​
  52.  2020-04-08 09:13:42 (392 KB/s) - 已保存 “” [545945/545945])

 

如果有些软件包下载不下来,可以登录对应的官网下载或者百度直接搜索下载。

四、编译安装软件包

4.1 下载编译时需要依赖的一些工具

     wbyq@wbyq:~/work_pc/nginx$sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

 4.2 将上面下载的压缩包进行解压

  1.  wbyq@wbyq:~/work_pc/nginx$ tar xvf openssl-1.0.
  2.  wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-rtmp-module-
  3.  wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-1.8.1.
  4.  wbyq@wbyq:~/work_pc/nginx$ tar xvf pcre-8.40.
  5.  wbyq@wbyq:~/work_pc/nginx$ tar xvf zlib-1.2.11.

 

4.3 配置nginx,生成Makefile文件

(进入到nginx-1.8.1目录下,配置nginx

  1.  wbyq@wbyq:~/work_pc/nginx$ cd nginx-1.8.1/
  2.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ ./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master

 

执行命令时,注意下自己的依赖路径是否正确。

4.4 修改Makefile,去掉-Werror选项

执行完上一步之后,打开objs/Makefile 文件,找到-Werror选项并删除。

 wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ gedit objs/Makefile 

 

 4.5 编译安装

  1.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ make
  2.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo make install

 

 

五、配置nginx服务

5.1 设置开机启动

  1.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo wget http:///JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc//nginx
  2.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo chmod +x /etc//nginx
  3.  wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo nginx defaults

 5.2 控制nginx服务的3个命令: 启动、停止、重启

  1. sudo service nginx start
  2. sudo service nginx stop
  3. sudo service nginx restart

 

5.3 修改Nginx的配置文件

打开/usr/local/nginx/conf/文件,在文件最后面加入下面的配置。

  1. rtmp {
  2. server {
  3. listen 8888;
  4. application live {
  5. live on;
  6. }
  7. }
  8. }

因为当前只用到了rtmp服务,代码里只配置了rtmp,其他服务没有配置。

配置代码里的8888是监听的端口号。

 修改之后,重启nginx服务:

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo service nginx restart

 重启服务之后,使用netstat -ltn命令查看TCP监听的端口,确认下Nginx的监听端口是否正常。

 

 

从上面截图里红线框,框了2个端口,一个是我们自己设置的rtmp服务监听端口8888,还有一个80是Nginx默认的HTTP服务监听端口。

接下来可以在浏览器里输入本机IP地址:http://127.0.0.1/,查看Nginx服务开启状态。

 

 

六、安装FFMPEG测试推流

使用ffmpeg命令推流本地的摄像头和音频数据到RTMP服务器:

ffmpeg -thread_queue_size 128 -f video4linux2 -r 12 -s 1280x720 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 5 -vcodec libx264 -acodec aac -f flv "rtmp://127.0.0.1:8888/live/xl"

 

我这里是本地测试,向服务器推流地址就是:rtmp://127.0.0.1:8888/live/xl

其中127.0.0.1是你服务器的IP地址,8888是rtmp监听的端口号,live在配置文件里已经固定,xl可以随便填这是rtmp的临时目录。

 推流之后在linux下可以安装个Mplayer播放器,拉流查看视频。

$ mplayer rtmp://127.0.0.1:8888/live/xl

 拉流的地址和推流的地址是一样的。