智能监控项目中期总结1-架构

    

          从过完年后就一直忙于老板的项目,我负责其中的流媒体服务器搭建部分,结合项目需求,能提供出图像帧用于算法处理。

            之前,我们做了一个监控系统,是基于B/S架构的,客户端直接读取各种网络摄像头,然后解码显示 ;如果进行算法处理,就直接在客户端解H264,得到一帧图,然后转化成我们Opencv中常用的Mat图进行算法处理,完了直接以RGB格式显示。这样实现到是挺容易的,但不是一个好的产品,特别是现在都是C/S架构的,所以,老板决定转成C/S架构,在服务器端解码得到图片进行我们自己的算法处理,然后转发到客户端去显示,这样搞起来就复杂多了,但同时也减轻了客户端的工作,让服务端和客户端各司其职。

         大致的架构师这样一个想法,都是基于H264的。我首先在服务端从网络摄像头读取RTSP流(市场上大都是这样读取视频),然后解析RTSP流,得到RTP包,然后将RTP包组包,得到H264的帧,接着用FFMPEG解码,得到一帧MAT图。好,这就是一个部分,MAT图给算法进行处理后肯定变了(比如用于人脸检测则有个框人脸的框,用于行人检测、图像分割、动目标检测等),算法处理后的MAT图是RGB格式的,我肯定不能就这么传出去了,那样太大了。所以后面部分是我得到MAT图后进行H264编码,用的是X264库,其实也可以用FFmpeg,因为FFmpeg编译的时候可以包含X264库。编码完后就得传出去了,以什么样的形式呢,当然是RTP包封装了,这里我就开始着手写代码了,一部部一部分攻破,但后来发现其实我对这个流程还是没有研究彻底,导致了我后面的一系列失误。后面到底怎样了,这样看起来应该没问题呀?大家可以先想想,后面我会慢慢讲。

        服务器端流程图:


      智能监控项目中期总结1-架构_第1张图片

     客户端就对应的Socket接收,然后解码显示即可。

     下面开始写代码。

你可能感兴趣的:(工程项目)