如何在armv6 armv6 armv8 aarch64 嵌入式板子上面安装nginx服务器支持推送H265的视频流
-
- 一,准备工作
- 二,configure时遇到的出错问题
-
- [1、checking for C compiler ... found but is not working](#1、checking for C compiler … found but is not working)
- [2,error: can not detect int size](#2,error: can not detect int size)
- 3,解决完上面两处报错后,继续执行configure命令。
- 三,make前的需要修改的地方
- 四,注意
- 支持拉H265的rtmp的VLC播放工具
为什么要在板子瑞芯微rv1126核心板上面安装nginx服务器,是因为我的项目需要用到拉到连接在板子上面的摄像头,由于是摄像头是直连摄像头的只能通过板子上面的wifi热点设备,先连接这个热点才能获取到这个网络摄像头,那么就需要板子做一个推流的服务器让摄像头的画面能够被手机和电脑访问到。
我这边是在代码里面获取rtsp网络摄像头然后通过nginx的rtmp模块推送出去
开始吧
一,准备工作
先准备上面的这些资源文件,还有就是安装好你的交叉编译工具(arm-buildroot-linux-gnueabihf)我这边是用在rv1126(arm32)上面的,如果你是arm64像3588的这种,就选择相对应的交叉编译工具即可
二,configure时遇到的出错问题
解压完成先进入nginx-1.18.0-code/nginx-f8052414dbe9/auto把configure文件拷贝到nginx-f8052414dbe9目录下,再回到nginx-f8052414dbe9目录执行以下命令。
cpp
./configure --with-cc=/opt/atk-dlrv1126-toolchain/usr/bin/arm-linux-gnueabihf-gcc --with-cpp=/opt/atk-dlrv1126-toolchain/usr/bin/arm-linux-gnueabihf-g++ --prefix=/home/erics/Desktop/nginx/20230722a5gFlHUe/nginx-1.18./nginx_install --without-http_gzip_module --with-http_ssl_module --without-http_upstream_zone_module --with-http_auth_request_module --add-module=/home/erics/Desktop/nginx/20230722a5gFlHUe/nginx-1.18./nginx-http-flv-module-master --with-pcre=/home/erics/Desktop/nginx/20230722a5gFlHUe/nginx-1.18./pcre-8.44 --with-zlib=/home/erics/Desktop/nginx/20230722a5gFlHUe/nginx-1.18./zlib-1.2.11 --with-openssl=/home/erics/Desktop/nginx/20230722a5gFlHUe/nginx-1.18./openssl-1.1.1f
1、checking for C compiler ... found but is not working
解决办法:找到auto/cc/name文件并打开,找到如下并修改代码
cpp
if [ $ngx_found = no ]; then
echo
echo $0: error: C compiler $CC is not found
echo
#exit 1 // 这行注释掉
fi
2,error: can not detect int size
解决方法:找到auto/types/sizeof文件并打开找到如下代码
cpp
if [ -x $NGX_AUTOTEST ]; then
ngx_size=`$NGX_AUTOTEST`
echo " $ngx_size bytes"
fi
armv6 armv7 (arm32)改成如下
cpp
if [ -x $NGX_AUTOTEST ]; then
ngx_size=4
echo " $ngx_size bytes"
fi
这里要注意如果你是arrch64( armv8(aarch64)的需要修改成下这样
cpp
if [ -x $NGX_AUTOTEST ]; then
ngx_size=8
echo " $ngx_size bytes"
fi
32位目标平台是4,64位的话是8
3,解决完上面两处报错后,继续执行configure命令。
三,make前的需要修改的地方
找到objs/底下的Makefile文件,打开后找到如下两处地方,修改成跟如下一样即可开始执行make
然后会遇到openssl编译出错
解决方法:
去到openssl-1.1.1f源码目录下找到Makefile并打开,搜索m64,有两处,都删除掉,其中有一行整行删除,注意:然后直接在openssl-1.1.1f源码目录下执行make和make install,都成功后回到nginx源码目录继续执行之前未执行完的make。
又会遇到如下的问题:
解决方法:
找到objs/目录底下的ngx_auto_config.h文件并打开,到文件末尾增加如下代码后继续执行make
cpp
#ifndef NGX_SYS_NERR
#define NGX_SYS_NERR 132
#endif
#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif
如图
即成功了
再make install
会生成如下文件:
然后板把这个文件夹打包放到板子里面
我是用的rtmp所以需要配置rtmp,修改nginx.conf文件修改成如下:
重新启动nginx,如果板子里面又有ffmpge的环境可以ffmpge推流试试 或者在浏览器里面输入ip
cpp
ffmpeg -rtsp_transport tcp -i rtsp://admin:admin123@192.1
68.3.13:554/h265/ch1/main/av_stream -vcodec copy -acodec copy -f flv rtmp://192.
168.3.127:1935/rtmplive/home
上面的ip修改成了你自己的摄像头ip和推流地址,然后用拉流工具查看
四,注意
-
需要注意的是有些工具它不支持rtmp H265的码流像官方的vlc我之前推过很多次每次都提示未知的编码格式。我会把支持的H265的rtmp vlc工具放到文章最后
-
还有一点需要注意的是你放到板子里面运行nginx程序会报错提示跟你ubuntu编译configure prefix=路径一致文件夹路径,你可以创建这个路径,或者在编译的时候设置一个和板子里面一样的文件路径,把编译好的nginx文件放到相同路径下即可。
-
还有一点如果你是用ffmpeg推流的 ffmpge必须得支持H265 如果不支持你的重新编译ffmpeg修改ffmpeg的源码
具体修改地方是这里
自己可以搜索看看有很多照着修改就行
支持拉H265的rtmp的VLC播放工具
https://download.csdn.net/download/kingzhou_/88075282
参考文章: