在云服务器上搭建安防视频监控平台,实现视频推流拉流

1. 前言

这篇文章介绍在华为云ECS服务器(ubuntu18.04)部署NGINX服务,搭建一个安防视频监控平台,本地开发了配套的RTMP流媒体推流客户端、RTMP播放器,完成整体效果演示。 RTMP流媒体推流客户端就是用来模拟摄像头硬件设备,RTMP流媒体推流客户端在笔记本电脑上运行,将笔记本电脑上的摄像头音视频流实时推流到华为云服务器转存。 从购买、部署、登录、使用的整体流程开始介绍。华为云的弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。弹性云服务器从创立到发动只需几分钟,客户将具有云服务器的超级管理员权限,轻松布置各种运用。

2. 购买云服务器

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

产品试用领取地址: activity.huaweicloud.com/free_test/i...

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

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

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

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

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

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

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

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

3. 登录云服务器

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

在官网主页,点击产品,找到计算选项,就可以看到弹性云服务器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配置文件进行添加配置。

添加配置的流程:

cpp 复制代码
命令行输入:
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协议方式登录云服务器,需要具备以下几个前提条件。

cpp 复制代码
[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服务器

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

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

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

(3)编写NFS配置文件

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

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

配置文件里参数的含义:

(4)NFS服务器相关指令

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

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

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

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

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

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

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

挂载指令:

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

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

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

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

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

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

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

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

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

cpp 复制代码
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

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

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

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

(6)查看NGINX的版本号

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

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

cpp 复制代码
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)检查配置文件是否正确

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

(6)NGINX常用的3个命令

cpp 复制代码
sudo service nginx start
sudo service nginx stop
sudo service nginx restart

(7)启动NGINX服务器

cpp 复制代码
sudo service nginx start

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

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

软件运行效果:

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

9. 编写本地RTMP流播放器

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

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

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

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

10. 总结

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

相关推荐
小突突突5 小时前
Spring框架中的单例bean是线程安全的吗?
java·后端·spring
iso少年5 小时前
Go 语言并发编程核心与用法
开发语言·后端·golang
掘金码甲哥5 小时前
云原生算力平台的架构解读
后端
码事漫谈6 小时前
智谱AI从清华实验室到“全球大模型第一股”的六年征程
后端
码事漫谈6 小时前
现代软件开发中常用架构的系统梳理与实践指南
后端
Mr.Entropy6 小时前
JdbcTemplate 性能好,但 Hibernate 生产力高。 如何选择?
java·后端·hibernate
YDS8296 小时前
SpringCloud —— MQ的可靠性保障和延迟消息
后端·spring·spring cloud·rabbitmq
无限大67 小时前
为什么"区块链"不只是比特币?——从加密货币到分布式应用
后端
洛神么么哒7 小时前
freeswitch-初级-01-日志分割
后端
蝎子莱莱爱打怪7 小时前
我的2025年年终总结
java·后端·面试