2019.11.12-最新大华摄像机SDK开发,预览实时视频并指定码流格式保存到文件中(可观看)

大华摄像机SDK开发,预览实时视频并指定码流格式保存到文件中

由于本人最近在开发大华摄像机,特此分享一些经验给到各位开发朋友,本次实例是关于大华摄像机的实时预览视频码流保存到文件中的Demo,本人还开发过海康威斯的SDK,如果有需要的话看我前几篇文章下面附上链接,有问题留言看到一定会回复

以下为作者原创,如转载请告知,如不告知侵权必究
海康威视IPC二次开发SDK提取音频数据部分代码:https://blog.csdn.net/weixin_44232093/article/details/99406803

海康威视SDK二次开发通过云台参数设置控制摄像机的位置:https://blog.csdn.net/weixin_44232093/article/details/97649823

Java海康威视摄像头实时预览视频流保存到指定文件中:
https://blog.csdn.net/weixin_44232093/article/details/96429942

1.开发环境

  • Windows10系统,64位
  • 大华摄像机SDK版本: JAVA_64位
  • 大华摄像机机芯一个,型号DH-CA-HZ2023UC
  • 开发软件,IDEA2 017
  • 导入大华SDKdemo的时候注意要把使用eclipse路径勾选上,不然引入包会报错
package main.java.com.netsdk.demo.frame;

import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import main.java.com.netsdk.common.Res;
import main.java.com.netsdk.demo.module.LoginModule;
import main.java.com.netsdk.lib.NetSDKLib;
import main.java.com.netsdk.lib.ToolKits;

import javax.swing.*;

public class DaHuaCameraRealPlay {
    // 界面窗口
    private static JFrame frame = new JFrame();
    // 获取sdk实例
    public static NetSDKLib netsdk 	= NetSDKLib.NETSDK_INSTANCE;
    // 设备信息
    public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
    // 登陆句柄
    public static NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0);


    /*
    * 初始化设备
    * 登录设备
    * */
    public void startRealPlay(){
        // 登录
        DisConnect dis = new DisConnect();

        // 调用INit初始化, 登录设备
        LoginModule.init(dis, null);
        // 换成自己的设备信息即可 默认端口号37777 
        login("192.168.1.XXX",37777 ,"用户名" ,"密码" );
        RealPlayByDataType();
    }

    public void RealPlayByDataType() {

        // 创建Stin对象 设置码流格式 通道号  预览类型 用户数据 保存文件名称
        NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE stIn = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();

        stIn.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_GBPS;
        stIn.nChannelID = 0;
        stIn.rType = NetSDKLib.NET_RealPlayType.NET_RType_Realplay;

        stIn.dwUser = null;
        stIn.szSaveFileName = "D:\\DahuaResult\\result.flv";   // 转换后的裸H264码流文件名

        // 创建Stout对象
        NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE stOut = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();

        // 预览转码流保存
        NetSDKLib.LLong lRealHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, stIn, stOut, 5000);
        if(lRealHandle.longValue() != 0) {
            System.out.println("RealPlayByDataType Succeed!");
        } else {
            System.err.printf("RealPlayByDataType Failed!Last Error[0x%x]\n", netsdk.CLIENT_GetLastError());
            return;
        }
        try {
            // 录像时间 单位毫秒
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 停止预览
        netsdk.CLIENT_StopRealPlay(lRealHandle);   // 必须停止拉流后,才会生成文件


    }

    public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
        IntByReference nError = new IntByReference(0);
        m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError);
        if(m_hLoginHandle.longValue() == 0) {
            System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint());
        } else {
            System.out.println("Login Success [ " + m_strIp + " ]");
        }
        return m_hLoginHandle.longValue() == 0? false:true;
    }

    /*
    * 断线提示参数
    * */
    private static class DisConnect implements NetSDKLib.fDisConnect {
        public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
            // 断线提示
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    frame.setTitle(Res.string().getRealplay() + " : " + Res.string().getDisConnectReconnecting());
                }
            });
        }
    }

    public static void main(String[] args) {
        DaHuaCameraRealPlay daHuaCamera = new DaHuaCameraRealPlay();
        daHuaCamera.startRealPlay();
    }
}

