海康DVR视频监控底层不会封装啊?
基于B/S架构的网络视频监控将成为趋势。
OCX本身并不难,是个带界面的COM对象,关键要注意一下控件与容器之间的关系。在视频监控程序中B/S结构是目前比较流行的,IE浏览器中嵌入一个或多个控件来显示一路或多路视频图像。这样OCX就必须承担C/S结构中CLIENT的角色。在多画面显示图像的时候,用OCX控件一般有两种方式,一种是图像在OCX内部划分,在单个OCX控件中显示多路视频,这种方式是一种单实例的方式,他通过对象聚合方式来处理,优点是便于管理和控制。难点是图像的分割显示。还有一种方式是一个控件只显示一路视频图像,这种方式把每个OCX控件的实例都当作一个客户端来看待,处理起来比较容易。但也存在一些问题,比如:在IE中显示十六路图像,就需要创建十六个OCX控件的实例,服务器也要接受十六个同IP用户的连接,服务器和客户端的会话被分割了,增加了服务器的压力。同时也使客户端处理服务器事件和消息带来了麻烦。
在说一下在编写OCX 时需要注意的问题(第二种模式)。
1、OCX中避免使用全局变量。因为在同一个容器中构造多个相同OCX控件的实例时,OCX控件中的全局变量会被当作共享数据处理,你修改一个控件的全局变量就等效于修改了容器中其他相同控件的全局变量的值。
2、根据1中所说的特点,我们在OCX中用一个全局的双向链表来存储每个OCX对象实例,对OCX做操作的时候先查找链表,找到当前操作的实例,然后再通过这个实例对象操作OCX,这样做的目的就是保证OCX控件中数据的唯一性,还可以区分焦点控件。smartsight iDVR中选择焦点控件就是用这个方法做的,呵呵。
3、共享SOCKET,可以用一个全局的SOCKET来处理客户端和服务器之间的会话,全局SOCKET和控件实例链表都