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.