百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2025-01-23 20:13 11 浏览 0 评论

本文分享自华为云社区《华为云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 新安装的系统可以先安装一些工具

yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc gcc-c++ 
yum install -y vim wget lsof git zip unzip

2.2 获取Nginx二进制源码

听说srtmp模块暂时只支持Nginx13-15版本,当前就在官网下载Nginx14

wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar xvf nginx-1.14.2.tar.gz 

2.3 获取nginx-rtmp-module

wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.1.tar.gz
tar xvf v1.2.1.tar.gz

2.4 编译nginx

cd 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 module requires 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 {  
            live on;  
        	}
         }  
}

上面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个命令: 启动、停止、重启

service nginx start
service nginx stop
service nginx restart  或者 nginx -s reload  (运行中生效配置文件)

2.8 进行rtmp推流

服务器搭建好之后,推流和拉流的地址就是:  rtmp://<服务器IP地址>:8888/live/<推流存放的目录>
例如: rtmp://127.0.0.1:8888/live/xl

2.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 {  
           listen 8888;   
            application live {  
            live on;  #开启实时
			record all;
    		record_unique on;
    		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.mpegurl m3u8;
	  #ts分片文件设置
	  video/mp2t ts;
	}
	#指向访问m3u8文件目录
	alias ./m3u8File; #和rtmp模块里的hls_path设置路径一样
	add_header Cache-Control no-cache; #禁止缓存
}

rtmp模块的server配置里增加新的配置:

hls on;   #开启hls
hls_path ./m3u8File;  #hls的ts切片存放路径 (这是个目录,会自动创建的)
hls_fragment 2s;	  #本地切片长度
hls_playlist_length 6s;#HLS播放列表长度


/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:

worker_processes  1;   #Nginx进程数,建议设置为等于CPU总核数
 
events {
    worker_connections  1024;  #工作模式与连接数上限
}
 
rtmp_auto_push on;
 
#RTMP服务
rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  #开启实时
			record all;
    		record_unique on;
    		record_path "./video";  #视频缓存的路径
    		record_suffix -%Y-%m-%d-%H_%M_%S.flv;
			
            hls on;   #开启hls
            hls_path ./m3u8File;  #hls的ts切片存放路径
            hls_fragment 2s;	  #本地切片长度
            hls_playlist_length 6s;#HLS播放列表长度
        	}
         } 	 
}
 
#HTTP服务
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
 
    server {
        listen       8099;
        server_name  localhost;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
        location /live_hls{
		    types{
			    #m3u8 type设置
				application/vnd.apple.mpegurl m3u8;
				#ts分片文件设置
				video/mp2t ts;
			}
			#指向访问m3u8文件目录
			alias ./m3u8File;
			add_header Cache-Control no-cache; #禁止缓存
		}
 
        location /control{
		    rtmp_control all;
		}
		
		location /stat{
		    rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl{
		    root ./nginx-rtmp-module-master;
		}
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置之后重启服务器即可。

按照前面的配置,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 {
		 listen       8090;
		 server_name  localhost;
		 location / {
			root ./video;  #指定哪个目录作为Http文件服务器的根目录,如果你这里写了file就是你的根目录,那么访问的时候file就不会出现在目录中
			autoindex on;   #设置允许列出整个目录
			autoindex_exact_size off; #默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
			autoindex_localtime on; #默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
			charset utf-8; #防止文件乱码显示, 如果用utf-8还是乱码,就改成gbk试试	
        }
	}

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


/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:

worker_processes  1;   #Nginx进程数,建议设置为等于CPU总核数
 
events {
    worker_connections  1024;  #工作模式与连接数上限
}
 
rtmp_auto_push on;
 
#RTMP服务
rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  #开启实时
			record all;
    		record_unique on;
    		record_path "./video";  #视频缓存的路径
    		record_suffix -%Y-%m-%d-%H_%M_%S.flv;
			
            hls on;   #开启hls
            hls_path ./m3u8File;  #hls的ts切片存放路径
            hls_fragment 2s;	  #本地切片长度
            hls_playlist_length 6s;#HLS播放列表长度
        	}
         } 	 
}
 
