泰山派RK3566:Buildroot系统实现视频监控-ffmpeg+nginx+trmp+usb摄像头推流

序言

网上目前大多是以ARM架构为基础,依据IMX6ull开发板相关资料进行移植操作,针对RK-AARCH64的相关内容较少,坑较多,现做个总结。
RK3566 是基于 AARCH64 的处理器,即 RK3566 处理器使用的是 ARMv8-A 架构的 64 位模式。
也就是说,RK3566 支持 AARCH64 指令集和特性。因此需要AARCH64的交叉编译环境,以及openssl,pcre,zlib第三方依赖包

实验环境

1.虚拟机:VMware Workstation Pro   ---  Ubuntu18.04
2.开发板:立创开发板-泰山派-RK3566  ---   Buildroot系统
3.nginx-1.20.0
4.openssl-3.2.1
5.pcre-8.45
6.zlib-1.3**

实验步骤

1.虚拟机中安装交叉编译器(GNU)

交叉编译器下载地址在这里插入图片选择述
选择红框内的进行下载,将下载的交叉编译工具gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz复制到你想安装的目录下,选择为/opt文件夹下,复制完成后在/opt目录下输入命令进行解压:

 sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt/

解压之后获得gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu的文件夹,这个文件夹的名字太长,将文件夹重命名为:gcc-aarch64-linux-gnu

sudo mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu gcc-aarch64-linux-gnu

将/opt/gcc-aarch64-linux-gnu/bin目录添加到环境变量中

sudo gedit /etc/profile

在文件的末尾添加如下内容:

export PATH="/opt/gcc-aarch64-linux-gnu/bin:$PATH" 

接下来输入命令,让环境变量生效:

source  /etc/profile

重启一下:

reboot

重启之后输入命令,查看环境变量是否生效:

aarch64-linux-gnu-gcc -v

出现如下图所示,则安装成功。(我安装的是2017版本)
注意:记录红框处的安装路径,后期要用到
在这里插入图片描述

2.下载Nginx、nginx-rtmp-module、openssl、pcre、zlib

1.自行选择文件目录,执行下面命令,在虚拟机中下载相关文件

 1. wget http://nginx.org/download/nginx-1.20.0.tar.gz			#下载nginx
 2. clone https://github.com/arut/nginx-rtmp-module.git			#下载nginx-rtmp-module
 3. wget https://www.openssl.org/source/openssl-3.2.1.tar.gz	#下载openssl
 4. wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz	#下载pcre
 5. wget https://zlib.net/fossils/zlib-1.3.tar.gz				#下载zlib

2.解压下载的压缩包,确保解压后所有文件夹处于同一级目录/文件夹下

 1.tar -xzf nginx-1.20.0.tar.gz 			#解压nginx
 2.tar -xzf openssl-3.2.1.tar.gz 			#解压openssl
 3.tar -xzf pcre-8.45.tar.gz 				#解压pcre
 4.tar -xzf zlib-1.3.tar.gz 				#解压zlib

结束后得到一下文件:
在这里插入图片描述

3.交叉编译文件

  1. 在nginx-1.20.0/目录下创建install目录,最后用于存放编译后的安装文件
cd nginx-1.20.0
mkdir install

2.打开 nginx 源码目录下的 auto/cc/name 文件,将 21 行处的”exit 1”给注释掉
在这里插入图片描述
3.打开auto/types/sizeof文件,将15行处的ngx_size=修改为”ngx_size=4,并且将 36 行处的 c c 修改为 g c c , 将 43 行 n g x s i z e = cc修改为gcc,将43行ngx_size= cc修改为gcc,43ngxsize=NGX_AUTOTEST改为ngx_size=4
在这里插入图片描述
4.回到nginx-1.20.0目录下,准备输入配置命令

./configure --prefix=/home/zt/tspi/rtmp/nginx-1.20.0/install \
--with-cc=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
--with-cc-opt="-Wno-error -Wno-deprecated-declarations" \
--with-cpp=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_v2_module \
--without-http_upstream_zone_module \
--with-openssl=/home/zt/tspi/rtmp/openssl-3.2.1 \
--with-openssl-opt="--cross-compile-prefix=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu- linux-aarch64 -Wno-error -Wno-deprecated-declarations" \
--with-pcre=/home/zt/tspi/rtmp/pcre-8.45 \
--with-zlib=/home/zt/tspi/rtmp/zlib-1.3 \
--add-module=/home/zt/tspi/rtmp/nginx-rtmp-module

配置参数解释
使用脚本./configure来配置Nginx的编译选项
–prefix指定存放编译后的安装文件 (安装在新建的install,也可以自行修改)
–with-cc指定C编译器路径 (自行修改自己的文件夹路径)
–with-cc-opt设置C编译器参数,后跟参数防止编译过程中报使用强烈反对的函数错误
–with-cpp:设置C编译器参数 (自行修改自己的文件夹路径)
–with-http_ssl_module添加ngx_http_ssl_module模块
–without-http_upstream_zone_module编译时移除http_upstream_zone_module模块
–with-openssl设置OpenSSL源码库文件目录 (自行修改自己的文件夹路径)
–with-openssl-opt设置额外编译OpenSSL的参数
–with-pcre设置PCRE源码库文件目录 (自行修改自己的文件夹路径)
–with-zlib设置zlib源码库文件目录 (自行修改自己的文件夹路径)
–add-module添加第三方RTMP模块 (自行修改自己的文件夹路径)

5.执行完上述命令后,会生成obj文件夹,在obj/Makefile 的1628行添加语句 –host=aarch64-linux-gnu
在这里插入图片描述
6.修改 nginx 源码目录下的 objs/ngx_auto_config.h 文件,将如下内容添加到该头文件中

#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif

7.开始编译

make -j4 & make install 

8.等待执行完成,在install/sbin/中查看生成的nginx文件,判断架构是否为AARCH64

file install/sbin/nginx

在这里插入图片描述

4.移植到泰山派进行验证

1.将conf/、html/、logs/三个目录移动到开发板的/etc/nginx下
在这里插入图片描述
2.将/sbin/nginx移动到/usr/sbin
在这里插入图片描述
3.输入nginx -h 查看nginx是否能识别到
在这里插入图片描述
4.输入命令启动nginx

./nginx -p /etc/nginx

5.查看nginx服务

ps -aux

在这里插入图片描述
6.同一局域网中,在电脑浏览器输入开发板的ip。看到下面界面表示nginx已经可以正常使用
在这里插入图片描述

5.添加ffmepg (5-6参考吴工写的文档,连接放在下方)

添加ffmepg 和 抑制到泰山派验证 参考吴工分享的步骤进行操作即可:
【Buildroot添加ffmpeg】

1.下载x264源码
2.交叉编译X264
3.下载瑞芯微ffmpeg源码
4.交叉编译ffmpeg

6.移植到泰山派验证

1.移植x264
2.移植ffmpeg
3.测试x264
4.测试ffmpeg

7.FFmpeg推流

1.修改nginx配置文件/etc/nginx/nginx.conf
开发板修改nginx.conf文件内容,添加rtmp

vi /etc/nginx/nginx.conf

增加下方红框代码即可
在这里插入图片描述
2.推流视频
使用FFmpeg进行推流,将视频流数据通过RTMP推流给nginx流媒体服务器,执行如下命令进行推流:

ffmpeg -re -i /opt/ui/src/apps/resource/media/movies/梵天神器片段1080p.mp4 -s 640x480 -vcodec libx264 -f flv rtmp://127.0.0.1/live/mytest

-re:确保 ffmpeg 以输入流的原始帧率(或尽可能接近的帧率)来读取和输出数据。
-i:参数指定了输入文件的路径。
-s:参数设置了输出视频的分辨率。
-vcodec libx264:参数指定了视频编码器。
-f flv:参数用于设置输出格式。
rtmp://127.0.0.1/live/mytest:表示将视频流通过RTMP推给流媒体服务器,这里因为我们的服务器和推流端都是开发板,所以这个IP地址127.0.0.1指的就是本机的流媒体服务器。

使用VLC软件进行拉流,记使用的开发板的IP地址,点击播放即可获取视频数据
在这里插入图片描述

3.推流USB摄像头视频数据

ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video41 -q 10 -f flv rtmp://127.0.0.1/live/mytest

在这里插入图片描述

参考

1.正点原子I.MX6U 嵌入式 Linux C 应用编程指南》第三十四章的视频监控项目
2.正点原子《基于Buildroot系统_RTMP视频监控手册V1.0》
3.imx6ull: 从内核、buildroot配置实现ffmpeg+nginx+rtmp+USB摄像头
4.rk3568: 交叉编译Nginx v1.20.0
5.nginx交叉编译移植到linux_aarch64

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值