Nginx直播服务器搭建及推拉流测试

news2025/1/19 11:32:42

文章目录

  • 前言
  • 一、搭建 Nginx 直播服务器
    • 1、安装 Nginx 依赖
    • 2、下载并解压源码
      • ①、下载并解压 nginx-http-flv-module 直播模块源码
      • ②、下载并解压 Nginx 源码
    • 3、编译安装
    • 4、配置 rtmp 服务
      • ①、添加 rtmp 服务
      • ②、验证配置
  • 二、推流、拉流测试
    • 1、ffmepg 推流
    • 2、VLC 拉流


前言

方便后面进行直播项目的实战练习,本文实现在 linux 下搭建 Nginx 直播服务器。

  • 推流器:FFmpeg Windows
  • 直播服务器:Nginx+Rtmp Ubuntu
  • 播放器:VLC

一、搭建 Nginx 直播服务器

服务器由 Nginx + RTMP 构成。

Nginx 是 HTTP 服务器,RTMP 是附加模块。

其中 Nginx 我选择的是用源码编译方式进行安装,因为这种方式可以自定义安装指定的模块以及最新版本。

1、安装 Nginx 依赖

在我们更新 apt 软件源完成之后,就可以安装 Nginx 等一些软件的依赖环境,执行的命令如下所示:

sudo apt-get install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev gcc wget unzip vim make curl

安装的依赖软件有点多,会根据你的网速安装速度也不一样,命令执行之后,返回的信息如下图所示:
在这里插入图片描述
从上图中可以看到依赖已经安装完成,接下来我们开始安装 nginx,nginx 不能使用 apt 安装,需要源码编译安装才可以,因为需要我们编译一个模块进去。

2、下载并解压源码

①、下载并解压 nginx-http-flv-module 直播模块源码

我们首先将需要的模块下载下来,这里不使用 nginx-rtmp-module,而是使用 nginx-http-flv-module 来替代, 因为后者是基于前者开发的,前者拥有的功能后者都有,后者是国内的开发开发,有中文文档,所以就采用它了,首先将它下载下来并解压,执行的命令如下所示:

wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip

出现了访问 github 失败的问题:
在这里插入图片描述
解决方法:其实和我之前写过的一篇博客原理是一样的:Github无法访问的解决方法

原理:直接告诉本机对应域名的 IP
方法:浏览器打开下面的网址,这两个网站建议换着试,一个不好用就换到另一个

  • https://tool.chinaz.com/dns?type=1,选择 TTL 比较小的响应 IP

    • 查询 GitHub 的网址 DNS
      在这里插入图片描述
      选择 TTL 比较小的响应IP,可以看到这里是 20.205.243.166
      在这里插入图片描述
  • https://www.ipaddress.com/

    • 查询 GitHub 的 IP 地址 在这里插入图片描述
      可以看到这里是 140.82.112.3
      在这里插入图片描述

通过上面其中一种方法获取到 IP 地址,然后接着修改配置文件:

修改 /etc/hosts 文件:

sudo vi /etc/hosts

添加下面一行信息,并保存退出
在这里插入图片描述
然后再次输入下面命令下载

wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip

可以看到下载成功
在这里插入图片描述

解压源码

unzip master.zip

命令执行之后, 返回的信息如下图所示:
在这里插入图片描述

②、下载并解压 Nginx 源码

从上图中可以看出已经下载并解压完成,接着我们还需要下载 nginx 本身的源码,下载 Nginx 源码并解压的命令如下所示:

wget http://nginx.org/download/nginx-1.17.6.tar.gz

在这里插入图片描述
解压 Nginx 源码

tar -zxvf nginx-1.17.6.tar.gz

在这里插入图片描述

3、编译安装

接着我们进入编译安装环节,首先进入刚才解压的 nginx 目录当中,执行的命令如下所示:

cd nginx-1.17.6 && ls

命令执行之后,返回的信息如下图所示:
在这里插入图片描述
从上图中可以看到解压出来的目录结构,我们执行 ./configure 便可以配置编译参数,这个地方我们需要将刚才下载的插件 nginx-http-flv-module 加入进来,执行的命令如下所示:

./configure --add-module=../nginx-http-flv-module-master

命令执行之后,返回的信息如下图所示:
在这里插入图片描述
在上图中可以看到准备编译已经完成,但在编译的过程当中有可能会出现一些意外因素,nginx 默认编译非常严格, 只要遇到一些意外就会中断编译,因此我们将一些非致命的意外设置为警告模式,执行命令如下所示:

vim objs/Makefile

在当前文件夹下有一个 objs/Makefile 文件, 我们将里面的 -Werror 删除, 用 vim 打开文件后如下所示:
在这里插入图片描述
删除之后,保存并退出,接着就可以进行编译 Nginx 了,编译的过程稍微有点长,执行的命令如下所示:

make

命令执行之后,返回的信息如下图所示:
在这里插入图片描述
在上图中可以看到一些 Nginx 的一些日志存放路径信息,当我们执行安装命令后,就会往这些文件里写入相应信息,执行安装命令如下所示:

make install

报了权限不够的错误:
在这里插入图片描述
解决办法:使用 sudo 命令进行安装:

sudo make install

命令执行之后,返回的信息如下图所示:
在这里插入图片描述
在上图中可以可以看到安装过程大致执行了哪些命令,安装完成后接下来需要进行一些简单的配置就可以使用了

4、配置 rtmp 服务

在完成 Nginx 的安装之后,我们需要对 Nginx 进行一番配置,并启动 Nginx 服务

①、添加 rtmp 服务

我们直接使用 vim 命令去编辑 Nginx 的配置文件,执行命令如下所示:

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

将下面信息粘贴到 nginx.conf 文件中:

# 添加RTMP服务
rtmp {				 		# RTMP 服务
    server {
        listen 1935; 		# 监听端口
        chunk_size 4000; 	# 数据传输块大小
        
        application live1 { # 这个是 “直播”
            live on;		# 视频文件存放位置
        }
        application hls1 {
			live on;		# 视频文件存放位置
			hls on;
			hls_path /usr/local/nginx/html/hls1; # 注意:需要手工创建 /tmp/hls 目录:mkdir -p /tmp/hls
		}
		application vod {	# 这个是“点播”
			play /opt/video/vod;	# 视频文件存放位置
		}
    }
}

粘贴后的内容如下:
在这里插入图片描述
http server 端口这里默认为 80 端口,我这里默认不改了
如果 80 端口已经被 apache 占用,可以 kill 掉 apache 的进程,或者将 nginx 的端口改为 8000。将 http 下的 server 下的 listen 改为 8000 即可
在这里插入图片描述

②、验证配置

粘贴完成并保存之后,我们在终端执行 nginx -t 命令,来测试一下配置文件是否有异常,执行命令如下所示:

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

在这里插入图片描述
在上图中可以看出 Nginx 提示我们配置文件没有异常,说明我们配置没有语法错误,我们启动一下 Nginx,执行命令如下所示:

sudo /usr/local/nginx/sbin/nginx

验证 nginx 是否成功启动,打开 window10 的 chrome,输入 http://192.168.137.128:80

注意: 我这里的虚拟机 ip 是 192.168.167.176, nginx 端口是 80, 请改成您自己的 ip 和端口。
在这里插入图片描述
这就代表 Nginx 直播服务器搭建成功了。

二、推流、拉流测试

1、ffmepg 推流

将本地 test.mp4 视频文件推到 Nginx 服务器

ffmpeg -re -i test.mp4 -vcodec libx264 -acodec aac -f flv -y rtmp://192.168.137.128/live1/test1

在这里插入图片描述

2、VLC 拉流

打开网络串流,输入 rtmp://192.168.137.128/live1/test1
在这里插入图片描述

点击播放可以看到推送到服务器的视频文件:

在这里插入图片描述


我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1340062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【汇编笔记】初识汇编-内存读写

汇编语言的由来: CPU是计算机的核心,由于计算机只认识二进制,所以CPU执行的指令是二进制。 我们要想让CPU工作,就得给他提供它认识的指令,这一系列的指令的集合,称之为指令集。 指令集: 不同的体…

PyTorch深度学习实战(28)——对抗攻击(Adversarial Attack)

PyTorch深度学习实战(28)——对抗攻击 0. 前言1. 对抗攻击2. 对抗攻击模型分析3. 使用 PyTorch 实现对抗攻击小结系列链接 0. 前言 近年来,深度学习在图像分类、目标检测、图像分割等诸多领域取得了突破性进展,深度学习模型已经能…

React学习计划-React16--React基础(七)redux使用与介绍

笔记gitee地址 一、redux是什么 redux是一个专门用于做状态管理的js库(不是react插件库)它可以用在react、angular、vue的项目中,但基本与react配合使用作用:集中式管理react应用中多个组件共享的状态 二、什么情况下需要使用r…

go 源码解读 - sync.Mutex

sync.Mutex mutex简介mutex 方法源码标志位获取锁LocklockSlowUnlock怎么 调度 goroutineruntime 方法 mutex简介 mutex 是 一种实现互斥的同步原语。(go-version 1.21) (还涉及到Go运行时的内部机制)mutex 方法 Lock() 方法用于…

0.1+0.2≠0.3,揭秘Python自带的Bug

朋友们,问一个简单的问题:0.10.2? 你肯定会说:中国人不骗中国人,0.10.20.3。 但是在Python里,0.10.2≠0.3 ,我们今天一起来看看这个,并且看一下解决办法。 离奇的错误 在python里…

解决ELement-UI懒加载三级联动数据不回显(天坑)

最老是遇到这类问题头有点大,最后也是解决了,为铁铁们总结了一下几点 一.查看数据类型是否一致 未选择下 选择下 二.处理数据时使用this.$set方法来动态地设置实例中的属性,以确保其响应式 三.绑定v-if 确保每次重新加载 四.绑定key 五.完整代码

台阶仪在半导体行业中的广泛应用及其重要意义

台阶仪在半导体材料的表征和研究中是一种非常重要的工具。如在半导体材料的制备过程中,一些关键的工艺参数,如温度、压力、气氛等条件的变化,会导致半导体材料的能带结构发生变化,通过使用台阶仪,可以准确测量和分析材…

菜鸟学习vue3笔记-vue hooks初体验

import { ref } from "vue"; export default function () {let a1 ref(1);let a2 ref(5);let c ref(0);function add() {a1.value;a2.value;}return {add,a1,a2,c,}; }<template><div><p>第一个数字{{ a1 }}</p><p>第二个数字{{ a2…

解密Python高级特性:深度探讨装饰器与上下文管理器的魔法

写在开头 在Python编程的奇妙世界里,有两个被誉为编程魔法的特性:装饰器和上下文管理器。它们不仅如同纹章和护盾般赋予代码强大的能力,更是提升代码优雅性和可维护性的法宝。本篇文章将深入研究这两项高级特性,揭示它们的神秘面纱,同时通过丰富的实例展示它们的多样应用…

用C的递归函数求n!-----(C每日一编程)

用递归函数求n&#xff01; 有了上面这个递归公式就能写C代码了。 参考代码&#xff1a; int fac(int n) {if (n 1 || n 0)return 1;else return n * fac(n - 1); } void main() {int n;scanf("%d",&n);int f fac(n);printf("\n%d!%d\n", n, f); …

[Angular] 笔记 11:可观察对象(Observable)

chatgpt: 在 Angular 中&#xff0c;Observables 是用于处理异步数据流的重要工具。它们被广泛用于处理从异步操作中获取的数据&#xff0c;比如通过 HTTP 请求获取数据、定时器、用户输入等。Observables 提供了一种机制来订阅这些数据流&#xff0c;并可以在数据到达时执行相…

python实现一维傅里叶变换——冈萨雷斯数字图像处理

原理 傅立叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。在不同的研究领域&#xff0c;傅立叶变换具有多种不同的变体形式&#xff0c;如连续傅立叶变换和离散傅立叶变换。最初傅立叶分…

Python初学者必须吃透的69个内置函数!

所谓内置函数&#xff0c;就是Python提供的, 可以直接拿来直接用的函数&#xff0c;比如大家熟悉的print&#xff0c;range、input等&#xff0c;也有不是很熟&#xff0c;但是很重要的&#xff0c;如enumerate、zip、join等&#xff0c;Python内置的这些函数非常精巧且强大的&…

docker学习(二十一、network使用示例container、自定义)

文章目录 一、container应用示例1.需要共用同一个端口的服务&#xff0c;不适用container方式2.可用示例3.停掉共享源的容器&#xff0c;其他容器只有本地回环lo地址 总结 二、自定义网络应用示例默认bridge&#xff0c;容器间ip通信默认bridge&#xff0c;容器间服务名不通 自…

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、设计思路和框架设计框图GV8601A均衡EQGTX 时钟要求GTX 调用与控制SMPTE SD/HD/3G-SDISMPTE SD/HD/3G-SDI 接收SMPTE SD/HD/3G-SDI 发送 SDI 视频接收数据处理SDI 音频接收-…

天文观测与计算机技术:共舞在星辰大海

天文观测与计算机技术&#xff1a;共舞在星辰大海 在人类探索宇宙的历程中&#xff0c;天文观测和计算机技术如同一对并肩作战的勇士&#xff0c;共同书写着人类对宇宙的认知。本篇博客将深入探讨这两者如何交织在一起&#xff0c;为人类打开一扇又一扇探索宇宙的窗户。 一、…

羊大师教你如何选择适合孩子的羊奶,孩子成长的关键!

当谈到孩子的健康与成长时&#xff0c;正确的饮食是至关重要的。而在众多的饮品中&#xff0c;羊奶因其独特的营养价值备受家长们的青睐。那么&#xff0c;如何为孩子挑选适合的羊奶成为了一个重要的选择。下面&#xff0c;小编羊大师将为大家介绍如何选择适合孩子的羊奶。 我…

Flask 账号管理列表

Flask 账号管理列表 web/controllers/account/Account.py /index route_account Blueprint( account_page,__name__ )route_account.route( "/index" ) def index():resp_data {}req request.valuespage int( req[p] ) if ( p in req and req[p] ) else 1qu…

【Simulink系列】——用扫地机器人实例快速引入

目录 一、Simulink基本认知 1、模块图建模 2、仿真基本流程 3、调试技巧 二、基于模型的simulink设计实例&#xff08;两轮扫地机器人&#xff09; 1、系统定义与布局 确定建模目的 确定系统组件和接口 确定系统布局 2、建模并验证系统 对组件建模 ①物理组件建模 …