本人在使用海康DS-4004HC板卡网络SDK开发监控软件的时候,碰到一个难题,半年多了一直没有解决,恳请有过类似经验的高手帮忙解决


背景:


该监控软件需要对数量不定的机房进行视频监控,每个机房有一台工控机,每台工控机安装有一块DS-4004HC卡,每块卡连接4个摄像机。

工控机上安装有录像机软件,该软件使用海康DS-4004HC板卡网络SDK服务端接口,负责24小时不间断录像,同时进行网络发送。

客户端软件需要24小时不间断循环播放所有机房的4路视频,每次播放一个机房4路视频,维持5-60秒,再自动切换到下一个机房。

客户端软件在长时间运行后(10小时以上),软件崩溃。


问题描述如下:

为了简化问题,我特定写了一个测试用的小程序CCTVPoolTest.exe,作为网络客户端运行在计算机B上;

使用海康的网络服务端Demo,作为网络服务端运行在计算机A上;

A和B同在一个局域网内;

CCTVPoolTest.exe程序需要每隔5-60秒重新连接服务端,时间短没有任何问题,时间过长(通常在10个小时以后)客户端软件容易出现问题:



1.软件进程的句柄数和线程数不断增加,最后客户端软件崩溃(见下图)

网络报警主机典型应用架构海康 海康报警网络模块_网络报警主机典型应用架构海康

网络报警主机典型应用架构海康 海康报警网络模块_技术人_02


2.软件所用内存不断上升,最后也崩溃了。(如果在B上同时使用其他软件做其他工作,比如IE、QQ等,客户端软件死的更快)



另外:

1.有时候MP4_ClientStart函数抛出内存读写异常

2.客户端代码CCTVPoolTest.exe已经给海康的技术人员看过了,没有任何问题

3.客户端CCTVPoolTest.exe使用.NET开发

4.在连接不同的通道之前和切换之前都用sleep延时,无效果

5.出问题时,MP4_ClientStop函数的执行时间比较长,达到2秒以上

6.出问题后,即使调用MP4_ClientCleanup函数重新再初始化客户端也没有用

7.运行客户端的计算机硬件配置越差,越容易出现问题

8.运行客户端的计算机越忙(比如同时浏览网页、看PDF文档等),越容易出现问题(应该和第7条是同一个原因)


我感觉有两个可能的原因:

1、海康网络SDK本身有问题
2、是.NET的问题(这一点需要使用VC的客户端来测试,如果使用VC客户端不存在此现象,说明是.NET的PInvoke有毛病)

已排除的原因:
1.SDK版本
2.计算机本身