public OResult <Boolean> GetDeviceOnlineStatus() { try { var succ = CHCNetSDK.NET_DVR_RemoteControl(_userId, 20005, IntPtr.Zero, 0); if (!succ) { return(new OResult <Boolean>(false, $"获取设备在线状态失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Login(CameraLoginRequest request) { try { var struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO(); //设备IP地址或者域名 Byte[] byIP = Encoding.Default.GetBytes(request.IP); struLogInfo.sDeviceAddress = new Byte[129]; byIP.CopyTo(struLogInfo.sDeviceAddress, 0); //设备服务端口号 struLogInfo.wPort = (UInt16)request.LoginPort; //设备用户名 Byte[] byUserName = Encoding.Default.GetBytes(request.UserName); struLogInfo.sUserName = new Byte[64]; byUserName.CopyTo(struLogInfo.sUserName, 0); //设备密码 Byte[] byPassword = Encoding.Default.GetBytes(request.Password); struLogInfo.sPassword = new Byte[64]; byPassword.CopyTo(struLogInfo.sPassword, 0); struLogInfo.cbLoginResult = new CHCNetSDK.LOGINRESULTCALLBACK(LoginCallBack); struLogInfo.bUseAsynLogin = false; _deviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40(); _userId = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref _deviceInfo); if (_userId < 0) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"登录失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _loginRequest = request; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Reboot() { try { if (_userId < 0) { return(new OResult <Boolean>(false, "用户未登录")); } var succ = CHCNetSDK.NET_DVR_RebootDVR(_userId); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"重启摄像头失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> StopPTZControl(PTZCommand cmd, Int32 speed = 4) { try { var succ = CHCNetSDK.NET_DVR_PTZControlWithSpeed_Other(_userId, _loginRequest.ChannelNo, (UInt32)cmd, 1, (UInt32)speed); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"停止摄像头移动失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Play(String fileName) { var stopResult = Stop(); if (!stopResult.Success) { return(new OResult <Boolean>(false, stopResult.ErrorCode, stopResult.Message)); } try { _playbackHandle = CHCNetSDK.NET_DVR_PlayBackByName(_userId, fileName, _hPlayWnd); if (_playbackHandle < 0) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"回放播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(_playbackHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"回放播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _playerStatus = PlayerStatus.Play; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Byte[]> CapturePicture() { if (_userId < 0) { return(new OResult <Byte[]>(null, "用户未登录")); } try { //图片保存路径和文件名 //var picFileName = $"User_{_userId}_{DateTimeHelper.GetTimestamp()}.jpg"; CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA(); lpJpegPara.wPicQuality = 0; //图像质量 Image quality lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档 //var captureSucc = CHCNetSDK.NET_DVR_CaptureJPEGPicture(_userId, _loginRequest.ChannelNo, ref lpJpegPara, picFileName); //if (!captureSucc) //{ // return new OResult<Byte[]>(null, $"抓图失败:{GetLastErrorCode()}"); //} UInt32 iBuffSize = 10 * 1024 * 1024; //缓冲区大小需要不小于一张图片数据的大小 The buffer size should not be less than the picture size Byte[] byJpegPicBuffer = new Byte[iBuffSize]; UInt32 dwSizeReturned = 0; var captureSucc = CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(_userId, _loginRequest.ChannelNo, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned); if (!captureSucc) { return(new OResult <Byte[]>(null, HkvsErrorCode.GetLastErrorCode(), $"抓图失败:{HkvsErrorCode.GetLastErrorMessage()}")); } var data = new Byte[dwSizeReturned]; Buffer.BlockCopy(byJpegPicBuffer, 0, data, 0, data.Length); return(new OResult <Byte[]>(data)); } catch (Exception ex) { return(new OResult <Byte[]>(null, ex)); } }
private OResult <Boolean> PTZPreset(Int32 command, Int32 presetIndex) { try { if (presetIndex < 1 || presetIndex > 255) { return(new OResult <Boolean>(false, "预置点超出范围[1-255]")); } var succ = CHCNetSDK.NET_DVR_PTZPreset_Other(_userId, _loginRequest.ChannelNo, (UInt32)command, (UInt32)presetIndex); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"操作预置点失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public async Task <OResult <Boolean> > BackupByTimeAsync(DateTime from, DateTime to, CancellationToken cancellationToken = default) { try { var lpDiskList = new CHCNetSDK.NET_DVR_DISKABILITY_LIST(); lpDiskList.dwSize = (UInt32)Marshal.SizeOf(lpDiskList); var succ = CHCNetSDK.NET_DVR_GetDiskList(_userId, ref lpDiskList); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"获取磁盘列表失败:{HkvsErrorCode.GetLastErrorMessage()}")); } if (!lpDiskList.struDescNode.Any()) { return(new OResult <Boolean>(false, "可用磁盘列表为空")); } var availableDesc = lpDiskList.struDescNode.Where(x => x.dwFreeSpace > 0).Select(x => x.byDescribe).FirstOrDefault(); if (availableDesc == null || !availableDesc.Any()) { return(new OResult <Boolean>(false, "磁盘空间不足")); } var lpBackupByTime = new CHCNetSDK.NET_DVR_BACKUP_TIME_PARAM(); lpBackupByTime.lChannel = _loginRequest.ChannelNo; lpBackupByTime.struStartTime.dwYear = (UInt32)from.Year; lpBackupByTime.struStartTime.dwMonth = (UInt32)from.Month; lpBackupByTime.struStartTime.dwDay = (UInt32)from.Day; lpBackupByTime.struStartTime.dwHour = (UInt32)from.Hour; lpBackupByTime.struStartTime.dwMinute = (UInt32)from.Minute; lpBackupByTime.struStartTime.dwSecond = (UInt32)from.Second; lpBackupByTime.struStopTime.dwYear = (UInt32)to.Year; lpBackupByTime.struStopTime.dwMonth = (UInt32)to.Month; lpBackupByTime.struStopTime.dwDay = (UInt32)to.Day; lpBackupByTime.struStopTime.dwHour = (UInt32)to.Hour; lpBackupByTime.struStopTime.dwMinute = (UInt32)to.Minute; lpBackupByTime.struStopTime.dwSecond = (UInt32)to.Second; lpBackupByTime.byDiskDes = availableDesc; //备份磁盘的描述 lpBackupByTime.byWithPlayer = 0; //是否备份播放器,0-不备份,1-备份 lpBackupByTime.byContinue = 0; //是否继续备份,0-不继续,1-继续 lpBackupByTime.byDrawFrame = 0; //0-不抽帧,1-抽帧 var backUpHandle = CHCNetSDK.NET_DVR_BackupByTime(_userId, ref lpBackupByTime); if (backUpHandle < 0) { return(new OResult <Boolean>(false, $"按时间备份录像失败:{HkvsErrorCode.GetLastErrorMessage()}")); } var tcs = new TaskCompletionSource <Boolean>(); _ = Task.Run(async() => { UInt32 iPos = 0; IntPtr pState = Marshal.AllocHGlobal((Int32)iPos); Marshal.StructureToPtr(iPos, pState, false); try { while (!cancellationToken.IsCancellationRequested) { var succ = CHCNetSDK.NET_DVR_GetBackupProgress(backUpHandle, pState); if (succ) { iPos = (UInt32)Marshal.PtrToStructure(pState, typeof(UInt32)); if (iPos == 100) { CHCNetSDK.NET_DVR_StopBackup(backUpHandle); tcs.SetResult(true); return; } else if (iPos == 101 || iPos >= 400) { CHCNetSDK.NET_DVR_StopBackup(backUpHandle); return; } } await Task.Delay(1000); } } finally { Marshal.FreeHGlobal(pState); } }, CancellationToken.None); succ = await tcs.Task; if (!succ) { return(new OResult <Boolean>(false, "按时间下载失败")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Close() { if (_userId < 0) { return(new OResult <Boolean>(false, "用户未登录")); } try { this.StopRecord(); var succ = CHCNetSDK.NET_DVR_StopRealPlay(_realHandle); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"停止预览失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _inRealPlay = false; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Resume() { if (_playerStatus != PlayerStatus.Pause) { return(new OResult <Boolean>(true)); } try { UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(_playbackHandle, CHCNetSDK.NET_DVR_PLAYNORMAL, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"暂停播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _playerStatus = PlayerStatus.Play; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <DateTime> GetPlayBackOsdTime() { try { if (_playbackHandle < 0) { return(new OResult <DateTime>(DateTime.MinValue, "未找到的视频")); } var lpOsdTime = new CHCNetSDK.NET_DVR_TIME(); var succ = CHCNetSDK.NET_DVR_GetPlayBackOsdTime(_playbackHandle, ref lpOsdTime); if (!succ) { return(new OResult <DateTime>(DateTime.MinValue, HkvsErrorCode.GetLastErrorCode(), $"获取OSD时间失败:{HkvsErrorCode.GetLastErrorMessage()}")); } var dt = new DateTime((Int32)lpOsdTime.dwYear, (Int32)lpOsdTime.dwMonth, (Int32)lpOsdTime.dwDay, (Int32)lpOsdTime.dwHour, (Int32)lpOsdTime.dwMinute, (Int32)lpOsdTime.dwSecond); return(new OResult <DateTime>(dt)); } catch (Exception ex) { return(new OResult <DateTime>(DateTime.MinValue, ex)); } }
public OResult <Boolean> Control(Int32 cmd) { try { UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(_playbackHandle, (UInt32)cmd, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"操作失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Fast() { if (_playerStatus == PlayerStatus.Stop) { return(new OResult <Boolean>(false, "播放已停止")); } try { UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(_playbackHandle, CHCNetSDK.NET_DVR_PLAYFAST, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"快进失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> CapturePicture(String savePath) { if (_userId < 0) { return(new OResult <Boolean>(false, "用户未登录")); } try { var captureSucc = CHCNetSDK.NET_DVR_PlayBackCaptureFile(_playbackHandle, savePath); if (!captureSucc) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"抓图失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Stop() { if (_playbackHandle < 0) { return(new OResult <Boolean>(true)); } if (_playerStatus == PlayerStatus.Stop) { return(new OResult <Boolean>(true)); } try { var succ = CHCNetSDK.NET_DVR_StopPlayBack(_playbackHandle); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"停止播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _playerStatus = PlayerStatus.Stop; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> StopRecord() { try { var succ = CHCNetSDK.NET_DVR_StopDVRRecord(_userId, _loginRequest.ChannelNo); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"停止录像失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public async Task <OResult <Boolean> > DownloadByTimeAsync(DownloadFileByTimeRequest request, CancellationToken cancellationToken = default) { try { var now = DateTime.Now; if (request.From > now) { request.From = now; } if (request.To > now) { request.To = now; } if (request.From > request.To) { request.To = DateTime.Now; } CHCNetSDK.NET_DVR_PLAYCOND struDownPara = new CHCNetSDK.NET_DVR_PLAYCOND(); struDownPara.dwChannel = (UInt32)_loginRequest.ChannelNo; //设置下载的开始时间 struDownPara.struStartTime.dwYear = (UInt32)request.From.Year; struDownPara.struStartTime.dwMonth = (UInt32)request.From.Month; struDownPara.struStartTime.dwDay = (UInt32)request.From.Day; struDownPara.struStartTime.dwHour = (UInt32)request.From.Hour; struDownPara.struStartTime.dwMinute = (UInt32)request.From.Minute; struDownPara.struStartTime.dwSecond = (UInt32)request.From.Second; //设置下载的结束时间 struDownPara.struStopTime.dwYear = (UInt32)request.To.Year; struDownPara.struStopTime.dwMonth = (UInt32)request.To.Month; struDownPara.struStopTime.dwDay = (UInt32)request.To.Day; struDownPara.struStopTime.dwHour = (UInt32)request.To.Hour; struDownPara.struStopTime.dwMinute = (UInt32)request.To.Minute; struDownPara.struStopTime.dwSecond = (UInt32)request.To.Second; var m_lDownHandle = CHCNetSDK.NET_DVR_GetFileByTime_V40(_userId, request.FilePath, ref struDownPara); if (m_lDownHandle < 0) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"按时间下载失败:{HkvsErrorCode.GetLastErrorMessage()}")); } UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(m_lDownHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"按时间下载失败:{HkvsErrorCode.GetLastErrorMessage()}")); } var tcs = new TaskCompletionSource <Boolean>(); _ = Task.Run(async() => { var iPos = 0; while (!cancellationToken.IsCancellationRequested) { iPos = CHCNetSDK.NET_DVR_GetDownloadPos(m_lDownHandle); switch (iPos) { case 100: CHCNetSDK.NET_DVR_StopGetFile(m_lDownHandle); tcs.SetResult(true); return; case 200: tcs.SetException(new SystemException("网络中断")); CHCNetSDK.NET_DVR_StopGetFile(m_lDownHandle); return; } await Task.Delay(1000); } }, CancellationToken.None); succ = await tcs.Task; if (!succ) { return(new OResult <Boolean>(false, "按时间下载失败")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Open() { if (_userId < 0) { return(new OResult <Boolean>(false, "用户未登录")); } if (_inRealPlay) { return(new OResult <Boolean>(true)); } try { var lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.hPlayWnd = _hPlayWnd; //预览窗口 lpPreviewInfo.lChannel = _channelNo; //预览的设备通道 lpPreviewInfo.dwStreamType = (UInt32)_streamType; //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 lpPreviewInfo.dwLinkMode = 0; //连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0-非阻塞取流,1-阻塞取流 lpPreviewInfo.dwDisplayBufNum = 15; //播放库播放缓冲区最大缓冲帧数 lpPreviewInfo.byProtoType = 0; lpPreviewInfo.byPreviewMode = 0; _realHandle = CHCNetSDK.NET_DVR_RealPlay_V40(_userId, ref lpPreviewInfo, null, IntPtr.Zero); if (_realHandle < 0) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"开始预览失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _inRealPlay = true; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> UpdateRecordIndex() { try { var succ = CHCNetSDK.NET_DVR_UpdateRecordIndex(_userId, _loginRequest.ChannelNo); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"即时刷新录像索引失败:{HkvsErrorCode.GetLastErrorMessage()}")); } return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <String> StartRecord(String fileName) { if (_userId < 0) { return(new OResult <String>(null, "用户未登录")); } if (_inRecord) { return(new OResult <String>(null, "正在录制")); } try { CHCNetSDK.NET_DVR_MakeKeyFrame(_userId, _channelNo); var succ = CHCNetSDK.NET_DVR_SaveRealData(_realHandle, fileName); if (!succ) { return(new OResult <String>(null, HkvsErrorCode.GetLastErrorCode(), $"录制失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _inRecord = true; return(new OResult <String>(fileName));//TODO:返回文件路径 } catch (Exception ex) { return(new OResult <String>(null, ex)); } }
private OResult <IEnumerable <CameraPlaybackRecordTimeRange> > GetDayRecordTimeRanges(Int32 channelNo, DateTime date) { try { CHCNetSDK.NET_DVR_FILECOND_V40 struFileCond_V40 = new CHCNetSDK.NET_DVR_FILECOND_V40(); struFileCond_V40.lChannel = channelNo; //通道号 struFileCond_V40.dwFileType = 0xff; //0xff-全部,0-定时录像,1-移动侦测,2-报警触发,... struFileCond_V40.dwIsLocked = 0xff; //0-未锁定文件,1-锁定文件,0xff表示所有文件(包括锁定和未锁定) //设置录像查找的开始时间 struFileCond_V40.struStartTime.dwYear = (UInt32)date.Year; struFileCond_V40.struStartTime.dwMonth = (UInt32)date.Month; struFileCond_V40.struStartTime.dwDay = (UInt32)date.Day; struFileCond_V40.struStartTime.dwHour = 0; struFileCond_V40.struStartTime.dwMinute = 0; struFileCond_V40.struStartTime.dwSecond = 0; //设置录像查找的结束时间 struFileCond_V40.struStopTime.dwYear = (UInt32)date.Year; struFileCond_V40.struStopTime.dwMonth = (UInt32)date.Month; struFileCond_V40.struStopTime.dwDay = (UInt32)date.Day; struFileCond_V40.struStopTime.dwHour = 23; struFileCond_V40.struStopTime.dwMinute = 59; struFileCond_V40.struStopTime.dwSecond = 59; //开始录像文件查找 Start to search video files var m_lFindHandle = CHCNetSDK.NET_DVR_FindFile_V40(_userId, ref struFileCond_V40); if (m_lFindHandle < 0) { return(new OResult <IEnumerable <CameraPlaybackRecordTimeRange> >(null, HkvsErrorCode.GetLastErrorCode(), $"查找录像文件失败:{HkvsErrorCode.GetLastErrorMessage()}")); } else { CHCNetSDK.NET_DVR_FINDDATA_V30 struFileData = new CHCNetSDK.NET_DVR_FINDDATA_V30(); var ranges = new List <CameraPlaybackRecordTimeRange>(); while (true) { //逐个获取查找到的文件信息 var result = CHCNetSDK.NET_DVR_FindNextFile_V30(m_lFindHandle, ref struFileData); if (result == CHCNetSDK.NET_DVR_ISFINDING) //正在查找请等待 { continue; } else if (result == CHCNetSDK.NET_DVR_FILE_SUCCESS) //获取文件信息成功 { var startTime = new DateTime((Int32)struFileData.struStartTime.dwYear, (Int32)struFileData.struStartTime.dwMonth, (Int32)struFileData.struStartTime.dwDay, (Int32)struFileData.struStartTime.dwHour, (Int32)struFileData.struStartTime.dwMinute, (Int32)struFileData.struStartTime.dwSecond); var endTime = new DateTime((Int32)struFileData.struStopTime.dwYear, (Int32)struFileData.struStopTime.dwMonth, (Int32)struFileData.struStopTime.dwDay, (Int32)struFileData.struStopTime.dwHour, (Int32)struFileData.struStopTime.dwMinute, (Int32)struFileData.struStopTime.dwSecond); ranges.Add(new CameraPlaybackRecordTimeRange() { StartTime = startTime, EndTime = endTime }); } else if (result == CHCNetSDK.NET_DVR_FILE_NOFIND || result == CHCNetSDK.NET_DVR_NOMOREFILE) { break; //未查找到文件或者查找结束,退出 } else { break; } } MergetRanges(ref ranges); return(new OResult <IEnumerable <CameraPlaybackRecordTimeRange> >(ranges.Any() ? ranges : null)); } } catch (Exception ex) { return(new OResult <IEnumerable <CameraPlaybackRecordTimeRange> >(null, ex)); } }
public OResult <Boolean> StopRecord() { if (_userId < 0) { return(new OResult <Boolean>(false, "用户未登录")); } if (!_inRecord) { return(new OResult <Boolean>(true)); } try { var succ = CHCNetSDK.NET_DVR_StopSaveRealData(_realHandle); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"停止录像失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _inRecord = false; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Logout() { if (_userId < 0) { return(new OResult <Boolean>(true)); } try { StopPreviewService(); StopPlaybackService(); var succ = CHCNetSDK.NET_DVR_Logout(_userId); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"注销失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _userId = -1; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }
public OResult <Boolean> Play(DateTime startTime, DateTime endTime) { var stopResult = Stop(); if (!stopResult.Success) { return(new OResult <Boolean>(false, stopResult.ErrorCode, stopResult.Message)); } try { var playParameter = CreateVideoPlayParameter(startTime, endTime); _playbackHandle = CHCNetSDK.NET_DVR_PlayBackByTime_V40(_userId, ref playParameter); if (_playbackHandle < 0) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"回放播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } UInt32 iOutValue = 0; var succ = CHCNetSDK.NET_DVR_PlayBackControl_V40(_playbackHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue); if (!succ) { return(new OResult <Boolean>(false, HkvsErrorCode.GetLastErrorCode(), $"回放播放失败:{HkvsErrorCode.GetLastErrorMessage()}")); } _playerStatus = PlayerStatus.Play; return(new OResult <Boolean>(true)); } catch (Exception ex) { return(new OResult <Boolean>(false, ex)); } }