本文仅仅实现java 本地调用海康摄像头,后续的视频码解析正在研究。
默认环境:
1.从官网下载好对应OS的SDK。
2.连通摄像头。
3.搭建Java项目,集成sdk中的java demo。
先看效果:
正文:
此类所在位置:
内容:
import ClientDemo.HCNetSDK;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import ClientDemo.HCNetSDK.*;
import com.sun.jna.examples.win32.W32API.HWND;
import java.awt.*;
import javax.swing.*;
/**
* @Title: MyDemo1
* @Description:
* @Author: Niucd
* @Date: 2019/9/3 11:21
* @Version: 1.0
*/
public class CameraDemo {
static String ip = "169.254.121.11";
static short port = 8000;
static String user = "admin";
static String pwd = "STGXQM";
/**
* Main函数
* DateTime: 2019/9/3 11:21
*/
public static void main(String[] args){
//
//1>初始化设备SDK:对整个网络SDK 系统的初始化,内存预分配等操作。-----------------------------
HCNetSDK sdk = HCNetSDK.INSTANCE;
boolean initSuc = sdk.NET_DVR_Init();
if(initSuc){
System.out.println("初始化设备环境成功。。。");
}else{
System.out.println("初始化设备环境失败。。。");
return;
}
Panel panelRealplay = createPanel();
//
//2>注册设备:实现用户的注册功能,注册成功后,返回的用户ID 作为其他功能操作的唯一标识---------------
NativeLong lUserID=new NativeLong(-1);
NET_DVR_DEVICEINFO_V30 devinfo=new NET_DVR_DEVICEINFO_V30();//设备信息
lUserID=sdk.NET_DVR_Login_V30(ip,port,user,pwd,devinfo);//返回一个用户编号,同时将设备信息写入devinfo
if(lUserID.longValue() > -1){
System.out.println("设备注册成功。。。");
System.out.println("lUserID:"+lUserID);
}else{
System.out.println("设备注册失败。。。");
System.out.println("错误码:"+sdk.NET_DVR_GetLastError());
}
//
//获取设备资源信息
NativeLong lRealPlayHandle;
HWND hwnd = new HWND(Native.getComponentPointer(panelRealplay)); //获取窗口句柄
NET_DVR_CLIENTINFO net_dvr_clientinfo = new NET_DVR_CLIENTINFO();
net_dvr_clientinfo.hPlayWnd = hwnd; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
net_dvr_clientinfo.lChannel = new NativeLong(1); //预览通道号
net_dvr_clientinfo.lLinkMode = new NativeLong(0); //0-主码流,1-子码流,2-码流3,3-码流4,以此类推
net_dvr_clientinfo.sMultiCastIP = ip;
lRealPlayHandle = sdk.NET_DVR_RealPlay_V30(lUserID, net_dvr_clientinfo, null, null, true);
//---------------------------------------
// try { Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}
// //关闭预览
// sdk.NET_DVR_StopRealPlay(lRealPlayHandle);
// //注销用户
// sdk.NET_DVR_Logout(lUserID);
// //释放SDK资源
// sdk.NET_DVR_Cleanup();
}
/*
创建播放面板
*/
public static Panel createPanel(){
JFrame jframe = new JFrame("视频播放测试");//创建面板
Panel panel = new Panel();//容器
jframe.add(panel).setBackground(Color.WHITE);
jframe.setSize(800,600);
jframe.setLocationRelativeTo(null);//在屏幕中居中显示
jframe.setVisible(true);
return panel;
}
}