用的是视频压缩卡,基于视频压缩卡的SDK开发包做上层的应用软件。自己公司做了一个不错的网络化的软件。现在老板想让我们的客户端软件来兼容多个厂家的视频压缩卡,提出了一个设想:如果前端的视频监控主机是用其他厂家的视频压缩卡,它运行的系统和软件都不换,我们在这个机器上加一个软件只负责抓取视频数据向中心客户端发送。这样就涉及到一个问题:在一个系统中要有两个独立的进程对视频压缩卡进行控制。目前视频压缩卡的SDK都是只能打开一次卡,获得卡的句柄,对卡的所有操作都要用到卡的句柄。我们现在用的是海康的视频卡。我做了一个DLL,把卡的句柄放在DLL的共享区内,第一个用到该DLL的进程来打开卡,第二个就在共享区内直接得到卡的句柄值。写了两个小程序,一个用来显示视频图像,一个用来录像。只有完成开卡的程序才能对卡进行控制,第二个起的程序虽然能得到卡的句柄值但是把该句柄值作为参数放入到SDK的函数中并没有生效。这个我只是做个实验的。
老板提出的这个设想可行吗?如何绕过SDK来对卡直接操作呢?windows2000下可以对这样的硬件设备打开两次吗?底层的东西我不太懂,有点无从下手的感觉。

解决方案 »

  1.   

    符合WDM驱动的卡,都可以用DShow来进行控制,详情请看陆其明的两本书
    http://blog.csdn.net/happydeer如果不用DShow的话,你可以通过设置,来确认用什么方式打开你的视频卡。或者把视频采集的模块独立开,多做几个针对不同卡处理模块,也可以。
      

  2.   

    两个进程应该不行,可能需要对原系统进行反编译分析,然后是使用远程注入的方法操纵视频卡
    或者写一个filter driver,不过这需要DDK的知识,同时还要研究原来视频压缩卡的驱动.
    最简单的方法就是重写前端视频程序
      

  3.   

    在注册表中看到硬件设备的ClassGUID,通过调用哪个设备管理函数来得到这个硬件设备(视频压缩卡)的设备名称,用CreateFile函数来打开这个设备。可以这样做吗?
      

  4.   

    显卡、声卡等硬件设备又是怎样能被多个应用程序同时访问(我的意思是同时打开realpaly和mediaplay两个可以同时工作,有图像现实有声音输出),这个是什么原理,他们的工作机制又是什么?知道的能说说吗?这个和两个应用程序同时访问视频压缩卡有什么不同的呢?疑惑?
      

  5.   

    我们平常一般的应用程序(ring3)都是在用户模式下进行,是无法直接和硬件打交道的,
    如果我们执行CreateFile,这是系统会发送IRP_MJ_CREATE命令到相应的驱动里,驱动就
    会进行相应的操作,能不能被多次打开是在驱动里设置的,用户模式并不能控制。
    用户可以通过DeviceIoControl函数可以和驱动程序(ring0)进行数据的交换,具体详细的内
    容可以去看WDM驱动相关的资料