手把手教你从安装CentOS7.4镜像开始,搭建IoT视频监控系统(centos安装总结)

2023-03-14 20:51:47

 

本文分享自华为云社区《华为云ECS服务器安装CentOS7.4镜像,部署GINX服务器、搭建物联网视频监控系统》,作者:DS小龙哥在CentOS7.4服务器版本的环境下安装nginx服务器、配置文件服务器、流媒体服务器。

(1)配置NGINX为HTTP服务器,安装rtmp模块,完成rtmp视频推流,支持缓存视频到本地目录、支持转为HLS流,通过浏览器访问直播流(2)部署开机自动启动程序:方便设置自己的程序为开机启动1. 环境介绍

环境介绍: 采用的是华为云的ECS弹性云服务器–镜像安装的CentOS7.4 64位 -----是服务器版,非桌面版哦在CentOS7.4服务器版本的环境下安装nginx服务器、配置文件服务器、流媒体服务器。

(1)配置NGINX为HTTP服务器,安装rtmp模块,完成rtmp视频推流,支持缓存视频到本地目录、支持转为HLS流,通过浏览器访问直播流(2)部署开机自动启动程序:方便设置自己的程序为开机启动2. Centos中安装带rtmp模块的Nginx

2.1 新安装的系统可以先安装一些工具yuminstall -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc gcc-c++ yum

install -y vim wget lsof git zip unzip2.2 获取Nginx二进制源码听说srtmp模块暂时只支持Nginx13-15版本,当前就在官网下载Nginx14wget http://nginx.org/download/nginx-1.14.2.tar.gz tar xvf nginx-

1.14.2.tar.gz 2.3 获取nginx-rtmp-modulewget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.1.tar.gz tar xvf v1.

2.1.tar.gz 2.4 编译nginxcd nginx-1.14.2 ./configure --add-module=../nginx-rtmp-module-1.2.1/ --with-http_ssl_module

make && make install#建立软链接ln -s /usr/local/nginx/sbin/nginx /usr/bin特别说明:如果在配置时报错,一般就是缺东西了,安装了再配置比如:报错 ./configure: error: the HTTP rewrite 。

modulerequires the PCRE library. You can either disable the mo .... 解决: yum -y install pcre-devel yum -y install openssl openssl-devel

2.5 修改Nginx的配置文件打开/usr/local/nginx/conf/nginx.conf文件,在文件最后面加入下面的配置rtmp { server { listen。

8888; application live { liveon; } } } 上面8888是rtmp推流和拉流的端口。

修改nginx.conf之后,重启nginx服务:sudo service nginx restart 重启服务之后,使用netstat -ltn命令查看TCP监听的端口,确认下Nginx的监听端口是否正常。

正常情况,一个是我们自己设置的rtmp服务监听端口8888,还有一个80是Nginx默认的HTTP服务监听端口接下来可以在浏览器里输入本机IP地址:http://127.0.0.1/,查看Nginx服务开启状态。

2.6 设置开机启动wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx

chmod +x /etc/init.d/nginx update-rc.d nginx defaults 2.7 控制nginx服务的3个命令: 启动、停止、重启servicenginx start

servicenginx stopservicenginx restart 或者 nginx -s reload (运行中生效配置文件)2.8 进行rtmp推流服务器搭建好之后,推流和拉流的地址就是: rtmp:

//:8888/live/ 例如: rtmp://127.0.0.1:8888/live/xl2.9 nginx保存推流视频文件如果需要让推流上来的文件保存下来后续进行查看历史文件,可以配置nginx进行保存。

在原来的/usr/local/nginx/conf/nginx.conf配置文件里rtmp模块中增加新的配置:record all; record_unique on; record_path "./video"

; #视频缓存的路径 record_suffix -%Y-%m-%d-%H_%M_%S.flv; 完整/usr/local/nginx/conf/nginx.conf里的rtmp模块的配置如下:#RTMP服务

