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();
    }
}

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

你可能感兴趣的:(java,java,大华摄像机SDK,二次开发Demo,保存码流数据)