#HTTP服务
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
 
	server {
		 listen       8090;
		 server_name  localhost;
		 location / {
			root ./video;  #指定哪个目录作为Http文件服务器的根目录,如果你这里写了file就是你的根目录,那么访问的时候file就不会出现在目录中
			autoindex on;   #设置允许列出整个目录
			autoindex_exact_size off; #默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
			autoindex_localtime on; #默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
			charset utf-8; #防止文件乱码显示, 如果用utf-8还是乱码,就改成gbk试试	
        }
	}
	
    server {
        listen       8099;
        server_name  localhost;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
		
        location /live_hls{
		    types{
			    #m3u8 type设置
				application/vnd.apple.mpegurl m3u8;
				#ts分片文件设置
				video/mp2t ts;
			}
			#指向访问m3u8文件目录
			alias ./m3u8File;
			add_header Cache-Control no-cache; #禁止缓存
		}
 
        location /control{
		    rtmp_control all;
		}
		
		location /stat{
		    rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl{
		    root ./nginx-rtmp-module-master;
		}
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

访问文件测试: 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_profile

3.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/ -l
total 0
lrwxrwxrwx. 1 root root 20 Feb 14  2022 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Feb 14  2022 K90network -> ../init.d/network
lrwxrwxrwx  1 root root 19 Sep 15 22:07 S12hostguard -> ../init.d/hostguard
lrwxrwxrwx  1 root root 24 Feb 14  2022 S50multi-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 16 14:13 up_demo.sh

(2) 在/etc/rc3.d目录里,创建软连接。 (因为我的系统启动级别为3)

[root@ecs-c687-ecrs rc3.d]# ln -s /etc/init.d/up_demo.sh S10up_demo
[root@ecs-c687-ecrs rc3.d]# ls -l
total 0
lrwxrwxrwx. 1 root root 20 Feb 14  2022 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Feb 14  2022 K90network -> ../init.d/network
lrwxrwxrwx  1 root root 22 Sep 16 14:17 S10up_demo -> /etc/init.d/up_demo.sh
lrwxrwxrwx  1 root root 19 Sep 15 22:07 S12hostguard -> ../init.d/hostguard
lrwxrwxrwx  1 root root 24 Feb 14  2022 S50multi-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]# 

关注我,第一时间了解华为云新鲜技术~

相关推荐

咱村里有个老爷子,居然自学起了Python编程

咱村里有个老爷子,没什么文化,居然自学起了Python编程,还搞出个“智能喂鸡系统”,这事儿可把整个村子都惊到了。要说这老爷子,平时就爱琢磨些新鲜玩意儿。一开始,大家还以为他是瞎折腾,毕竟都一把年纪了...

真上头!清华打造的最全Python教程,通俗易懂,学不会我退出IT圈

前言随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?小编这里整理了一套python编程零基础自学教程,清华大佬196小...

如何学好Python技术(怎么才能学会python)

现在python发展势头很猛,都想快速学好它,其实学任何一个语言没有太多好的秘诀,一般情况下,还是少不了你努力刻苦的样子。学好一门技术并不容易,很多人推荐学习python,在于比其他语言的约束,或者...

如何高效且系统地自学Python?(自己学python怎么学)

关于这个问题,我也算有些话语权吧!5年多经验的我,今天和大家分享一套系统性学习Python的方法,几周内系统性地学会Python并不是啥难事!首先,学习Python确立明确的学习目标至关重要。要系统性...

使用 Python 监控文件系统(基于python的监控系统)

前言在我们使用服务器的时候,有时候需要监控文件或文件夹的变化。例如,定期扫描文件夹下是否有某一类型的文件生成。今天,我们介绍如何使用Python来监控文件系统。在Python中,主要有两个监控...

Python文件读写最佳实践:关键操作的异常处理

在Python中进行文件操作时,合理的异常处理是保证程序健壮性的关键。以下是针对文件操作异常处理的全面指南。一、为什么需要异常处理?文件操作可能失败的常见原因:文件不存在(FileNotFoundEr...

Python编程笔记(python编程入门与案例详解)

1.Python简介Python是一种解释型、高级和通用的编程语言。它通过显著的缩进使用来强调代码的可读性。#HelloWorldprogramprint("Hello,World...

Python目录与文件操作教程(python word目录)

大家好,我是ICodeWR。今天要记录的是如何使用Python进行常见的目录和文件操作。Python提供了强大的内置模块来处理文件和目录操作。1.基本模块介绍Python中主要使用以下模块进行文件...

自动创建 Python 的 requirements.txt 文件

技术背景在Python开发中,requirements.txt文件用于记录项目所依赖的第三方库及其版本,方便在不同环境中部署项目。然而,当从GitHub下载Python源代码时,有时会缺...

Python文件操作指南(python 操作文件)

一、核心函数open()精解基本语法open(file,mode='r',encoding=None,errors=None,newline=None)关键参数解析1.f...

Python 实现从文本文件提取数据并分析保存

一、引言在日常的数据处理工作中,我们经常会遇到从文本文件中提取特定信息并进行分析的需求。本文将详细介绍如何使用Python编写代码,从一个包含用户网络使用信息的文本文件中提取用户姓名、入站流量和出...

22-3-Python高级特性-上下文管理器

4-上下文管理器4-1-概念上下文管理器是一种实现了`__enter__()`和`__exit__()`方法的对象;用于管理资源的生命周期,如文件的打开和关闭、数据库连接的建立和断开等。使用...

python:最简单爬虫之使用Scrapy框架爬取小说

python爬虫框架中,最简单的就是Scrapy框架。执行几个命令就能生成爬虫所需的项目文件,我们只需要在对应文件中调整代码,就能实现整套的爬虫功能。以下在开发工具PyCharm中用简单的Demo项目...

Python爬取小说技术指南(python爬取文章)

在Python中爬取小说需要遵循法律法规和网站的服务条款,请确保你有权获取目标内容。以下是使用Python爬取小说的通用技术流程安装依赖库pipinstallrequestsbeauti...

python原始套接字socket下载http网页文件到txt

python原始套接字socket下载http网页文件到txtimportsocketdefdownload_webpage(url,output_file):try:...

取消回复欢迎 发表评论: