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

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、带宽等配置,整体上减小了企业自己搭建服务器开发的成本,还省了服务器的一大堆维护费用。

相关推荐
代码之光_198034 分钟前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi39 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
颜淡慕潇2 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
尚学教辅学习资料3 小时前
基于SpringBoot的医药管理系统+LW示例参考
java·spring boot·后端·java毕业设计·医药管理
monkey_meng4 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马4 小时前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng4 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
paopaokaka_luck8 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风10 小时前
详解K8S--声明式API
后端