[Delphi]海康威视视频监控录像机布防报警的示例代码

HCNetSDK.pas由于太大,无法在这里粘贴,请到​​​​​​下列地址下载盒子论坛 v2.1http://bbs.2ccc.com/topic.asp?topicid=606222

unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, Vcl.ComCtrls, uDVR;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    DVR: TDVR;
    procedure WmAfterShow(var Msg: TMessage); message WM_User;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  OnShow := nil;
  PostMessage(Handle, WM_USER, 0 , 0);
end;

procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
  DVR := TDVR.Create('192.168.1.100', 8000, 'admin', 'yourpassword');
  if DVR.Connect = True then
  begin
    DVR.LogMessage(RichEdit1.Lines);
  end
  else
  begin
    ShowMessage('无法连接视频监控主机');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Dvr.Free;
end;

end.
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 475
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  OnDestroy = FormDestroy
  OnShow = FormShow
  DesignSize = (
    635
    475)
  PixelsPerInch = 96
  TextHeight = 13
  object RichEdit1: TRichEdit
    Left = 8
    Top = 8
    Width = 619
    Height = 459
    Anchors = [akLeft, akTop, akRight, akBottom]
    Font.Charset = GB2312_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    ParentFont = False
    ScrollBars = ssBoth
    TabOrder = 0
    Zoom = 100
  end
end
unit uDVR;

interface

uses System.Classes;

type
  TDVR = class(TObject)
  private
    UserID, Port, AlarmHandle: Integer;
    DvrIP, UserName, Password: String;
  public
    function Connect: Boolean;
    procedure DisConnect;
    procedure LogMessage(aStrings: TStrings);
    constructor Create(aDvrIP: String; aPort: Integer; aUserName, aPassword: String);
    destructor Destroy; override;
  end;


implementation

uses HCNetSDK, Winapi.Windows, System.SysUtils;

var
  Strings: TStrings;

constructor TDVR.Create(aDvrIP: String; aPort: Integer; aUserName, aPassword: String);
begin
  inherited Create;
  DvrIP    := aDvrIP;
  Port     := aPort;
  UserName := aUserName;
  Password := aPassword;
  UserID := -1;
  AlarmHandle := -1;
  NET_DVR_Init;
end;

function TDVR.Connect: Boolean;
var
  DeviceInfo: NET_DVR_DEVICEINFO_V30;
  pDvrIP, pUserName, pPassword: PAnsiChar;
begin
  DisConnect;
  pDvrIP    := PAnsiChar(AnsiString(DvrIP   ));
  pUserName := PAnsiChar(AnsiString(UserName));
  pPassword := PAnsiChar(AnsiString(Password));
  UserID := NET_DVR_Login_V30(pDvrIP, Port, pUserName, pPassword, @DeviceInfo);
  Result := (UserID >= 0);
end;

procedure MyMSGCallBack(lCommand: LONG; pAlarmer: LPNET_DVR_ALARMER; pAlarmInfo: PAnsiChar; dwBufLen: DWORD; pUser: PVOID); StdCall;
var
  I: Integer;
  Info, S: String;
  pAI: LPNET_DVR_ALARMINFO_V30;
begin
  case lCommand of
    COMM_ALARM          :
      begin
        Info := 'V3.0 以下版本支持的设备的报警信息上传';
      end;
    COMM_ALARM_V30      :
      begin
        Info := 'V3.0 以上版本支持的设备的报警信息上传';
        pAI := LPNET_DVR_ALARMINFO_V30(pAlarmInfo);
        case pAI.dwAlarmType of
           0: Info := '信号量报警';
           1: Info := '硬盘满';
           2: Info := '信号丢失';
           3: Info := '移动侦测';
           4: Info := '硬盘未格式化';
           5: Info := '读写硬盘出错';
           6: Info := '遮挡报警';
           7: Info := '制式不匹配';
           8: Info := '非法访问';
           9: Info := '视频信号异常';
          10: Info := '录像异常';
          11: Info := '智能场景变化';
          12: Info := '阵列异常';
          13: Info := '前端/录像分辨率不匹配';
          14: Info := '申请解码资源失败';
          15: Info := '智能侦测';
          16: Info := 'POE供电异常报警';
          17: Info := '闪光灯异常';
          18: Info := '磁盘满负荷异常报警';
          19: Info := '音频丢失';
          20: Info := '开启录像';
          21: Info := '关闭录像';
          22: Info := '车辆检测算法异常';
          23: Info := '脉冲报警';
          24: Info := '人脸库硬盘异常';
          25: Info := '人脸库变更';
          26: Info := '人脸库图片变更';
          27: Info := 'POC异常';
          28: Info := '相机视角异常';
          29: Info := '电量低';
          30: Info := '缺少SD卡';
        end;
        if Copy(Info, Length(Info)-1, 2) <> '报警' then
           Info := Info + '报警';

        S := '';
        case pAI.dwAlarmType of
          2, 3, 6, 9, 10, 14, 19, 28:
          begin
            for I := 0 to MAX_CHANNUM_V30 - 1 do
            begin
              if pAI.byChannel[I] = 1 then
              begin
                if S <> '' then
                  S := S + '、';
                S := S + IntToStr(I+1);
              end;
            end;
            S := ': 发生移动侦测报警的通道号' + S;
          end;
        end;
        Info := Info + S;
      end;
    COMM_IPCCFG         : Info := '混合型DVR 在IPC 接入配置改变时的报警信息上传';
    COMM_IPCCFG_V31     : Info := '混合型DVR 在IPC 接入配置改变时的报警信息上传(扩展)';
    COMM_ALARM_HOT_SPARE: Info := '热备异常报警(N+1 模式异常报警)';
    COMM_ALARM_V40      : Info := '移动侦测、视频丢失、遮挡、IO 信号量等报警信息主动上传,报警数据为可变长';
    COMM_ALARM_VQD      : Info := 'VQD 诊断报警信息上传';
    COMM_VEHICLE_CONTROL_ALARM: Info := '黑白名单车辆报警上传';
    else Info := '未定义';
  end;
  Strings.Add(Info);
end;

procedure TDVR.LogMessage(aStrings: TStrings);
var
  AlarmParam: NET_DVR_SETUPALARM_PARAM;
begin
  if UserID < 0 then Exit;

  Strings := aStrings;
  Strings.Clear;
  NET_DVR_SetDVRMessageCallBack_V30(MyMSGCallBack, nil);
  ZeroMemory(@AlarmParam, SizeOf(AlarmParam));
  AlarmParam.dwSize := SizeOf(AlarmParam);
  AlarmParam.byAlarmInfoType := 0;
  AlarmHandle := NET_DVR_SetupAlarmChan_V41(UserID, @AlarmParam);
end;

procedure TDVR.DisConnect;
begin
  if UserID >= 0 then
  begin
    if AlarmHandle >= 0 then
    begin
      NET_DVR_CloseAlarmChan_V30(AlarmHandle);
      AlarmHandle := -1;
    end;
    NET_DVR_Logout_V30(UserID);
    UserID := -1;
  end;
end;

destructor TDVR.Destroy;
begin
  DisConnect;
  NET_DVR_Cleanup;
  inherited;
end;

end.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值