java 获取nvr视频流,海康录像机获取回放视频流并读到磁盘中可进行回放

这段Java代码展示了如何使用HCNetSDK库连接到海康NVR设备,初始化SDK,登录设备,获取视频流并将其保存到磁盘进行回放。通过设置回调函数、监听端口和报警布防,实现对设备的监控和数据获取。
摘要由CSDN通过智能技术生成

packagecom.lg.haikang.hkdevice.Controller;

importcn.hutool.core.util.XmlUtil;

importcom.lg.haikang.hkdevice.demo.HCNetSDK;

importcom.sun.jna.NativeLong;

importcom.sun.jna.Pointer;

importcom.sun.jna.examples.win32.W32API;

importcom.sun.jna.ptr.IntByReference;

importorg.w3c.dom.Document;

importjavax.swing.*;

importjava.io.IOException;

importjava.io.UnsupportedEncodingException;

importjava.net.DatagramPacket;

importjava.net.DatagramSocket;

public classTest11 {

staticHCNetSDK hCNetSDK= HCNetSDK.INSTANCE;

staticHCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;//设备信息HCNetSDK.NET_DVR_STREAM_INFO strStreamInfo;//流ID信息// NET_DVR_BARRIERGATE_COND m_struGateCond={0}; //出入口控制参数配置条件// NET_DVR_ENTRANCE_CFG m_struEntrance={0}; //出入口控制参数// DWORD dwStatus = 0;

static intlUserID;//用户句柄intlAlarmHandle=-1;//报警布防句柄NativeLong lListenHandle;//报警监听句柄

FMSGCallBack fMSFCallBack;//报警回调函数实现

//暴漏事件监听端口 该设备不支持public intjt(){

inta= hCNetSDK.NET_DVR_StartListen_V30("192.168.168.99",(short) 9000,fMSFCallBack,null);

System.out.println(a+"监听句柄");

returna;

}

//布防publicString bf() {

if(lUserID== -1)

{

JOptionPane.showMessageDialog(null, "请先注册");

return"请先注册";

}

System.out.println(lAlarmHandle+"布防句柄");

if(lAlarmHandle< 0)//尚未布防,需要布防{

if(fMSFCallBack== null)

{

fMSFCallBack= newFMSGCallBack();

Pointer pUser = null;

if(!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(fMSFCallBack, pUser))

{

System.out.println("设置回调函数失败!");

}

}

HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = newHCNetSDK.NET_DVR_SETUPALARM_PARAM();

m_strAlarmInfo.dwSize=m_strAlarmInfo.size();

m_strAlarmInfo.byLevel=0; //布防优先级:0-一等级(高),1-二等级(中),2-三等级(低)

m_strAlarmInfo.byAlarmInfoType=1; //0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)m_strAlarmInfo.write();

//建立报警上传通道,获取报警等信息。 代lAlarmHandle= hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);

if(lAlarmHandle== -1)

{

System.out.println("布防失败,错误码:"+ hCNetSDK.NET_DVR_GetLastError());

JOptionPane.showMessageDialog(null, "布防失败");

return"布防失败";

}

else{

JOptionPane.showMessageDialog(null, "布防成功");

return"布防成功";

}

}

return"布防未知";

}

//SDK初始化public staticString sdkInit(){

booleaninitSuc = hCNetSDK.NET_DVR_Init();

if(initSuc != true)

{

//http://192.168.10.51:18336/doc/page/main.aspJOptionPane.showMessageDialog(null, "初始化失败");

System.out.println("初始化失败");

return"初始化失败";

}

System.out.println("初始化成功");

return"初始化成功";

}

public longlogin(){

// String m_sDeviceIP ="192.168.10.68";String m_sDeviceIP ="192.168.10.51";

// int iPort=8000;// int iPort=18336;intiPort=25225;

String UserName="admin";

String Password ="haikang123";

intbUseAsynLogin=0;

m_strDeviceInfo= newHCNetSDK.NET_DVR_DEVICEINFO_V30();

//int iPort = Integer.parseInt(jTextFieldPortNumber.getText());lUserID= hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,

(short) iPort, UserName, Password, m_strDeviceInfo);

// /* lUserID = hCNetSDK.NET_DVR_Login_V40(m_sDeviceIP,// (short) iPort, UserName, Password, m_strDeviceInfo);*/

longuserID = lUserID;

System.out.println(userID+"用户登陆句柄,"+&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ISAPI协议是一个Internet Server Application Programming Interface,它可以帮助开发人员开发基于HTTP的服务器应用程序。要获取海康 NVR 直播流,首先需要了解各个接口,然后使用 Java 语言编写代码来实现该功能。 ### 回答2: 使用Java利用ISAPI协议获取海康NVR直播流,可以按照以下步骤进行代码编写: 1. 导入相关的Java库,如Apache HttpClient库和FastJson库,以支持网络请求和JSON数据处理。 2. 创建一个HttpClient实例,用于发送HTTP请求到NVR设备。 3. 构建ISAPI登录请求,包括NVR设备的IP地址、端口号、用户名和密码等信息,并将其转换为JSON格式。 4. 发送登录请求到NVR设备指定的ISAPI接口,获取到登录会话ID。 5. 构建获取直播流请求,包括登录会话ID、通道号、码流类型、视频类型等信息,并将其转换为JSON格式。 6. 发送获取直播流请求到NVR设备指定的ISAPI接口,获取到直播流地址。 7. 使用获取到的直播流地址进行实时传输或其他处理操作,如通过FFmpeg将直播流保存为本地文件或进行实时展示。 8. 关闭HTTP连接。 下面是一个简单的示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; public class NvrStreamExample { public static void main(String[] args) { // NVR设备信息 String nvrIp = "192.168.0.1"; int nvrPort = 80; String username = "admin"; String password = "admin123"; // 构建登录请求 String loginUrl = "http://" + nvrIp + ":" + nvrPort + "/ISAPI/Streaming/channels/1"; String loginJson = "{\"username\":\"" + username + "\", \"password\":\"" + password + "\"}"; // 构建获取直播流请求 String streamUrl = "http://" + nvrIp + ":" + nvrPort + "/ISAPI/Streaming/channels/1"; String streamJson = "{\"sessionID\":\"\", \"channelID\":\"1\", \"streamType\":\"main\",\"videoType\":\"live\"}"; try { // 发送登录请求 HttpPost loginRequest = new HttpPost(loginUrl); loginRequest.setHeader("Content-Type", "application/json"); loginRequest.setEntity(new StringEntity(loginJson)); HttpClient httpClient = new DefaultHttpClient(); HttpResponse loginResponse = httpClient.execute(loginRequest); HttpEntity loginEntity = loginResponse.getEntity(); String sessionId = EntityUtils.toString(loginEntity); // 发送获取直播流请求 HttpPost streamRequest = new HttpPost(streamUrl); streamRequest.setHeader("Content-Type", "application/json"); streamRequest.setEntity(new StringEntity(streamJson.replace("\"sessionID\":\"\"", "\"sessionID\":\"" + sessionId + "\""))); HttpResponse streamResponse = httpClient.execute(streamRequest); HttpEntity streamEntity = streamResponse.getEntity(); String streamUrl = EntityUtils.toString(streamEntity); // 获取到直播流地址后进行操作,例如实时传输或保存为本地文件 // 关闭HTTP连接 httpClient.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,以上代码仅为示例,具体的请求URL和JSON内容可能会根据实际情况而有所不同,需要根据NVR设备的接口文档进行调整。同时,也可以根据需求选择其他的HTTP库来发送请求。 ### 回答3: 使用ISAPI协议获取海康NVR直播流的Java代码如下: 首先,需要创建一个HttpURLConnection对象,并设置相关参数,如连接目标URL、请求方法、认证信息等。具体代码如下: ```java String nvrUrl = "http://nvr_ip/ISAPI/Streaming/channels/101/picture"; // NVR直播流URL String username = "admin"; // NVR用户名 String password = "password"; // NVR密码 try { URL url = new URL(nvrUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // 使用GET请求获取直播流 String authString = username + ":" + password; String encodedAuthString = Base64.getEncoder().encodeToString(authString.getBytes()); connection.setRequestProperty("Authorization", "Basic " + encodedAuthString); // 设置认证信息 connection.setDoOutput(true); connection.setDoInput(true); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // 获取直播流数据,并进行处理 InputStream inputStream = connection.getInputStream(); // 在此处进行流的处理,如保存到文件或进行解码等 } else { // 处理请求失败的情况 } connection.disconnect(); } catch (IOException e) { e.printStackTrace(); } ``` 上述代码,需要替换`nvrUrl`变量为实际NVR的URL,`username`和`password`为NVR的登录用户名和密码。 代码使用了Base64编码方式对用户名和密码进行了编码,并通过`Authorization`请求头将认证信息发送给NVR。 通过`getInputStream()`方法可以获取到NVR返回的直播流数据,根据实际需要进行进一步的处理,比如保存到文件或进行解码等。 以上是基本的获取海康NVR直播流的Java代码示例,具体的实现方式可能因环境和需求而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值