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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
视频直播,500GB 1个月
云解析 DNS,旗舰版 1个月
简介: 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

目录
打赏
0
0
0
0
88
分享
相关文章
|
1月前
|
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
60 0
|
12天前
|
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
111 28
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
87 28
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
86 20
|
1月前
|
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
118 20
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
73 1
Linux云服务器如何搭建LNMP环境
Nginx伪流媒体服务器搭建详细说明以及案例
Nginx伪流媒体服务器搭建步骤如下:1. 安装Nginx,根据系统选择命令;2. 编辑配置文件(/etc/nginx/nginx.conf),添加mp4相关设置;3. 创建视频目录/usr/share/nginx/html/videos并上传视频;4. 重启Nginx应用更改;5. 通过浏览器访问视频,如http://your_server_ip/videos/example.mp4。注意启用mp4模块,确保视频格式支持伪流媒体播放。
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
191 1
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样

热门文章

最新文章

下一篇
oss创建bucket