写点什么

利用 ECS 服务器搭建安防视频监控平台

作者:DS小龙哥
  • 2022 年 7 月 11 日
  • 本文字数:4703 字

    阅读完需:约 15 分钟

1. 前言

华为云的弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。弹性云服务器从创立到发动只需几分钟,客户将具有云服务器的超级管理员权限,轻松布置各种运用。


这篇文章介绍华为云 ECS 服务器的购买、部署、登录、使用的整体流程,在服务器部署 NGINX 服务,搭建一个安防视频监控平台,本地开发了配套的 RTMP 流媒体推流客户端、RTMP 播放器,完成整体效果演示。 RTMP 流媒体推流客户端就是用来模拟摄像头硬件设备,RTMP 流媒体推流客户端在笔记本电脑上运行,将笔记本电脑上的摄像头音视频流实时推流到华为云服务器转存。

2. 购买云服务器

如果之前没有使用过华为云的 ECS 服务器,可以先申请试用 1 个月,了解服务器的基本使用然后再购买,不得不说提供这个试用服务还是非常不错。


产品试用领取地址: https://activity.huaweicloud.com/free_test/index.html



每天 9:30 开抢,每天限量 100 份,这个页面不仅有云服务器可以领取试用,还有云数据库、沙盒等其他产品。




我这里领取了 2核4G S6云服务器,这个服务器是配套华为自研 25GE 智能高速网卡,适用于网站和 Web 应用等中轻载企业应用。



选择配置的时候发现 S6 规格的已经没有了,来晚了。



S6 规格没有了,就选择了 S3,2 核,4GB 的配置结算。



页面向下翻,下面选择系统预装的系统,我这里选择 ubuntu 20.04,安装 NGINX,来搭建流媒体服务器。



页面继续下翻,设置云服务器名称,设置系统的 root 密码。



接着就可以继续去支付了。





购买后等待一段时间,系统资源就即可分配完成。


3. 登录云服务器

云服务器的管理控制台从这里进入: https://www.huaweicloud.com/product/ecs.html


在官网主页,点击产品,找到计算选项,就可以看到弹性云服务器 ECS,点击进去就可以看到管理控制台的选项。




弹性云服务器的选项页面可以看到刚才购买的云服务器,如果点击进去提示该区域没有可用的服务器,说明区域选择的不对,在下面截图红色框框的位置可以看到可用的区域切换按钮,切换之后就行了。



点击服务器右边的更多,可以对服务器重装系统、切换操作系统、关机、开机、重启、重置密码等操作。



接下来先点击登录,了解一下登录的流程,看看系统进去的效果。



云服务器支持 SSH 协议远程登录,可以在浏览器上直接使用 CloudShell 方式或者 VNC 方式登录,如果本身你自己也是使用 Linux 系统,可以在 Linux 系统里通过 ssh 命令直接登录,如果是在 windows 下可以使用 SecureCRT 登录。



其他登录方式。



最方便的登录方式,直接在控制台使用 VNC 在浏览器里登录,点击立即登录



根据提示输入用户名,密码后,按下回车键即可登录。


用户名直接输入root,密码就是刚才配置云服务器时,填入的 root 密码。


注意: Linux 下输入密码默认都是隐藏的,也就是在键盘上输入密码界面上是不会有反应的,自己按照正确的密码输入即可。



用户名、密码输入正确后,登录成功。


可以点击全屏模式,更好的操作。


4. 使用 CloudShell 登录云服务器

在页面上直接点击CloudShell登录按钮。CloudShell 方式比 VNC 方式方便、流畅多了,也支持命令的复制粘贴。




输入密码点击连接。



登录成功进入终端。


5. 使用 SecureCRT 登录云服务器

上面演示了两种登录方式,都是直接在浏览器里登录,这种两种方式比较来看,VNC 方式效率最低,CloudShell相对来说要方便很多。一般我自己正常开发时,都是使用第三方工具来登录的,如果本身自己开发环境的电脑就是 Linux,MAC 等,可以直接使用 ssh 命令登录,这种方式操作流畅方便。如果在 windows 下,可以使用第三方软件登录。


