突然发现自己快成了专门调硬件的了

废话不多说了,正题开始

使用的库

1.官方的两个dll(Mix.dll,Sa7134Capture.dll),可能对应不同版本,我这是6.0的,附件里有

2.jna的jar包,注意是两个

jna.jar,jna-platform.jar

以上都在本文后面提供下载

关键代码

首先是jna的代理,不明白的看下jna怎么用,这里定义dll存在的且你需要的函数就可以了

package xingyang.meam.video;import java.io.File;import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.win32.StdCallLibrary;/*** * 视频显示设备* * @author Administrator* */
public interface CaptureDevice extends StdCallLibrary {File f = new File("");CaptureDevice INSTANCE = (CaptureDevice) Native.loadLibrary(f.getAbsolutePath() + "\\Sa7134Capture", CaptureDevice.class);/*** 该函数用于初始化开发包。在使用SDK开发包中的函数前,首先需要调用该函数进行初始化。* * @param hwnd*            表示视频显示多路小窗口的父窗口。* @param eDispTransType*            表示显示类型。* @param bLnitAuDev*            表示是否初始化音频设备。* @return*/public boolean VCAInitSdk(HWND hwnd);/*** 该函数用于释放调用VCAInitSdk函数分配的系统资源,通常在程序结束时调用该函数。*/public void VCAUnInitSdk();/*** 该函数用于获得监控卡中芯片的数量。通常,监控卡支持多少路视频,将会存在多少个芯片。* * @return 表示系统中安装监控卡上的芯片数量。*/public int VCAGetDevNum();/*** 该函数用于打开指定卡号的设备,并分配相应的系统资源。* * @param dwCard*            表示视频捕捉的卡号。* @param hPreviewWnd*            表示视频预览窗口句柄。* @return*/public boolean VCAOpenDevice(int dwCard, HWND hPreviewWnd);/*** 该函数用于关闭指定卡号的设备,释放相应系统资源。* * @param dwCard*            表示视频捕捉的卡号。* @return*/public boolean VCACloseDevice(int dwCard);/*** 该函数用于打开视频预览窗口。* * @param dwCard*            表示预览的视频卡号。* @return*/public boolean VCAStartVideoPreview(int dwCard);/*** 该函数用于停止视频预览。* * @param dwCard*            表示预览的视频卡号。* @return*/public boolean VCAStopVideoPreview(int dwCard);/*** 该函数用于更新视频预览窗口。当预览窗口的父窗口大小或位置改变时,需要调用该函数进行调整。* * @param hOverlayWnd*            表示预览窗口的父窗口。* @return*/public boolean VCAUpdateOverlayWnd(HWND hOverlayWnd);/*** 该函数用于更新视频预览窗口。当预览窗口的大小和位置需要调整时调用该函数。通常,在调用该函数前,需要调用VCAUpdateOverlayWnd函数。* * @param dwCard*            表示预览的视频卡号。* @param hPreviewWnd*            表示视频预览窗口。* @return*/public boolean VCAUpdateVideoPreview(int dwCard, HWND hPreviewWnd);
}

主类

