海康威视Java SDK拉流(一)初始化SDK
19年的时候做了一个视频分析的产品,用户使用的安防摄像机基本的都是海康大华宇视,今天写一下关于Java调用海康威视摄像机的demo,当时也踩了很多坑。写个博客记录一下
测试环境:
系统:Centos 7
SDK:设备网络SDK Linux64
SDK基本的调用流程:

图中中虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。按实现功能的不同可以分 成十个模块,实现每个模块的功能时初始化 SDK、用户注册设备、注销设备和释放 SDK 资源这 4 个流程是必不可少的。
SO动态库介绍:
关于so动态库大概有这么多,
主要的两个库分别是:libhcnetsdk.so 外部接口库 和libPlayCtrl.so视频播放解码库
初始化SDK(NET_DVR_Init)
/**
* 海康SDK初始化
*
* @author 云深小麦
*/
private static void getSdkInit() {
boolean response = HKNETSDK.NET_DVR_Init();
if (!response) {
log.info("sdkClient.getSdkInit.NET_DVR_Init error:{}", HKNETSDK.NET_DVR_GetLastError());
}
}
NET_DVR_Init:初始化 SDK
true 表示成功,false 表示失败。
NET_DVR_GetLastError:返回最后操作的错误码
建议没次调用SDK里的接
口都打印一下这个接口,返回0代表没有错误,就怕打印别的
用户注册设备(NET_DVR_Login_V40)
/**
* 海康设备登录
*
* @param camera
* @return NativeLong
* @author 云深小麦
*/
private NativeLong getLogin(AlgorithmParam camera) {
HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
for (int i = 0; i < camera.getIp().length(); i++) {
loginInfo.sDeviceAddress[i] = (byte) camera.getIp().charAt(i);
}
for (int i = 0; i < camera.getPassword().length(); i++) {
loginInfo.sPassword[i] = (byte) camera.getPassword().charAt(i);
}
for (int i = 0; i < camera.getUser().length(); i++) {
loginInfo.sUserName[i] = (byte) camera.getUser().charAt(i);
}
loginInfo.wPort = camera.getPort().shortValue();
loginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V40 dvrDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
Pointer loginInfoPointer = loginInfo.getPointer();
Pointer deviceInfoPointer = dvrDeviceInfo.getPointer();
log.info("streamServiceImpl.NET_DVR_Login_V40.NET_DVR_Login_V40 request:{}", new Gson().toJson(camera));
NativeLong nativeLong = HKNETSDK.NET_DVR_Login_V40(loginInfoPointer, deviceInfoPointer);
if (nativeLong.intValue() > 0) {
log.error("streamServiceImpl.NET_DVR_Login_V40.NET_DVR_Login_V40 error:{}", HKNETSDK.NET_DVR_GetLastError());
throw new StreamException(HKNETSDK.NET_DVR_GetLastError());
}
log.info("streamServiceImpl.getLogin error:{}", HKNETSDK.NET_DVR_GetLastError());
return nativeLong;
}
图中用的NET_DVR_Login_V30,代码中我用的NET_DVR_Login_V40
区别在于:V30传的是多个 单个参数,V40是把多个参数封装成了对象
NativeLong NET_DVR_Login_V30(String sDVRIP, short wDVRPort, String sUserName, String sPassword, NET_DVR_DEVICEINFO_V30 lpDeviceInfo);
NativeLong NET_DVR_Login_V40(Pointer pLoginInfo, Pointer lpDeviceInfo);
参数:登录参数,包括设备地址、登录用户、密码等
返回-1 表示登录失败,其他值表示返回的用 户 ID 值
用户注销(NET_DVR_Logout)
true 表示成功,false 表示失败。
/**
* 用户注销
*
* @return NativeLong
* @author 云深小麦
*/
private void getLoginOut(NativeLong aLong) {
boolean response = HKNETSDK.NET_DVR_Logout(aLong);
if (!response) {
log.info("streamServiceImpl.NET_DVR_Logout.NET_DVR_Logout error:{}", HKNETSDK.NET_DVR_GetLastError());
}
}
释放 SDK 资源 (NET_DVR_Cleanup)
true 表示成功,false 表示失败。
/**
* 是否SDK资源
*
* @author 云深小麦
*/
private static void getSdkCleanup() {
boolean response = HKNETSDK.NET_DVR_Cleanup();
if (!response) {
log.info("sdkClient.getSdkCleanup.NET_DVR_Cleanup error:{}", HKNETSDK.NET_DVR_GetLastError());
}
}
代码写的太乱,我还在整理中。。。
注意:so动态库是linux版本的,windows版本的有部分接口不一样
海康威视Java SDK拉流(一)初始化SDK的更多相关文章
- 海康威视摄像机Java SDK拉流(二)开启关闭实时预览
本篇介绍海康威视摄像机通过SDK开启关闭实时预览接口 下篇介绍实时预览的回调函数及解码库 测试环境: 系统:Centos 7 SDK:设备网络SDK Linux64 实时预览模块流程: 图中虚线框部分 ...
- java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
前言: 之前已经对FFmpeg命令进行了封装http://blog.csdn.net/eguid_1/article/details/51787646,但是当时没有考虑到扩展性,所以总体设计不是太好, ...
- java.lang.NoClassDefFoundError: com/gexin/rp/sdk/exceptions/RequestException解决方法
本文为博主原创,未经允许不得转载: 最近在开发个推的时候遇到的问题,当我在maven仓库中下载个推的jar包时,下载不下来,索性在项目中Configue build Path,将jar下载到本地 手动 ...
- Android使用ContentProvider初始化SDK库方案总结
做Android SDK开发的时候,一般我们会将初始化的方法封装为,然后让调用SDK的开发者在Application的onCreate方法中进行初始化.但是目前一些主流的SDK框架,并没有提供相关的方 ...
- 兼容性强、简单、成熟、稳定的RTMPClient客户端拉流功能组件EasyRTMPClient
EasyRTMPClient EasyRTMPClient拉流功能组件是EasyDarwin流媒体团队开发.提供和维护的一套非常稳定.易用.支持重连的RTMPClient工具,SDK形式提供,全平台支 ...
- rtmp直播拉流客户端EasyRTMPClient TCP窗口大小设计方法
EasyRTMPClient 简介 EasyRTMPClient是EasyDarwin流媒体团队开发.提供的一套非常稳定.易用.支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单 ...
- javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据
javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...
- javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片
javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...
- iOS - 直播流程,视频推流,视频拉流,简介,SMTP、RTMP、HLS、 PLPlayerKit
收藏笔记 1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示1.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据涉及技术或协议:摄像机: ...
随机推荐
- Codeforces 1361C - Johnny and Megan's Necklace(欧拉回路)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这个题作为 D1C 还是蛮合适的-- 首先不难发现答案不超过 \(20\),所以可以直接暴力枚举答案并 check 答案是否 ...
- Python 包管理工具 pip 与 conda
简介 pip是接触 python 后最早认识的包管理工具.通过使用 pip 能够自动下载和解决不同 python 模块的依赖问题,使 python 的配置过程变得简单. 与 pip 类似,conda ...
- header 301,显示302
header 301,显示302 一定要注意Location 后面的":"前后都不能有空格 header('HTTP/1.1 301 Moved Permanently'); he ...
- C语言中储存的大小端问题
一.大小端定义 研究变量的高低字节:从左往右看,字节序递增,也就是最右边是最低字节,最右边是最高字节.如 int i = 0x01020304, 01是高字节,04是低字节.如果是字符串如char a ...
- accessory, accident
accessory 1. belt, scarf, handbag, Penny用rhinestone做的小首饰(Penny Blossom)都是accessory2. With default se ...
- C++ 类型转换(C风格的强制转换):
转https://www.cnblogs.com/Allen-rg/p/6999360.html C++ 类型转换(C风格的强制转换): 在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型, ...
- jQuery对象进行方法扩展
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>01 ...
- Flink Exactly-once 实现原理解析
关注公众号:大数据技术派,回复"资料",领取1024G资料. 这一课时我们将讲解 Flink "精确一次"的语义实现原理,同时这也是面试的必考点. Flink ...
- Charles 手机抓包
Charles 手机抓包 请求抓包对于程序员调试代码必不可少,Charles是一个用与抓包的好工具(也可以使用Fiddler),Charles抓包是通过中间人代理实现,在客户端和服务端通信时,Char ...
- C++STL标准库学习笔记(一)sort
前言: 近来在学习STL标准库,做一份笔记并整理好,方便自己梳理知识.以后查找,也方便他人学习,两全其美,快哉快哉! 这里我会以中国大学慕课上北京大学郭炜老师的<程序设计与算法(一)C语言程序设 ...