rtmp { server { listen8888; application live { liveon

; #开启实时record all; record_uniqueon; record_path"./video"; #视频缓存的路径record_suffix -%Y-%m-%d-%H_%M_%S.flv; } } }

配置之后执行命令nginx -s reload重启服务器即可2.10 rtmp直播流转为hls直播流什么是HLS直播流?HLS全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输。

目前HLS协议被广泛的应用于视频点播和直播领域原理介绍HLS跟 DASH 协议的原理非常类似通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件,然后提供一个配套的媒体列表文件,提供给客户端,让客户端顺序地拉取这些媒体文件播放,来实现看上去是在播放一条流的效果。

由于传输层协议只需要标准的 HTTP 协议,HLS 可以方便的透过防火墙或者代理服务器,而且可以很方便的利用 CDN 进行分发加速,并且客户端实现起来也很方便HLS把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。

HLS 协议由三部分组成:HTTP、M3U8、TS这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息HLS协议编码格式要求:视频的编码格式:H264 音频的编码格式:AAC、

MP3、AC-3 视频的封装格式:ts 保存 ts 索引的 m3u8 文件 配置/usr/local/nginx/conf/nginx.conf将RTMP流转为HLS流在http模块的server配置里增加新的配置:。

location/live_hls{types{ #m3u8 type设置application/vnd.apple.mpegurlm3u8; #ts分片文件设置video/mp2tts;} #指向访问m3u8文件目录

alias./m3u8File; #和rtmp模块里的hls_path设置路径一样add_headerCache-Control no-cache; #禁止缓存}在rtmp模块的server配置里增加新的配置:

hlson; #开启hlshls_path ./m3u8File; #hls的ts切片存放路径 (这是个目录,会自动创建的)hls_fragment2s; #本地切片长度hls_playlist_length

6s;#HLS播放列表长度/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:worker_processes1; #Nginx进程数,建议设置为等于CPU总核数events

{worker_connections1024; #工作模式与连接数上限}rtmp_auto_pushon; #RTMP服务rtmp{ server{ listen8888; application

live { liveon; #开启实时recordall;record_uniqueon;record_path"./video"; #视频缓存的路径record_suffix-%Y-%m-%d-%H_%M_%S.flv;

hlson; #开启hlshls_path./m3u8File; #hls的ts切片存放路径hls_fragment2s; #本地切片长度hls_playlist_length6s;#HLS播放列表长度

}}} #HTTP服务http{includemime.types;default_typeapplication/octet-stream;sendfileon;keepalive_timeout65;

server{listen8099;server_namelocalhost;location/ {roothtml;indexindex.html index.htm;}location/live_hls{

types{ #m3u8 type设置application/vnd.apple.mpegurlm3u8; #ts分片文件设置video/mp2tts;} #指向访问m3u8文件目录

alias./m3u8File;add_headerCache-Control no-cache; #禁止缓存}location/control{rtmp_controlall;}location/stat{

rtmp_statall;rtmp_stat_stylesheetstat.xsl;}location/stat.xsl{root./nginx-rtmp-module-master;} # redirect server error pages to the static page /50x.html

#error_page500 502 503 504 /50x.html;location = /50x.html {roothtml;}}}配置之后重启服务器即可按照前面的配置,RTMP推流地址和HTTP访问地址如下:。

RTMP推流和拉流地址: rtmp://127.0.0.1:8888/live/video01 那么对应的HTTP的访问地址:http://127.0.0.1:8099/live_hls/video01.m3u8

说明: 转为HLS流之后,如果浏览器支持HLS流就可以直接输入地址播放一般手机浏览器都支持的比如:苹果手机的自带浏览器,QQ浏览器等浏览器都支持直接播放HLS流PC机的谷歌浏览器默认是不支持的2.11 NGINX配置HTTP文件服务器

在5.8小节里介绍了如何配置NGINX保留RTMP推流的视频文件,如果想做一个直播回放,历史记录查看的播放器,那么就可以将rtmp视频缓存的目录作为HTTP文件服务器访问的根目录,通过访问这个根目录获取目录下文件的索引,得到视频文件的访问地址就可以直接进行播放,就能做一个视频回放播放器。

在http模块里新增加一个server配置,并填入新的配置,详细内容如下:server { listen8090; server_name localhost; location / {

root ./video; #指定哪个目录作为Http文件服务器的根目录,如果你这里写了file就是你的根目录,那么访问的时候file就不会出现在目录中autoindexon; #设置允许列出整个目录

autoindex_exact_sizeoff; #默认为on,显示出文件的确切大小,单位是bytes改为off后,显示出文件的大概大小,单位是kB或者MB或者GBautoindex_localtime。

on; #默认为off,显示的文件时间为GMT时间改为on后,显示的文件时间为文件的服务器时间charset utf-8; #防止文件乱码显示, 如果用utf-8还是乱码,就改成gbk试试 } } 。

特别说明: nginx是支持配置多个server配置,监听不同的端口,可以给文件服务器单独设置一个监听端口,专门作为文件遍历使用/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:。

worker_processes1; #Nginx进程数,建议设置为等于CPU总核数events{worker_connections1024; #工作模式与连接数上限}rtmp_auto_push

on; #RTMP服务rtmp{ server{ listen8888; applicationlive { liveon; #开启实时recordall;record_uniqueon;

record_path"./video"; #视频缓存的路径record_suffix-%Y-%m-%d-%H_%M_%S.flv;hlson; #开启hlshls_path./m3u8File; #hls的ts切片存放路径

hls_fragment2s; #本地切片长度hls_playlist_length6s;#HLS播放列表长度}}} #HTTP服务http{includemime.types;default_type

application/octet-stream;sendfileon;keepalive_timeout65;server{listen8090;server_namelocalhost;location

/ {root./video; #指定哪个目录作为Http文件服务器的根目录,如果你这里写了file就是你的根目录,那么访问的时候file就不会出现在目录中autoindexon; #设置允许列出整个目录

autoindex_exact_sizeoff; #默认为on,显示出文件的确切大小,单位是bytes改为off后,显示出文件的大概大小,单位是kB或者MB或者GBautoindex_localtime。

on; #默认为off,显示的文件时间为GMT时间改为on后,显示的文件时间为文件的服务器时间charsetutf-8; #防止文件乱码显示, 如果用utf-8还是乱码,就改成gbk试试 }}server。

{listen8099;server_namelocalhost;location/ {roothtml;indexindex.html index.htm;}location/live_hls{types{

#m3u8 type设置application/vnd.apple.mpegurlm3u8; #ts分片文件设置video/mp2tts;} #指向访问m3u8文件目录alias

./m3u8File;add_headerCache-Control no-cache; #禁止缓存}location/control{rtmp_controlall;}location/stat{rtmp_stat

all;rtmp_stat_stylesheetstat.xsl;}location/stat.xsl{root./nginx-rtmp-module-master;} # redirect server error pages to the static page /50x.html

#error_page500 502 503 504 /50x.html;location = /50x.html {roothtml;}}}访问文件测试: http://127.0.0.1:8090

3. Linux下开机启动的执行流程3.1 开机执行脚本顺序第一步:init /etc/inittab 第二步:启动相应的脚本,并且打开终端 rc.sysinit rc.d(里面的脚本) rc.local 第三步:启动login登录界面 login 第四步:在用户登录的时候执行sh脚本的顺序,每次登录的时候都会完全执行的 /etc/profile.d/file /etc/profile /etc/bashrc

/root/.bashrc /root/.bash_profile 3.2 Linux中修改环境变量及生效方法修改/etc/profile 或者 /etc/bashrc 可以让环境变量全部用户全局生效(需要重启系统)。

修改~/.bash_profile 或~/.bashrc对当前用户全局有效(需要重启系统)如果需要立即生效,修改完之后用source命令执行,如:source .bash_profile3.3 rcX.d的启动级别。

一般有开机自启动的需求时,一般会在/etc/rc.local文件中写命令行或脚本执行命令的方式来实现也可以在/etc/profile文件里实现(不建议)现在很多Linux发行版,默认是没有/etc/rc.local这个文件或者没有去执行,而使用的是/etc/rcX.d。

rcX.d并不是指这个目录或者文件就是叫rcX.d,这其中的X对应是0~6这7个数字,不同的数字对应着不同的级别查看当前系统/etc/rcX.d目录:[root@ecs-c687-ecrs work]# ls /etc/ | grep rc

bashrc csh.cshrc inputrc mail.rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.d rc.local vimrc virc wgetrc

通过runlevel命令查看当前系统的启动级别:

我当前使用的是CentOS7.4服务器版本,启动级别如下:[root@ecs-c687-ecrs ]# runlevel N 3查看/etc/rc3.d/目录下文件的详细信息:[root@ecs-c687-ecrs

~]#ls/etc/rc3.d/-ltotal0lrwxrwxrwx.1rootroot20Feb142022K50netconsole->../init.d/netconsolelrwxrwxrwx.

1rootroot17Feb142022K90network->../init.d/networklrwxrwxrwx1rootroot19Sep1522:07S12hostguard->../init.d/hostguard

lrwxrwxrwx1rootroot24Feb142022S50multi-queue-hw->../init.d/multi-queue-hw可以看到该目录下的文件都是链接文件,而且都是指向/etc/init.d中的shell脚本或者其他可执行文件,它们的命名方式基本都是以

S或者K开头,其后紧跟一个数字,数字后则是链接文件的名字,这个名字可以自行定义命名规则解释如下:以K90network为例: K表示stop,S表示start(表示需要传入参数),也就是说开机自启动命令会向脚本传入。

start或者stop,在脚本里可以收到参数$1进行一些判断,完成一些不同情况下的逻辑处理比如:开机执行什么代码,关机执行什么代码 90 表示脚本执行等级(通常越小越优先) network与/etc/init.d下的脚本文件名称保持一致。

3.4 利用rcX.d实现开机自动执行脚本比如:需求是开机之后创建一个文件,并向文件里存放一些数据(1)先在/etc/init.d目录下创建一个up_demo.sh脚本,编写脚本代码:#!/bin/bash。

echo$0$1 >> /home/up_test.txt 修改脚本权限:[root@ecs-c687-ecrs init.d]# chmod 777 /etc/init.d/up_demo.sh [

root@ecs-c687-ecrs init.d]# ls up_demo.sh -l -rwxrwxrwx 1 root root 76 Sep 1614:13 up_demo.sh (2) 在/etc/rc3.d目录里,创建软连接。

(因为我的系统启动级别为3)[root@ecs-c687-ecrsrc3.d]#ln-s/etc/init.d/up_demo.shS10up_demo[root@ecs-c687-ecrsrc3.d]#

ls-ltotal0lrwxrwxrwx.1rootroot20Feb142022K50netconsole->../init.d/netconsolelrwxrwxrwx.1rootroot17Feb

142022K90network->../init.d/networklrwxrwxrwx1rootroot22Sep1614:17S10up_demo->/etc/init.d/up_demo.shlrwxrwxrwx

1rootroot19Sep1522:07S12hostguard->../init.d/hostguardlrwxrwxrwx1rootroot24Feb142022S50multi-queue-hw

->../init.d/multi-queue-hw(3)重启系统,进入到/home目录下查看文件内容,可以看到开机启动成功,内容已经写到up_test.txt文件里了Welcome to Huawei Cloud Service [root。

@ecs-c687-ecrs ~]# cd /home/ [root@ecs-c687-ecrs home]# ls lib_run.sh up_test.txt video work work_pc work.tar.gz [root

@ecs-c687-ecrs home]# cat up_test.txt /etc/rc.d/init.d/up_demo.sh start [root@ecs-c687-ecrs home]# 关注我,第一时间了解华为云新鲜技术~


以上就是关于《手把手教你从安装CentOS7.4镜像开始,搭建IoT视频监控系统(centos安装总结)》的全部内容,本文网址:https://www.7ca.cn/baike/4533.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