前期安装准备
1:nginx安装程序
版本:nginx-1.16.1(版本最好新一点)
官网地址:http://nginx.org/en/download.html
2:OpenSSL模块
版本:openssl-1.1.0i
地址:https://www.openssl.org/
3:Pcre模块
版本:pcre-8.43
地址:http://www.pcre.org/
4:Zlib模块
版本:zlib-1.2.11
地址:http://www.zlib.net/
5:nginx-rtmp-module模块
支持rtmp和hls转发
地址:https://github.com/arut/nginx-rtmp-module
6:nginx-http-flv-module模块
支持http-flv方式直播
地址:https://github.com/winshining/nginx-http-flv-module
7:准备工作参考
nginx-rtmp-module和nginx-http-flv-module两者只需要其中之一就可以,不需要联合编译。
地址:https://blog.csdn.net/l1028386804/article/details/80022437作者对相关的准备写的很齐全。
编译
./configure --with-http_ssl_module --with-cc=arm-hisiv400-linux-gcc --with-cpp=arm-hisiv400-linux-cpp --prefix=/home/yangjia/Nginx/test --with-pcre=./pcre-8.43 --with-openssl=./openssl-1.1.0i --with-zlib=./zlib-1.2.11 --add-module=./nginx-rtmp-module-master --without-http_gzip_module --without-http_upstream_zone_module
configure错误信息调整
1.错误信息:./configure: error: C compiler arm-hisiv400-linux-gcc is not found
这是因为nginx编译的时候除了检查cc是否存在,还需要执行编译后的程序。很明显交叉编译的程序无法执行。
解决方法:vi auto/cc/name
ngx_feature_run=yes ==> ngx_feature_run=no
2.错误信息:./configure: error: can not detect int size
解决方法:vi auto/types/sizeof
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ ==> ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAG \
if [ -x $NGX_AUTOTEST ]; then``
ngx_size=`$NGX_AUTOTEST` ==> ngx_size=4
3.错误信息: configure: error: in `/home/src/pcre-8.42': configure: error: C compiler cannot create executables
解决方法:vi auto/options
PCRE_CONF_OPT=--host=arm-hisiv400-linux
注意:以上三个错误调整完重新configure
Make过程调整
1.错误信息:error: ‘NGX_SYS_NERR’ undeclared (first use in this function)
解决方法:vi objs/ngx_auto_config.h
添加: #ifndef NGX_SYS_NERR
#define NGX_SYS_NERR 132
#endif
2.错误信息:error: ld returned 1 exit status
解决方法:vi auto/lib/openssl/make
&& ./config --prefix=$ngx_prefix no-shared no-threads $OPENSSL_OPT \
改为
&& ./Configure --prefix=$ngx_prefix no-shared no-threads --cross-compile-prefix=arm-hisiv400-linux- linux-generic32\
注意:此错误修改完成之后重新configure之后再make之后重复1步骤。
3.错误信息: undefined reference to 'ngx_shm_alloc'
解决方法:vi objs.nginx_auto_config.h
添加: #ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif
完成上述之后make install即可。
nginx的rtmp模块编写
rtmp {
server {
listen 0.0.0.0:1935;
chunk_size 4000;
access_log /dev/null;// 关闭log
application videolive {
live on;
allow publish all;
allow play all;
on_play http://127.0.0.1/rtmplivevideo;
on_play_done http://127.0.0.1/rtmpstopvideo;
gop_cache on;//nginx-http-flv-module模块用来减少第一帧加载时间
}
application videolive2
{
...
}
...
nginx运行
/xxx/xxx/nginx/sbin/nginx -c /xxx/xxx/nginx/conf/nginx.conf/ -p /xxx/xxx/nginx
/xxx/xxx/为nginx的安装位置。