海康威视Java SDK拉流(一)初始化SDK

19年的时候做了一个视频分析的产品,用户使用的安防摄像机基本的都是海康大华宇视,今天写一下关于Java调用海康威视摄像机的demo,当时也踩了很多坑。写个博客记录一下

下一篇:海康威视摄像机Java SDK拉流(二)开启关闭实时预览

测试环境:

        系统: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版本的有部分接口不一样

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云深小麦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值