用的是视频压缩卡,基于视频压缩卡的SDK开发包做上层的应用软件。自己公司做了一个不错的网络化的软件。现在老板想让我们的客户端软件来兼容多个厂家的视频压缩卡,提出了一个设想:如果前端的视频监控主机是用其他厂家的视频压缩卡,它运行的系统和软件都不换,我们在这个机器上加一个软件只负责抓取视频数据向中心客户端发送。这样就涉及到一个问题:在一个系统中要有两个独立的进程对视频压缩卡进行控制。目前视频压缩卡的SDK都是只能打开一次卡,获得卡的句柄,对卡的所有操作都要用到卡的句柄。我们现在用的是海康的视频卡。我做了一个DLL,把卡的句柄放在DLL的共享区内,第一个用到该DLL的进程来打开卡,第二个就在共享区内直接得到卡的句柄值。写了两个小程序,一个用来显示视频图像,一个用来录像。只有完成开卡的程序才能对卡进行控制,第二个起的程序虽然能得到卡的句柄值但是把该句柄值作为参数放入到SDK的函数中并没有生效。这个我只是做个实验的。
老板提出的这个设想可行吗?如何绕过SDK来对卡直接操作呢?windows2000下可以对这样的硬件设备打开两次吗?底层的东西我不太懂,有点无从下手的感觉。
老板提出的这个设想可行吗?如何绕过SDK来对卡直接操作呢?windows2000下可以对这样的硬件设备打开两次吗?底层的东西我不太懂,有点无从下手的感觉。
http://blog.csdn.net/happydeer如果不用DShow的话,你可以通过设置,来确认用什么方式打开你的视频卡。或者把视频采集的模块独立开,多做几个针对不同卡处理模块,也可以。
或者写一个filter driver,不过这需要DDK的知识,同时还要研究原来视频压缩卡的驱动.
最简单的方法就是重写前端视频程序
如果我们执行CreateFile,这是系统会发送IRP_MJ_CREATE命令到相应的驱动里,驱动就
会进行相应的操作,能不能被多次打开是在驱动里设置的,用户模式并不能控制。
用户可以通过DeviceIoControl函数可以和驱动程序(ring0)进行数据的交换,具体详细的内
容可以去看WDM驱动相关的资料