我现在使用的系统是 win10,在 windows 系统下有很多远程终端软件支持 SSH 登录到 Linux 云服务器,我当前采用的使用SecureCRT 6.5来作为登录终端,登录云服务器。


注意: SecureCRT 6.5 登录高版本 Linux 系统会出现Key exchange failed问题,导致登录失败,比如: 登录 ubuntu 20.04 系统。 出现这种问题需要对系统 ssh 配置文件进行添加配置。


添加配置的流程:


命令行输入:vim /etc/ssh/sshd_config
在文件最后添加:KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
保存退出。 重启ssh服务service ssh restart
复制代码


如果不想这么麻烦的去修改配置文件,那么最简单的办法就是: 切换操作系统,换一个低版本的,比如:ubuntu18.04 即可。


在云服务器的控制台,找到自己的服务器,然后选择切换操作系统。



根据界面上的引导流程,切换即可。更换新的系统需要 1~4 分钟时间,稍微等待一下即可。



如果要使用远程 SSH 协议方式登录云服务器,需要具备以下几个前提条件。


[1]弹性云服务器状态为“运行中”。[2]弹性云服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP。[3]所在安全组入方向已开放22端口,配置方式请参见配置安全组规则。[4]使用的登录工具(如PuTTY,SecureCRT`)与待登录的弹性云服务器之间网络连通。例如,默认的22端口没有被防火墙屏蔽。
复制代码


但是这些配置不用担心,在购买服务器后,根据引导一套走完,上面的这些配置都已经默认配置好了,不用自己再去单独配置。


系统切换成功后,打开SecureCRT 6.5软件,进行登录。SecureCRT 6.5整体而言还是挺好用的。


如果自己没有``SecureCRT,自己下载一个即可。当然,不一定非要使用SecureCRT`,其他还有很多 SSH 远程登录工具,喜欢哪个使用哪个。


下面介绍``SecureCRT `登录的流程。



选择新建会话。



选择 SSH2 协议。



主机名就填服务器的公网 IP 地址,端口号默认是 22,用户名填 root。



自己云服务器的公网 IP 地址,在控制台可以看到。



软件点击下一步之后,可以填充描述信息,备注这个链接是干什么的。



选择刚才新建的协议端口点击连接。



云服务器连接上之后,软件界面会弹出对话框填充用户名、密码。



登录成功的效果如下。



软件可以配置一些选项,让界面符合 Linux 终端配色,可以修改字体大小、字体编码等等。




配置后的效果。


6. 安装 NFS 服务器

为了方便向服务器上拷贝文件,可以采用 NFS 服务器、或者 FTP 服务器 这些方式。 我本地有一台 ubuntu 18.04 系统笔记本,我这里采用 NFS 方式拷贝文件上去。


(1)安装 NFS 服务器


root@ecs-348470:~# sudo apt-get install nfs-kernel-server
复制代码


(2)创建一个 work 目录方便当做共享目录使用


root@ecs-348470:~# mkdir work
复制代码


(3)编写 NFS 配置文件


NFS 服务的配置文件为/etc/exports,如果系统没有默认值,这个文件就不一定会存在,可以使用 vim 手动建立,然后在文件里面写入配置内容。


/home/work *(rw,no_root_squash,sync,no_subtree_check,insecure)    
复制代码



配置文件里参数的含义:






(4)NFS 服务器相关指令


/etc/init.d/nfs-kernel-server start #启动 NFS 服务ufw disable     #关闭防火墙/etc/init.d/nfs-kernel-server restart  #重启NFS服务exportfs -arv   #共享路径生效
复制代码


(5)本地客户机挂载服务器的目录


wbyq@wbyq:~$ sudo mount -t nfs -o nolock 122.112.212.171:/home/work /home/wbyq/mnt/
复制代码


(6)设置华为云服务器的安全策略


需要把华为云服务器的端口号开放出来,不然其他客户端是无法访问服务器的。


我这里比较粗暴直接,直接将所有端口号,所有 IP 地址都开放出来了。





**(7)本地客户机挂载服务器测试 **


挂载指令:


sudo mount -t nfs -o nolock 122.112.212.171:/home/work /home/wbyq/mnt/
复制代码


7. 安装 NGINX(配置 RTMP 服务)

(1)下载编译时需要依赖的一些工具


root@ecs-348470:~# sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
复制代码



(2)下载 NGINX 编译需要的软件包


root@ecs-348470:~# mkdir nginx      root@ecs-348470:~# cd nginx/root@ecs-348470:~# wget http://nginx.org/download/nginx-1.10.3.tar.gzroot@ecs-348470:~# wget http://zlib.net/zlib-1.2.11.tar.gzroot@ecs-348470:~# wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gzroot@ecs-348470:~# wget https://www.openssl.org/source/openssl-1.0.2k.tar.gzroot@ecs-348470:~# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
复制代码



(3)下载后的文件全部解压


root@ecs-348470:~# tar xvf openssl-1.0.2k.tar.gzroot@ecs-348470:~# tar xvf nginx-rtmp-module-master.tar.gzroot@ecs-348470:~# tar xvf nginx-1.8.1.tar.gzroot@ecs-348470:~# tar xvf pcre-8.40.tar.gzroot@ecs-348470:~# tar xvf zlib-1.2.11.tar.gz
复制代码



(4)配置 NGINX 源码,生成 Makefile 文件


root@ecs-348470:~# cd nginx-1.8.1/root@ecs-348470:~# ./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
复制代码


执行完上一步之后,打开 objs/Makefile 文件,找到-Werror 选项并删除。


(5)编译并安装 NGINX


 root@ecs-348470:~/nginx/nginx-1.8.1# make && make install
复制代码


安装之后 NGINX 的配置文件存放路径:


/usr/local/nginx/nginx:主程序
复制代码


(6)查看 NGINX 的版本号


root@ecs-348470:/usr/local/nginx/sbin# /usr/local/nginx/sbin/nginx -vnginx version: nginx/1.8.1
复制代码


(5)在配置文件里加入 RTMP 服务器的配置


root@ecs-348470:~# vim /usr/local/nginx/conf/nginx.conf 打开文件后,在文件最后加入以下配置:
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; } } }
复制代码


这样配置之后,服务器收到 RTMP 流会在 NGINX 的当前目录下,创建一个 video 目录用来缓存视频。


客户端向服务器推流之后,服务器就会缓存视频到设置的目录。


(5)检查配置文件是否正确


root@ecs-348470:/usr/local/nginx/sbin# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
复制代码


(6)NGINX 常用的 3 个命令


sudo service nginx startsudo service nginx stopsudo service nginx restart
复制代码


(7)启动 NGINX 服务器


sudo service nginx start
复制代码

8. 摄像头推流音视频到服务器

为了模拟摄像头实时监控推流,我这使用 QT+FFMPEG 编写了一个小软件,在 windows 下运行,推流本地笔记本电脑的数据到服务器。软件运行之后,将本地音频、视频编码之后通过 RTMP 协议推流到 NGINX 服务器。


软件运行效果:



推流工具运行过程中效果。


9. 编写本地 RTMP 流播放器

在上面第 8 小节,通过推流客户端模拟摄像头,已经将本地的摄像头数据实时推流到服务器了,那么还差一个播放器,为了方便能够在任何有网的地方实时查看摄像头的音频和图像,还需要编写一个 RTMP 流媒体播放器。


我这里的播放器内核是采用 libvlc 开发的,使用 QT 作为 GUI 框架,开发了一个流媒体播放器,可以实时拉取服务器上的流数据,并且还支持回放。因为服务器上的 NGINX 配置了自动保存的参数,可以将推上去的流按时间段保存下来。


输入服务器地址之后就可以拉取流进行播放。



点击获取回放列表,可以查看服务器上保存的历史视频回放播放。


10. 总结

相较于传统服务器,云服务器具有多方面的优势,利用弹性计算优势,帮助企业完成云上业务的部署与应用,,可以根据自身需要自定义服务器配置,灵活地选择设定所需的内存、CPU、带宽等配置,整体上减小了企业自己搭建服务器开发的成本,还省了服务器的一大堆维护费用。

发布于: 刚刚阅读数: 3
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
利用ECS服务器搭建安防视频监控平台_7月月更_DS小龙哥_InfoQ写作社区