实战小项目之视频监控(1-2)

news2025/1/24 1:41:27

实战小项目之视频监控(1-2)

Nginx 移植

前面也给大家提到了,我们可以使用 Nginx 来搭建 RTMP 流媒体服务器,譬如你可以在一台公网 IP 主
机上搭建流媒体服务器,当然,笔者并没有这个条件;这里我们选择在开发板上搭建流媒体服务器,并且推
流端也是开发板,所以在本章的方案中,开发板既是流媒体服务器、也是推断端。

既然要在开发板上搭建流媒体服务器,首先我们需要将 Nginx 移植到开发板上,事实上,我们的板子出
厂系统中就已经移植好了 Nginx,并且板子在启动进入系统时会自动启动 Nginx,也就是启动流媒体服务,
所以板子启动之后本身就已经是一台流媒体服务器了。当然,这里我们不管出厂系统中已经搭建好的流媒
体服务,这里只是给大家说明一下,本章我们要自己动手亲自移植 Nginx、然后在板子上搭建流媒体服务。

下载 Nginx 源码

进入到 Ubuntu 系统的某个目录下,执行下面这条命令下载 Nginx 源码:
wget http://nginx.org/download/nginx-1.20.0.tar.gz

在这里插入图片描述
这里我们下载的是 1.20 版本,这是比较新的版本了。下载完成之后将得到一个名为 nginx-1.20.0.tar.gz

的压缩包文件。
在这里插入图片描述
图 34.2.2 nginx-1.20.0.tar.gz 压缩包文件

这就是 Nginx 的源码包。

下载 nginx-rtmp-module 模块

事实上,原生的 Nginx 并不支持 RTMP,我们需要安装第三方模块 nginx-rtmp-module 插件使其支持

RTMP。通过下面这条命令下载 nginx-rtmp-module。
git clone https://github.com/arut/nginx-rtmp-module.git
在这里插入图片描述
下载成功之后将得到 nginx-rtmp-module 文件夹。

交叉编译 Nginx

将下载得到的 nginx-1.20.0.tar.gz 文件进行解压:
tar -xzf nginx-1.20.0.tar.gz
解压之后生成 nginx-1.20 文件夹,进入到该目录下。在进行交叉编译之前,先对交叉编译工具进行初始
化操作:
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

大家根据自己的实际安装位置填写路径。

首先配置源码、接下执行 make 编译源码,最后执行 make install 安装即可!总共的步骤就这三个,但
事实上在编译的过程中会出现一些问题,我们稍后再看!

配置源码

首先第一步是配置源码,在配置之前,需要进行一个简单的修改,否则配置通不过;首先打开 nginx 源
码目录下的 auto/cc/name 文件,将 21 行处的”exit 1”给注释掉!如下所示:
在这里插入图片描述
图 34.2.5 修改 name 文件

修改完成之后保存退出。接着打开 auto/types/sizeof 文件,将 15 行处的” ngx_size=”修改为” ngx_size=4”,
并且将 36 行处的”$CC”修改为”gcc”,如下所示:
在这里插入图片描述
图 34.2.6 修改 sizeof 文件

同样,修改完成之后保存退出即可!接着执行下面这条命令进行配置:
./configure --prefix=/home/dt/tools/nginx-1.20.0/install \
–with-http_ssl_module \
–with-http_mp4_module \
–with-http_v2_module \
–without-http_upstream_zone_module \
–add-module=/home/dt/tools/nginx-rtmp-module

上述命令中,–prefix 指定了 nginx 的安装路径,笔者为了方便直接将其安装到 nginx 源码目录下的 install

目录中;–add-module 用于添加第三方模块,譬如我们前面下载的 nginx-rtmp-module,所以–add-module 需
要指向 nginx-rtmp-module 源码路径,大家根据自己的实际路径填写。

如下所示:
在这里插入图片描述
图 34.2.7 nginx 配置

配置成功打印信息如下所示:
在这里插入图片描述
图 34.2.8 配置完成

编译源码

配置完成之后,接着我们执行 make 编译
在这里插入图片描述
图 34.2.9 执行 make 编译

本次编译并不会成功,将会出现如下错误打印信息
在这里插入图片描述
图 34.2.10 编译报错

这个时候我们需要修改 nginx 源码目录下的 objs/ngx_auto_config.h 文件,将如下内容添加到该头文件
中:
#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif

在这里插入图片描述
图 34.2.11 添加内容

