海康威视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.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据涉及技术或协议:摄像机: ...
随机推荐
- NOIP2020 模拟赛 B 组 Day6
非常巧妙的一场模拟赛,比较偏向于 Atcoder 的风格,考场上做出了 A .C 两题. A. 礼物购买 排完序后一个个礼物地枚举时间复杂度是\(\Theta(nm)\)的,不能接受.但是注意到,若当 ...
- MEGAN4,MEGAN5和MEGAN6的Linux安装和使用
目录 MEGAN 4 MEGAN 5 MEGAN 6 MEGAN(Metagenome Analyzer)是宏基因组学进行物种和功能研究的常用软件,实际上现在的Diamond+MEGAN6已经是一套比 ...
- 深入浅出KMP
前言:曾经有次在阿里的面试中遇到这个基础的问题,当时知道有这么回事,可是时间久了便 想不起来,可能是不怎么用到,基本调用库什么的,还有个是理解不深刻,不能得到show me the code 的程度, ...
- SQL-join(inner join)、left join、right join、full join
0.JOIN 类型 有时我们需要从两个或更多的表中获取结果,数据库中的表可通过键将彼此联系起来.每个表中都有一个主键,主键(Primary Key)是一个列,值都唯一.这样做的目的是在不重复每个表中的 ...
- CentOS6源码安装zabbix服务器
1.下载安装包并解压 2.预环境搭建 3.创建zabbix用户,编译安装zabbix 4.配置mysql 5.配置zabbix-server 6.配置apache和php 7.添加开机自启动 1 yu ...
- android studio 编译 Android dependency has different version
找了一圈,终于在大佬的博客中找到了解决方法. 附链接:https://blog.csdn.net/u010725171/article/details/81232183 Android depende ...
- A Child's History of England.3
So, Julius Caesar came sailing over to this Island of ours, with eighty vessels and twelve thousand ...
- above, abrupt
above 近义词: over, beyond, exceeding反义词: below, beneath, under, underneath 有从右往左写的文字,没有从下往上的.above-men ...
- Zookeeper【概述、安装、原理、使用】
目录 第1章 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4应用场景 第2章 Zookeep安装 2.1 下载地址 2.2 本地模式安装 1. 安装前准备 2. 配置修改 ...
- 商业爬虫学习笔记day6
一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...