实战小项目之视频监控(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 文件夹拷贝到开发板