添加完成之后保存退出,再次执行 make 编译,这样就会编译成功了。
在这里插入图片描述
图 34.2.12 编译成功

安装

编译成功之后,接着我们进行安装,执行 make install
在这里插入图片描述
图 34.2.13 安装

笔者将 nginx 安装到了 nginx-1.20.0 目录下的 install 目录中,进入到 install 目录下:
在这里插入图片描述
图 34.2.14 安装目录下的文件夹
conf 目录下有很多的配置文件,如下所示:在这里插入图片描述
图 34.2.15 conf 目录下的配置文件

其中 nginx.conf 配置文件很重要,后续我们会对该配置文件进行相应的配置。
sbin 目录下有一个可执行程序 nginx:在这里插入图片描述
图 34.2.16 nginx 可执行程序

这个可执行文件是一个“not stripped”文件,说明该文件包含了很多的调试信息,所以导致该文件特别
大 7.5MB,可以执行下面这条命令去掉调试信息、减少文件的大小:
arm-poky-linux-gnueabi-strip --strip-debug nginx 在这里插入图片描述
图 34.2.17 去除调试信息
nginx 可执行程序用于启动流媒体服务。

现在我们需要将安装目录下的这些文件拷贝到开发板 Linux 系统上,再进行拷贝之前,需要先将开发板
出厂系统中已经移植好的 nginx 给移除,进入到开发板 Linux 系统中,执行下面这些命令移除出厂系统自带
的 nginx 程序和相应的配置文件:
rm -rf /usr/sbin/nginx
rm -rf /etc/nginx/*
在这里插入图片描述
图 34.2.18 删除出厂系统原有的 nginx

接下我们将 nginx 安装目录下 sbin 中的 nginx 拷贝到开发板 Linux 系统/home/root 目录下,如下所示:

图 34.2.19 将 nginx 拷贝到开发板

接着再将安装目录下的 conf、logs、html 文件夹拷贝到开发板 Linux 系统的/etc/nginx 目录下,如下所
在这里插入图片描述
图 34.2.19 将 nginx 拷贝到开发板

接着再将安装目录下的 conf、logs、html 文件夹拷贝到开发板 Linux 系统的/etc/nginx 目录下,如下所
示:在这里插入图片描述
图 34.2.20 将 conf、logs、html 文件夹拷贝到开发板

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

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

相关文章

2023年计算语言学和自然语言处理国际会议(CLNLP 2023)

2023年计算语言学和自然语言处理国际会议(CLNLP 2023) 重要信息 会议网址:www.clnlp.org 会议时间:2023年8月18-20日 召开地点:中国南京 截稿时间:2023年6月31日 录用通知:投稿后2周内 收…

MATLAB绘制三Y轴坐标图:补充坐标轴及字体设置

三轴坐标图 1 函数 MATLAB绘制三轴图函数可见MATLAB帮助-multiplotyyy 基础图形绘制是很简单,但坐标轴及字体设置该如何实现呢? 本文以以下几个例子为例,希望可以解决在利用MATLAB绘制三轴坐标图时常见的疑惑。 2 案例 2.1 案例1&#xf…

大数据框架之Hive:第6章 查询

第6章 查询 6.1 基础语法 1)官网地址 https://cwiki.apache.org/confluence/display/Hive/LanguageManualSelect 2)查询语句语法: SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference -- 从什么表查[WHE…

Java的概述和运行方式

目录 一.Java是什么? 1.1Java的目前状况和学习需求 1.2Java的平台分类和特点 二.Java程序的运行方式 2.1 Java的程序结构 2.2 JDK、JRE、JVM的关系 2.3 Java运行详情 总结 😽个人主页:tq02的博客_CSDN博客-领域博主 🌈理想…

R语言ggplot2 | 用百分比格式表示数值

📋文章目录Percent() 函数介绍例子1,在向量中格式化百分比:例子2,格式化数据框列中的百分比:例子3,格式化多个数据框列中的百分比:如何使用percent()函数在绘图过程展示通常在绘图时&#xff0c…

Linux 学习笔记

一、 概述 1. 操作系统 ① 计算机由硬件和软件组成 ② 操作系统属于软件范畴,主要作用是协助用户调度硬件工作,充当用户和计算机硬件之间的桥梁 ③ 常见的操作系统 🤠 PC端:Windows、Linux、MacOS🤠 移动端&#…

Android中级——屏幕和绘图

屏幕和绘图屏幕系统屏幕密度独立像素密度dp单位转换XML绘图(需放在Drawable)BitmapShapeLayerSelector绘图技巧CanvasLayerPorterDuffXfermodeShaderPathEffectSurfaceView屏幕 屏幕大小:指屏幕对角线长度,单位为寸分辨率&#x…

管理类书籍推荐

管理类书籍对于每一位想要获得管理能力提升或者实现职业生涯更上一层楼的企业管理者或领导者而言,都是不可或缺的一项重要学习工具。作为管理工作从事者的职场必需品,一本出色的管理类书籍可以为我们提供大量宝贵的经验与专业建议,从而让管理…

ChatGPT助力校招----面试问题分享(二)

1 ChatGPT每日一题:DC-DC与LDO的区别 问题:介绍一下DC-DC与LDO的区别 ChatGPT:DC-DC和LDO都是电源管理电路,它们的主要作用是将输入电压转换为所需的输出电压,以供电子设备使用。但是,它们之间存在一些重…

GlassFish的安装与使用

一、产品下载与安装glassfish下载地址:https://download.oracle.com/glassfish/5.0.1/release/index.html下载后解压即完成安装,主要目录说明:bin目录:为asadmin命令所在目录。glassfish为主目录:glassfish\bin目录为命…

C++基础了解-13-C++ 数组

C 数组 一、C 数组 C 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number9…

Android特别的数据结构(一) SparseArray源码解析

1.数据结构 class SparseArray<E> implements Cloneable 由两个数组构成&#xff0c;一个数组mKeys类型为int[]&#xff0c;存放Key&#xff0c;一个数组mValues类型为 E[]&#xff0c;存放Value。Key数组升序排列。默认初始容量&#xff1a;10扩容&#xff1a; 如果当…

Hbuilder 下载与安装教程

文章目录Hbuilder下载与安装教程Hbuilder简介一&#xff0c;下载Hbuilder二&#xff0c;安装Hbuilder三&#xff0c;简单使用四&#xff0c;Hbuilderx 调试Hbuilder下载与安装教程 Hbuilder简介 Builder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的Web开发…

你还在手撸SQL?ChatGPT笑晕在厕所

文章目录你还在手撸SQL&#xff1f;ChatGPT笑晕在厕所一、背景二、面向Chat编程1. 数据库设计2. 建表语句3. 加中文注释4. 数据模拟5. 查询成绩6. 修改课程任课老师7. 删除课程8. 删除一个有关联数据的课程总结你还在手撸SQL&#xff1f;ChatGPT笑晕在厕所 一、背景 经典3表设…

【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)

点击下载源码 医院挂号系统主要用于实现医院的挂号&#xff0c;前台基本功能包括&#xff1a;用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括&#xff1a;系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如…

图文讲解MongoDB该怎么安装

一、安装前必读 我这里是Centos7 Linux 内核 注意&#xff1a;本文的命令使用的是 root 用户登录执行&#xff0c;不是 root 的话所有命令前面要加 sudo 二、环境配置 2.1 停止防火墙 systemctl status firewalld #查看firewall systemctl stop firewalld …

Vector - CAPL - 测试报告函数介绍

测试报告是我们开发脚本中必备的一个模块,今天我们介绍一下测试报告中的常用函数,让我们开发出更加清晰、美观的报告,让我们的测试工作更加轻松。 TestCaseComment

备战蓝桥python——完全平方数

完全平方数 链接: 完全平方数 暴力解法&#xff1a; n int(input()) for i in range(1, n1):if(((i*n)**0.5)%10.0):print(i)break运用数论相关知识求解 任意一个正整数都可以被分解成若干个质数乘积的形式&#xff0c;例如 :2022∗5120 \ 2^{2}*5^{1}\,20 22∗51 由此…

JVM的了解与学习

一:jvm是什么 jvm是java虚拟机java Virtual Machine的缩写 jdk包含jre和java DevelopmentTools 二:什么是java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。java虚拟机有自己完善的硬体结构,如处理器、堆栈、寄存器等,还有…

Hive映射Hbase

依赖条件 已有Hadoop、Hive、Zookeeper、HBase 环境。 为什么Hive要映射Hbase HBase 只提供了简单的基于 Key 值的快速查询能力&#xff0c;没法进行大量的条件查询&#xff0c;对于数据分析来说&#xff0c;不太友好。 hive 映射 hbase 为用户提供一种 sqlOnHbase 的方法。…