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

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

一、环境介绍

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

二、流媒体服务器介绍

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

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

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

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

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

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

下载示例:  

wbyq@wbyq:~/work_pc$ mkdir nginx      
wbyq@wbyq:~/work_pc$ cd nginx/
wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

下载过程:

wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
--2020-04-08 09:12:24--  http://nginx.org/download/nginx-1.10.3.tar.gz
正在解析主机 nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
正在连接 nginx.org (nginx.org)|62.210.92.35|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 911509 (890K) [application/octet-stream]
正在保存至: “nginx-1.10.3.tar.gz”
nginx-1.10.3.tar.gz                    100%[=========================================================================>] 890.15K  38.2KB/s    用时 20s   
2020-04-08 09:12:45 (44.0 KB/s) - 已保存 “nginx-1.10.3.tar.gz” [911509/911509])
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
--2020-04-08 09:12:48--  http://zlib.net/zlib-1.2.11.tar.gz
正在解析主机 zlib.net (zlib.net)... 68.66.224.49
正在连接 zlib.net (zlib.net)|68.66.224.49|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 607698 (593K) [application/x-gzip]
正在保存至: “zlib-1.2.11.tar.gz”
zlib-1.2.11.tar.gz                     100%[=========================================================================>] 593.46K   164KB/s    用时 3.6s  
2020-04-08 09:12:57 (164 KB/s) - 已保存 “zlib-1.2.11.tar.gz” [607698/607698])
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
--2020-04-08 09:13:05--  https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
正在解析主机 ftp.pcre.org (ftp.pcre.org)... 131.111.8.88
正在连接 ftp.pcre.org (ftp.pcre.org)|131.111.8.88|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 2065161 (2.0M) [application/x-gunzip]
正在保存至: “pcre-8.40.tar.gz”
pcre-8.40.tar.gz                       100%[=========================================================================>]   1.97M   166KB/s    用时 11s   
2020-04-08 09:13:17 (191 KB/s) - 已保存 “pcre-8.40.tar.gz” [2065161/2065161])
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
--2020-04-08 09:13:39--  https://github.com/arut/nginx-rtmp-module/archive/master.zip
正在解析主机 github.com (github.com)... 52.74.223.119
正在连接 github.com (github.com)|52.74.223.119|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://codeload.github.com/arut/nginx-rtmp-module/zip/master [跟随至新的 URL]
--2020-04-08 09:13:40--  https://codeload.github.com/arut/nginx-rtmp-module/zip/master
正在解析主机 codeload.github.com (codeload.github.com)... 13.250.162.133
正在连接 codeload.github.com (codeload.github.com)|13.250.162.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 545945 (533K) [application/zip]
正在保存至: “master.zip”
master.zip                             100%[=========================================================================>] 533.15K   392KB/s    用时 1.4s  
2020-04-08 09:13:42 (392 KB/s) - 已保存 “master.zip” [545945/545945])

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

四、编译安装软件包

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

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

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

wbyq@wbyq:~/work_pc/nginx$ tar xvf openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-rtmp-module-master.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-1.8.1.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf zlib-1.2.11.tar.gz

4.3 配置nginx,生成Makefile文件

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

wbyq@wbyq:~/work_pc/nginx$ cd nginx-1.8.1/
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 

image.png

4.5 编译安装

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

image.png

五、配置nginx服务

5.1 设置开机启动

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo chmod +x /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo update-rc.d nginx defaults

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

sudo service nginx start
sudo service nginx stop
sudo service nginx restart

5.3 修改Nginx的配置文件

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

rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  
          }
         }  
}

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

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

image.png

修改nginx.conf之后,重启nginx服务:

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

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

image.png

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

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

image.png

六、安装FFMPEG测试推流

安装ffmpeg库的方法参考这里:https://blog.csdn.net/xiaolong1126626497/article/details/104919095

使用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的临时目录。

image.png

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

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

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

image.png

如果在云服务上搭建,有公网IP地址,就可以实现远程直播功能了。

通过ffmpeg代码推流编程,可以参考这里:

https://blog.csdn.net/xiaolong1126626497/article/details/105377651

目录
相关文章
|
1月前
|
编解码 Linux C语言
探索C++与Live555实现RTSP服务器的艺术(一)
探索C++与Live555实现RTSP服务器的艺术
182 1
|
9月前
|
网络协议 Linux 开发工具
Linux|麒麟操作系统实现多路RTMP|RTSP播放
无论是Windows平台还是Linux,多路播放诉求非常普遍,比如针对智慧工地、展馆、教育等宏观场景下的摄像头展示,关于RTSP或RTMP直播播放器开发需要注意的点,可参考之前博客,总的来说有以下一些点:
192 0
|
1月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
1月前
|
应用服务中间件 nginx Windows
windows下Nginx+RTMP部署
windows下Nginx+RTMP部署
39 0
|
1月前
|
编解码 C++ 流计算
探索C++与Live555实现RTSP服务器的艺术(三)
探索C++与Live555实现RTSP服务器的艺术
73 1
|
1月前
|
存储 编解码 算法
探索C++与Live555实现RTSP服务器的艺术(二)
探索C++与Live555实现RTSP服务器的艺术
96 1
|
1月前
|
网络协议 调度 C语言
live555 RTSP服务器与客户端通信源码分析
live555已经发展了很多年,不过最新的live555版本,笔者没有编译通过,最终选择了2019.8.28的live555代码,如果有需要的同学,可以自行去Index of /pub/contrib/live555/ (videolan.org)去下载,不过需要自己去编译,我的编译环境是windows版本,网上有很多关于如何将其编译为VS版本的live555的,如果有需要的同学,可以在博客下留言,我会给你发一个(自己对一些代码进行了注释,不过都是自己的理解,不一定正确)。对于代码的分析:RTSP服务器使用的testOnDemandRTSPServer.cpp,RTSP客户端使用的testRT
151 0
|
1月前
|
应用服务中间件 nginx C++
nginx: [emerg] unknown directive “rtmp“ in ./../conf/nginx.conf:16
nginx: [emerg] unknown directive “rtmp“ in ./../conf/nginx.conf:16
|
1月前
|
应用服务中间件 nginx Windows
ffmpeg推流到nginx服务器,并使用vlc播放rtmp视频
ffmpeg推流到nginx服务器,并使用vlc播放rtmp视频
|
9月前
|
编解码 安全 Linux
麒麟操作系统|Linux下低延时RTMP|RTSP直播播放实现
国产操作系统多为以Linux为基础二次开发的操作系统。2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供服务支持,这引起了社会和广大用户的广泛关注和对信息安全的担忧。而2020年对Windows7服务支持的终止再一次推动了国产系统的发展。
199 0