如有问题请留言,看到必定回复,欢迎大家一起讨论,如有不足请指出

### 回答1: SpringBoot是一个开源的Java框架,它可以帮助开发者快速搭建和部署基于Java的应用程序。而对接大华相机视频SDK预览和抓图功能主要可以通过以下步骤实现: 1. 导入大华相机视频SDK的依赖:可以通过Maven或Gradle等构建工具将大华相机视频SDK的依赖添加到项目,并进行相关的配置。 2. 使用SpringBoot的自动配置功能:SpringBoot提供了自动配置的功能,可以根据项目的依赖自动进行一些配置。在配置文件添加相关的配置参数,如相机的IP地址、端口号等信息。 3. 编写预览功能:通过调用大华相机视频SDK的相关API,可以实现对相机视频流的获取和预览。可以使用JavaCV等开源库来处理视频流,并将预览结果显示在前端页面上。 4. 编写抓图功能:同样通过调用大华相机视频SDK的相关API,可以实现对相机视频流的抓图功能。可以将抓图结果保存到本地或上传到服务器,并返回给前端页面展示。 总之,通过SpringBoot的自动配置功能和大华相机视频SDK的API调用,可以实现对大华相机的预览和抓图功能。开发者可以根据自己的需求进行具体的功能实现和优化。 ### 回答2: Spring Boot是一个开源的Java开发框架,用于简化Java应用程序的开发和部署过程。对接大华相机视频SDK预览和抓图功能可以使用Spring Boot提供的多种技术和工具来实现。 首先,我们需要引入大华相机视频SDK的依赖,可以通过Maven或Gradle等构建工具来管理依赖。在pom.xml或build.gradle文件添加相应的依赖,并进行构建。 在Spring Boot的应用程序,可以使用Spring MVC来处理HTTP请求。我们可以创建一个Controller来处理预览和抓图的请求。在Controller定义相应的接口,并使用大华相机视频SDK提供的API来实现具体的功能。 对于预览功能,我们可以通过SDK提供的方法来连接相机设备并获取实时视频流。可以在Controller定义一个路由,当用户访问该路由时,调用SDK的方法来获取视频流并返回给用户。可以使用Spring MVC提供的@ResponseBody注解将视频流以二进制流的形式返回给前端。 对于抓图功能,我们可以通过SDK提供的方法来抓取当前视频帧并保存为图片。在Controller定义一个路由,当用户访问该路由时,调用SDK的方法来抓取当前视频帧并保存为图片。可以使用Spring MVC提供的@ResponseEntity注解将图片以响应的形式返回给前端。 除了Spring MVC,Spring Boot还提供了丰富的工具和功能,如Spring Security用于权限管理,Spring Data JPA用于数据库操作等。可以根据具体需求来选择使用哪些功能来完善整个应用程序。 总而言之,通过使用Spring Boot框架和大华相机视频SDK的API,我们可以很方便地实现预览和抓图的功能。 ### 回答3: SpringBoot是一个用于构建独立的、产品级别的Spring应用程序的开源框架。对接大华相机视频SDK预览和抓图功能,可以通过以下步骤完成: 1. 添加依赖:在SpringBoot项目的pom.xml文件添加大华相机视频SDK的依赖。 2. 配置SDK连接参数:在application.properties文件配置相机的IP地址、端口号、用户名和密码等连接参数。 3. 初始化SDK:在SpringBoot的启动类,使用SDK提供的初始化方法进行SDK的初始化,保证后续的调用可以正常进行。 4. 预览视频:可以在控制器类创建一个接口,代码使用SDK提供的方法进行视频预览。可以选择将视频流连续实时地输出到前端页面,或者通过SDK提供的回调功能将每一帧数据进行处理后输出。 5. 抓取图像:在控制器类再创建一个接口,代码使用SDK提供的方法进行图像的抓取。可以选择将抓取到的图像保存到本地磁盘,或者直接返回到前端页面进行展示。 需要注意的是,对接大华相机视频SDK需要开发者具备一定的视频处理和图像处理基础。同时,也需要根据SDK的文档和接口规范进行具体的编码实现。这里只是简单介绍了一种可能的实现方式,并不能覆盖所有具体细节。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叫我三胖哥哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值