package xingyang.meam.video;import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.io.IOException;
import java.util.Properties;import javax.swing.JFrame;import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;public class VideoMain {public static void main(String[] args) {Properties p = new Properties();try {p.load(VideoMain.class.getResourceAsStream("/config.properties"));} catch (IOException e) {e.printStackTrace();}String[] cardNos = p.getProperty("cardNumbers", "0,1,2,3").trim().split(",");// int type = Integer.parseInt(p.getProperty("type"));JFrame jf = new JFrame();Panel parent = new Panel();parent.setPreferredSize(new Dimension(660, 500));jf.add(parent);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);parent.setLayout(new FlowLayout());Panel panels[] = new Panel[cardNos.length];for (int i = 0; i < panels.length; i++) {Panel cardPanel = new Panel();cardPanel.setPreferredSize(new Dimension(320, 240));cardPanel.setBackground(new Color(255, 0, 255));parent.add(cardPanel);panels[i] = cardPanel;}jf.pack();jf.setVisible(true);boolean success = CaptureDevice.INSTANCE.VCAInitSdk(createHWNDByComponent(parent));if (!success) {System.out.println("init = " + success);}for (int i = 0; i < panels.length; i++) {Panel cardPanel = panels[i];HWND hwnd = createHWNDByComponent(cardPanel);int cardNo = Integer.parseInt(cardNos[i]);System.out.println("cardNo = " + cardNo);boolean isopen = CaptureDevice.INSTANCE.VCAOpenDevice(cardNo, hwnd);if (!isopen) {System.out.println("isopen = " + isopen);}boolean isstart = CaptureDevice.INSTANCE.VCAStartVideoPreview(cardNo);if (!isstart) {System.out.println("isstart = " + isstart);}// CaptureDevice.INSTANCE// .VCAUpdateOverlayWnd(createHWNDByComponent(parent));// CaptureDevice.INSTANCE.VCAUpdateVideoPreview(cardNo, hwnd);}// CaptureDevice.INSTANCE// .VCAUpdateOverlayWnd(createHWNDByComponent(parent));}private static HWND createHWNDByComponent(Component parent) {return new HWND(Native.getComponentPointer(parent));}
}

这里有个变态的是,就是小panel(显示视频的panel)的背景色不能随便设,得设成粉色(255,0,255)才行,否则。。明明返回的都是true,就是不显示画面。。

还有个注意的地方,Native.getComponentPointer的参数得是重量级的不能用轻量级的

也就是awt的,别用swing的

其他就没啥了

发现jna果然是个神器。。。。,否则写JNI。。。想想都头疼

附件是java工程,导入eclipse,直接运行

java 使用JNA连接天敏VC4000采集卡相关推荐

  1. C#结合天敏VC4000采集卡视频监控

    作者:wnety 转自:http://blog.csdn.net/wnety/article/details/7452303 准备:天敏VC4000视频采集卡的二次开发包有两个文件,分别是Sa7134 ...

  2. 天敏VC4000调试

    公司让我测试一个从客户那儿返回的问题产品,老板给我的是天敏VC4000采集卡. 我从天敏官网下载了驱动,各个版本及客户端,尝试了两三天天都没解决问题,是通过拨打天敏技服电话,让他远程协助解决的. 我觉 ...

  3. android usb采集卡,USB HDMI直播采集卡1805怎么用?

    原标题:USB HDMI直播采集卡1805怎么用? USB HDMI直播采集卡介绍 USB HDMI采集卡1805通过USB接口预览.收集音频和视频信息,将音频和视频信号通过HDMI接口传输到PC.智 ...

  4. 如何安装、设置采集卡,如何使用采集卡工具检查采集信号

    采集卡:主要是捕获外界光电.视频.音频等模拟信号并将其数字化导入计算机进行数字处理的捕获设备,主要有图像采集卡.视频采集卡.音频采集卡(比如声卡).数据采集卡等.简单来讲:主要用来采集计算机.游戏机( ...

  5. 天敏VC4000视频开发设计方案

    作者:wqvbjhc 转自:http://blog.csdn.net/wqvbjhc/article/details/5983967 分类: 其他 2010-11-03 10:17 2689人阅读 评 ...

  6. java使用ssh连接Linux并执行命令

    maven pom.xml配置:<dependency><groupId>com.jcraft</groupId><artifactId>jsch< ...

  7. JAVA通过JDBC连接并操作MySQL数据库

    JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...

  8. java前端长连接框架_Java如何实现长连接

    实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的. 如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端: Client通过持有Socket的对象,可以随时(使 ...

  9. jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...

    Java使用jdbc连接MySql数据库,实现增删改查 首先,导入MySql连接数据库的jar包,我用的是 mysql连接jar包 DB类,用于获得数据库连接 import java.sql.Driv ...

最新文章

  1. 面试官问你想找什么工作_找工作时如何面试面试官
  2. nodejs源码—初始化
  3. 华为2011上机笔试题2+参考程序
  4. c#用webkit内核支持html5
  5. 洛谷 - P4755 Beautiful Pair(笛卡尔树+主席树)
  6. 十分钟看懂什么是VoLTE【包学包会,否则退款】
  7. 制作多系统启动盘教程_制作U盘启动盘教程
  8. 【luogu1816】忠(RMQ问题、线段树)
  9. 活在当下本意是抑制欲望的无度
  10. 发那科机器人点位编辑_【发那科】发那科机器人指令编辑大全
  11. IEEE Access模板caption无法换行
  12. c语言来用按键控制风扇转速,基于单片机的能风扇调速设计.doc
  13. 入门电机系列之2驱动器
  14. html文件如何设置右键菜单,windows系统使用小技巧,创建属于自己的右键新建菜单-右键菜单设置...
  15. Arduino - 驱动HC-SR501 人体红外感应模块
  16. Tomcat-Connector(连接器)
  17. c# 读hex_C# Hex编码和解码
  18. python编程源码
  19. 注册环节个人信息已“透明” App查询征信水有多深?
  20. 关于proteus中串口发送数据与实际不符的问题(如发00h,收80h)

热门文章

  1. cps网店php源码,100%开源程序 PHP源码 页游联运系统 CPA+CPS
  2. 纯HTML+CSS带说明的黄色导航菜单
  3. 在Linux上安装Git
  4. Kali Linux渗透测试之被动信息收集(一)——nslookup、dig、DNS区域传输、DNS字典爆破、DNS注册信息
  5. Java中 Dao,Service,Controller,Util,Model 是什么意思,为什么划分?
  6. mathcad使用小结
  7. linux shell 命令之 uname
  8. S4 HANA连接其他数据库(oracle,sqlserver)
  9. oracle增加表空间大小
  10. 计算机教师职称申报工作总结,信息技术(计算机)教师职称评定工作总结