晴天_one 2021-07-26 10:57 采纳率: 80%
浏览 427
已结题

大华SDK下载录像DEMO问题

你好,我想问一下,我把之前用的JFrame框架进行了修改,然后下载录像成功之后,文件的大小确为0K,不知道哪里有问题,请教一下

public class DowmLoadRecordFile {
    private String m_strIp = "117.172.167.248";
    private int m_nPort = 38888;
    private String m_strUser = "admin";
    private String m_strPassword = "YBGX1234";

    // 开始时间
    private NetSDKLib.NET_TIME stTimeStart = new NetSDKLib.NET_TIME();

    // 结束时间
    private NetSDKLib.NET_TIME stTimeEnd = new NetSDKLib.NET_TIME();

    // 设备信息扩展
    private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();

    public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;

    // 登陆句柄
    private NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0);

    private NetSDKLib.LLong m_hDownLoadByTimeHandle = new NetSDKLib.LLong(0);   // 按时间下载句柄

    private DownLoadPosCallBackByTime m_DownLoadPosByTime = new DownLoadPosCallBackByTime(); // 录像下载进度

    class DownLoadPosCallBackByTime implements NetSDKLib.fTimeDownLoadPosCallBack {
        @Override
        public void invoke(NetSDKLib.LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
            if(dwDownLoadSize == -1) {
                DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
            }
        }
    }

    // 网络连接恢复
    private static HaveReConnect haveReConnect = new HaveReConnect();

    // 网络连接恢复,设备重连成功回调
    // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
    private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
        @Override
        public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
        }
    }

    //1.初始化
    public void init() {
//        netSdk.CLIENT_Init(DowmLoadRecordFile.DisConnectCallBack.getInstance(), null);
        LoginModule.init(DowmLoadRecordFile.DisConnectCallBack.getInstance(), haveReConnect);   // 打开工程,初始化
    }

    //2.登陆
    public void Login() {
        // 登陆设备
//        int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP;    // TCP登入
//        IntByReference nError = new IntByReference(0);
//        loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser,
//                m_strPassword, nSpecCap, null, deviceInfo, nError);
//        if (loginHandle.longValue() != 0) {
//            System.out.printf("Login Device[%s] Success!\n", m_strIp);
//        } else {
//            System.err.printf("Login Device[%s] Fail.Error[0x%x]\n", m_strIp, netSdk.CLIENT_GetLastError());
//            LoginOut();
//        }

        if(LoginModule.login(m_strIp,
                m_nPort,
                m_strUser,
                m_strPassword)){
            DownLoadRecordModule.setStreamType(0);
            System.out.printf("Login Device[%s] Success!\n", m_strIp);
        }else{
            System.err.printf("Login Device[%s] Fail.Error[0x%x]\n", m_strIp, netSdk.CLIENT_GetLastError());
            LoginOut();
        }
    }

    //3.执行流程
    public void run(LocalDateTime startTime, LocalDateTime endTime) {
        int m_streamType = 0;
        int nChannelId = 0;
        int nRecordFileType = 0;

        stTimeStart.dwYear = startTime.getYear();
        stTimeStart.dwMonth = startTime.getMonth().getValue();
        stTimeStart.dwDay = startTime.getDayOfMonth();
        stTimeStart.dwHour = startTime.getHour();
        stTimeStart.dwMinute = startTime.getMinute();
        stTimeStart.dwSecond = startTime.getSecond();

        stTimeEnd.dwYear = endTime.getYear();
        stTimeEnd.dwMonth = endTime.getMonth().getValue();
        stTimeEnd.dwDay = endTime.getDayOfMonth();
        stTimeEnd.dwHour = endTime.getHour();
        stTimeEnd.dwMinute = endTime.getMinute();
        stTimeEnd.dwSecond = endTime.getSecond();


        //设置回放时的码流类型
        DownLoadRecordModule.setStreamType(m_streamType);
        NetSDKLib.LLong m_hDownLoadByFileHandle = new NetSDKLib.LLong();
        //下载录像
        m_hDownLoadByFileHandle = DownLoadRecordModule.downloadRecordFile(nChannelId,
                nRecordFileType,
                stTimeStart,//20210723171834
                stTimeEnd,//20210723171934
                SavePath.getSavePath().getSaveRecordFilePath(),//./RecordFile/2021-07-23/2021-07-23_17-25-14.dav
                null);

        //停止下载
        DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);

        if (m_hDownLoadByFileHandle.longValue() != 0) {
            System.out.println("下载完成");
        }
    }

    //登出
    public void LoginOut() {
        System.out.println("End Test");

        if (loginHandle.longValue() != 0) {
            netSdk.CLIENT_Logout(loginHandle);
        }
        System.out.println("See You...");

        netSdk.CLIENT_Cleanup();
        System.exit(0);
    }

    /**
     * 设备断线回调
     */
    private static class DisConnectCallBack implements NetSDKLib.fDisConnect {

        private DisConnectCallBack() {
        }

        private static class CallBackHolder {
            private static DowmLoadRecordFile.DisConnectCallBack instance = new DowmLoadRecordFile.DisConnectCallBack();
        }

        public static DowmLoadRecordFile.DisConnectCallBack getInstance() {
            return DowmLoadRecordFile.DisConnectCallBack.CallBackHolder.instance;
        }

        @Override
        public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
        }
    }


    public static void main(String[] args) {
        DowmLoadRecordFile dowmLoadRecordFile = new DowmLoadRecordFile();
        dowmLoadRecordFile.init();
        dowmLoadRecordFile.Login();
        dowmLoadRecordFile.run(LocalDateTime.of(2021, Month.JULY, 26, 9, 37, 56), LocalDateTime.of(2021, Month.JULY, 26, 9, 38, 56));
        dowmLoadRecordFile.LoginOut();
    }
}


  • 写回答

3条回答 默认 最新

  • weixin_39328061 2021-12-10 19:05
    关注

    你好。我也这问题,问问你解决了吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 7月26日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?