java海康威视摄像头录制视频
程序员文章站
2023-12-22 16:41:28
...
java海康摄像头录制视频
这里就只介绍下录制视频的代码,安装环境啥的就不说了!!!
如果不喜欢,勿喷啊,我也是个刚入行的小白,偶尔记录下开发的一些功能代码,希望下面这段代码能帮到你。
下面是摄像头的初始化和登录的代码,如果你的代码里有,就不要抄我的啦啊!!!
/**
初始化摄像头
**/
public NativeLong initDataVideo() {
String strPathCom = "/home/czc/java/lib";
HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
struComPath.write();
boolean loginFlag = hCNetSDK.NET_DVR_Init();
System.out.print("initSDK is " + loginFlag + "\n");
System.out.print("error code :" + hCNetSDK.NET_DVR_GetLastError() + "\n");
hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
hCNetSDK.NET_DVR_SetLogToFile(true, null, false);
lRealHandle = new NativeLong(-1);
this.m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
this.m_strClientInfo.lChannel = new NativeLong(1);
this.m_strClientInfo.lLinkMode = new NativeLong(0);
this.m_strClientInfo.hPlayWnd = null;
return lRealHandle;
}
//摄像头登录
public NativeLong myLogin(String ip) {
HCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
HCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
struLoginInfo.bUseAsynLogin = 0;
struLoginInfo.wPort = 8000;//端口
String address = ip;//你的IP地址
String userName = "";//用户名
String passWord = "";//密码
for (int i = 0; i < address.length(); i++) {
struLoginInfo.sDeviceAddress[i] = (byte) address.charAt(i);
}
for (int i = 0; i < userName.length(); i++) {
struLoginInfo.sUserName[i] = (byte) userName.charAt(i);
}
for (int i = 0; i < passWord.length(); i++) {
struLoginInfo.sPassword[i] = (byte) passWord.charAt(i);
}
struLoginInfo.write();
userId = hCNetSDK.NET_DVR_Login_V40(struLoginInfo.getPointer(), struDeviceInfoV40.getPointer());
System.out.println("********** ip :" + ip+ "*****************");
System.out.println("********** NET_DVR_GetLastError :" + hCNetSDK.NET_DVR_GetLastError() + "*****************");
System.out.println("********** this.m_strClientInfo.lChannel :"+ this.m_strClientInfo.lChannel + "*****************");
System.out.println("the userId is :" + userId + "\n");
return userId;
}
接下里才是你点进来的真正原因吧,重点来了…
NativeLong NET_DVR_RealPlay_V30(NativeLong lUserID, NET_DVR_CLIENTINFO lpClientInfo,
FRealDataCallBack_V30 fRealDataCallBack_V30, Pointer pUser, boolean bBlocked);
boolean NET_DVR_SaveRealData(NativeLong lRealHandle, String sFileName);
boolean NET_DVR_StopSaveRealData(NativeLong lRealHandle);
boolean NET_DVR_StopRealPlay(NativeLong lRealHandle);
boolean NET_DVR_Logout_V30(NativeLong lUserID);
boolean NET_DVR_Cleanup();
//开始录像
public Result startRecord(String ip, String path,String filePath) {
Result result = new Result();
//用当前时间戳来命名视频名字
long time = System.currentTimeMillis();
if(StrUtil.isBlank(filePath)){
filePath=path + time;
}
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
String fileName = filePath + File.separator + time + ".mp4";
initDataVideo();//初始化摄像头
NativeLong lUserID = myLogin(ip);//登录摄像头
lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID, this.m_strClientInfo, null, null, true);
//如果失败了,在重新来一次
if (lRealHandle.longValue() == -1) {
initDataVideo();
myLogin(ip);
lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30(this.userId, this.m_strClientInfo, null, null, true);
System.err.println("---------" + hCNetSDK.NET_DVR_GetLastError());
}
//打印错误代码
System.err.println("---------" + hCNetSDK.NET_DVR_GetLastError());
//录像
boolean mark = hCNetSDK.NET_DVR_SaveRealData(lRealHandle, fileName);
if (!mark) {
result.setMsg("录像失败");
result.setSuccess(false);
System.err.println("----录像失败:" + hCNetSDK.NET_DVR_GetLastError()+"-----");
}
//返回结果
result.setCode(filePath);
result.setData(lRealHandle);
return result;
}
//停止录像
//lRealHandle就是 lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30 他的返回值,在上面有
public void stopRecord(NativeLong lRealHandle) {
hCNetSDK.NET_DVR_StopSaveRealData(lRealHandle);
destroySDK();
System.err.println(hCNetSDK.NET_DVR_GetLastError());
System.out.print("*************stoptime************:" + System.currentTimeMillis() + "\n");
}
public void destroySDK() {
boolean stopRealPlay = hCNetSDK.NET_DVR_StopRealPlay(this.lRealHandle);
boolean logoutV30 = hCNetSDK.NET_DVR_Logout_V30(this.userId);
boolean cleanup = hCNetSDK.NET_DVR_Cleanup();
System.out.println("stopRealPlay = " + stopRealPlay);
System.out.println("logoutV30 = " + logoutV30);
System.out.println("cleanup = " + cleanup);
}
到这,海康威视录制视频的功能就可以说做完了。
如果你想录制出来的视频上加上日期时间,看下图:
用网页登录的你摄像头IP,看到如下页面,你就可以设置这些操作了