主頁 > 後端開發 > delphi中如何使用海康威視的SDK

delphi中如何使用海康威視的SDK

2020-09-23 17:05:41 後端開發

例子使用c++寫的,想用delphi來開發,怎么做啊

uj5u.com熱心網友回復:

有dll的,對著宣告,然后引數型別匹配好,不會的話,google“delphi dll”

uj5u.com熱心網友回復:

貼下c++呼叫dll的代碼。

uj5u.com熱心網友回復:

建議先看看delphi怎么呼叫dll方法資料。

uj5u.com熱心網友回復:

現在是可以呼叫了,就是回呼函式老是搞不定,回傳的資料總是只有一個位元組,不知道為什么

uj5u.com熱心網友回復:

海康威視的SDK請問是硬碟錄像機的還是網路球的?最好能提供是哪個版本的SDK。按照我理解你目前應該在用設備網路SDK,那塊涉及到的CALLBACK函式比較多(多出現在音視頻流轉發)。拿設備網路SDK_V4.1.5.3(for Windows32)做例子。
NET_DVR_RealPlay_V30 網路設備 實時預覽 函式。函式模型
LONG NET_DVR_RealPlay_V30(
  LONG                     lUserID,
  LPNET_DVR_CLIENTINFO     lpClientInfo,
  fRealDataCallBack_V30    cbRealDataCallBack,
  void                     *pUser,
  BOOL                     bBlocked
);
其中lUserID 為NET_DVR_LOGIN的回傳句柄,其實就是一個內部結構體指標(其中包括登錄資訊,設備資訊,常規硬體狀態)。
lpClientInfo,預覽引數結構體,指定預覽哪路視頻,視頻解碼方式以及在哪個句柄上顯示諸如此類與顯示有關引數配置。
cbRealDataCallBack 碼流資料回呼函式,這塊可能是你關心的重點。
fRealDataCallBack_V30型別,在HCNetSDK.h網路庫頭檔案中有定義。
typedef void(CALLBACK *fRealDataCallBack_V30)(
  LONG      lRealHandle,
  DWORD     dwDataType,
  BYTE      *pBuffer,
  DWORD     dwBufSize,
  void      *pUser
);
一般這個函式被呼叫后,基本上我們都是通過判斷處理
procedure RealCallBack  LONG      lRealHandle,
  DWORD     dwDataType,
  BYTE      *pBuffer,
  DWORD     dwBufSize,
  void      *pUser
)
begin
  if lRealHandle > -1 then
  case dwDataType of 
  begin
    NET_DVR_SYSHEAD:{系統頭資料}
    begin
      dwBufSize
    end;
    NET_DVR_STREAMDATA:{資料(包括復合流或音視頻分開的視頻流資料)}....
    begin
      if dwBufSize > 0 then{有資料}
      begin
//讀取pBuffer 緩沖區,如果你讀取一直都是很少的位元組最好先檢查下NET_DVR_RealPlay_V30的回傳值,通過NET_DVR_GetLastError獲取錯誤碼,錯誤碼同樣在HCNetSDK.h定義
      end;
    end;
    NET_DVR_AUDIOSTREAMDATA:{音頻資料}....
  end;

end;
希望以上辛辛苦苦寫的對你有所幫助。

uj5u.com熱心網友回復:

直接到海康官網下個SDK指南,里面有delphi demo。

uj5u.com熱心網友回復:

硬碟錄像機,主要是回呼函式搞不定

uj5u.com熱心網友回復:

想用硬碟錄像機的485口連上溫度傳感器之類的設備,但是回呼函式搞不定

uj5u.com熱心網友回復:

沒看到官網里有delphi的demo啊,還望發個鏈接看看

uj5u.com熱心網友回復:

你說的是NET_DVR_SetDVRMessageCallBack_V30獲取設備狀態?

uj5u.com熱心網友回復:

我都是自己翻譯的

uj5u.com熱心網友回復:

unit U_HKHCUnit;

interface
uses
  Windows, SysUtils;

const
  NAME_LEN        = 32;
  SERIALNO_LEN    = 48;
  MACADDR_LEN     = 6;
  MAX_ETHERNET    = 2;
  PATHNAME_LEN    = 128;
  PASSWD_LEN      = 16;
  MAX_SHELTERNUM  = 4; //遮擋區域數
  MAX_DAYS        = 7;
  MAX_TIMESEGMENT = 4;
  MAX_ALARMOUT    = 4;
  MAX_CHANNUM     = 16;
  MAX_PRESET = 128;

  NET_DVR_GET_DEVICECFG      = 100; //獲取設備引數
  NET_DVR_SET_DEVICECFG      = 101; //設定設備引數
  NET_DVR_GET_NETCFG         = 102; //獲取網路引數
  NET_DVR_SET_NETCFG         = 103; //設定網路引數
  NET_DVR_GET_PICCFG         = 104; //獲取圖象引數
  NET_DVR_SET_PICCFG         = 105; //設定圖象引數
  NET_DVR_GET_COMPRESSCFG    = 106; //獲取壓縮引數
  NET_DVR_SET_COMPRESSCFG    = 107; //設定壓縮引數
  NET_DVR_GET_RECORDCFG      = 108; //獲取錄像時間引數
  NET_DVR_SET_RECORDCFG      = 109; //設定錄像時間引數
  NET_DVR_GET_DECODERCFG     = 110; //獲取解碼器引數
  NET_DVR_SET_DECODERCFG     = 111; //設定解碼器引數
  NET_DVR_GET_RS232CFG       = 112; //獲取232 串口引數
  NET_DVR_SET_RS232CFG       = 113; //設定232 串口引數
  NET_DVR_GET_ALARMINCFG     = 114; //獲取報警輸入引數
  NET_DVR_SET_ALARMINCFG     = 115; //設定報警輸入引數
  NET_DVR_GET_ALARMOUTCFG    = 116; //獲取報警輸出引數
  NET_DVR_SET_ALARMOUTCFG    = 117; //設定報警輸出引數
  NET_DVR_GET_TIMECFG        = 118; //獲取DVR 時間
  NET_DVR_SET_TIMECFG        = 119; //設定DVR 時間
  NET_DVR_GET_PREVIEWCFG     = 120; //獲取預覽引數
  NET_DVR_SET_PREVIEWCFG     = 121; //設定預覽引數
  NET_DVR_GET_VIDEOOUTCFG    = 122; //獲取視頻輸出引數
  NET_DVR_SET_VIDEOOUTCFG    = 123; //設定視頻輸出引數
  NET_DVR_GET_USERCFG        = 124; //獲取用戶引數
  NET_DVR_SET_USERCFG        = 125; //設定用戶引數
  NET_DVR_GET_EXCEPTIONCFG   = 126; //獲取例外引數
  NET_DVR_SET_EXCEPTIONCFG   = 127; //設定例外引數
  NET_DVR_GET_SHOWSTRING     = 130; //獲取疊加字符引數
  NET_DVR_SET_SHOWSTRING     = 131; //設定疊加字符引數
  NET_DVR_GET_AUXOUTCFG      = 140; //獲取報警觸發輔助輸出設定
  NET_DVR_SET_AUXOUTCFG      = 141; //設定報警觸發輔助輸出設定
  NET_DVR_GET_PICCFG_EX      = 200; //獲取圖象引數(擴展)
  NET_DVR_SET_PICCFG_EX      = 201; //設定圖象引數(擴展)
  NET_DVR_GET_USERCFG_EX     = 202; //獲取用戶引數
  NET_DVR_SET_USERCFG_EX     = 203; //設定用戶引數
  NET_DVR_GET_COMPRESSCFG_EX = 204; //獲取壓縮引數(擴展)
  NET_DVR_SET_COMPRESSCFG_EX = 205; //設定壓縮引數(擴展)

  //******報警處理方式
  NOACTION     = $0; //無回應*/
  WARNONMONITOR   = $1; //監視器上警告*/
  WARNONAUDIOOUT = $2; //聲音警告*/
  UPTOCENTER   = $4; //上傳中心*/
  TRIGGERALARMOUT = $8; //觸發報警輸出*/

  //查找檔案
  NET_DVR_FILE_SUCCESS = 1000; //獲得檔案資訊
  NET_DVR_FILE_NOFIND = 1001; //沒有檔案
  NET_DVR_ISFINDING = 1002; //正在查找檔案
  NET_DVR_NOMOREFILE = 1003; //查找檔案時沒有更多的檔案
  NET_DVR_FILE_EXCEPTION = 1004; //查找檔案時例外

  MAX_LINK = 6;
  MAX_DISKNUM = 16;
  MAX_ALARMIN = 16;
type

  {配置資訊}
  PNET_DVR_DEVICECFG = ^LPNET_DVR_DEVICECFG;
  {$EXTERNALSYM NET_DVR_DEVICECFG}
  NET_DVR_DEVICECFG = Record
    dwSize: DWORD;
    sDVRName: Array[0..NAME_LEN-1] of BYTE; //DVR 名稱
    dwDVRID: DWORD; //DVR ID,用于遙控器
    dwRecycleRecord: DWORD; // 是否回圈錄像,0:不是; 1:是
    //以下不能更改
    sSerialNumber: Array[0..SERIALNO_LEN-1] of BYTE;// 序列號 */
    dwSoftwareVersion: DWORD; // 軟體版本號,高16 位是主版本,低16 位是次版本 */
    dwSoftwareBuildDate: DWORD; // 軟體生成日期,0xYYYYMMDD */
    dwDSPSoftwareVersion: DWORD; // DSP 軟體版本,高16 位是主版本,低16 位是次版本*/
    dwDSPSoftwareBuildDate: DWORD; // DSP 軟體生成日期,0xYYYYMMDD */
    dwPanelVersion: DWORD; // 前面板版本,高16 位是主版本,低16 位是次版本 */
    dwHardwareVersion: DWORD; // 硬體版本,高16 位是主版本,低16 位是次版本 */
    byAlarmInPortNum: BYTE; // DVR 報警輸入個數 */
    byAlarmOutPortNum: BYTE; // DVR 報警輸出個數 */
    byRS232Num: BYTE ; // DVR 232 串口個數 */
    byRS485Num: BYTE ; // DVR 485 串口個數 */
    byNetworkPortNum: BYTE ; // 網路口個數 */
    byDiskCtrlNum: BYTE ; // DVR 硬碟控制器個數 */
    byDiskNum: BYTE ; // DVR 硬碟個數 */
    byDVRType: BYTE ; // DVR 型別, 1:DVR 2:ATM DVR 3:DVS 等等 */
    byChanNum: BYTE ; // DVR 通道個數 */
    byStartChan: BYTE ; // 起始通道號,例如DVS-1,DVR – 1 */
    byDecordChans: BYTE ; // DVR 解碼路數 */
    byVGANum: BYTE ; // VGA 口的個數 */
    byUSBNum: BYTE; // USB 口的個數 */
    reservedData: Array[0..2] of char ; // 保留 */
  end;
  LPNET_DVR_DEVICECFG = NET_DVR_DEVICECFG;

  {設備資訊}
  PNET_DVR_DEVICEINFO = ^TNET_DVR_DEVICEINFO;
  {$EXTERNALSYM NET_DVR_DEVICEINFO}
  NET_DVR_DEVICEINFO = Record
    sSerialNumber: Array[0..SERIALNO_LEN - 1] of BYTE ;  //序列號
    byAlarmInPortNum: BYTE ; //DVR報警輸入個數
    byAlarmOutPortNum: BYTE ; //DVR報警輸出個數
    byDiskNum: BYTE; //DVR 硬碟個數
    byDVRType: BYTE; //DVR型別,
    byChanNum: BYTE; //DVR 通道個數
    byStartChan: BYTE; //起始通道號,例如DVS-1,DVR - 1
  end;
  TNET_DVR_DEVICEINFO = NET_DVR_DEVICEINFO;

  {網路資訊}
  NET_DVR_ETHERNET = Record
    sDVRIP: Array[0..15] of Char; // DVR IP 地址 */
    sDVRIPMask: Array[0..15] of Char; // DVR IP 地址掩碼 */
    dwNetInterface: DWORD; // 10M/100M 自適應,索引 */
    //1-10MBase - T
    //2-10MBase-T 全雙工
    //3-100MBase - TX
    //4-100M 全雙工
    //5-10M/100M 自適應
    wDVRPort: WORD; // 埠號 */
    byMACAddr: Array[0..MACADDR_LEN - 1] of BYTE; // 服務器的物理地址 */
  end;
  
  PNET_DVR_NETCFG = ^LPNET_DVR_NETCFG;
  {$EXTERNALSYM NET_DVR_NETCFG}
  NET_DVR_NETCFG = Record
    dwSize: DWORD;
    struEtherNet: Array[0..MAX_ETHERNET - 1] of NET_DVR_ETHERNET ; // 以太網口 */
    sManageHostIP: Array[0..15] of char ; // 遠程管理主機地址 */
    wManageHostPort: WORD; // 遠程管理主機埠號 */
    sDNSIP: Array[0..15] of char ; // DNS 服務器地址 */
    sMultiCastIP: Array[0..15] of char; // 多播組地址 */
    sGatewayIP: Array[0..15] of char; // 網關地址 */
    sNFSIP: Array[0..15] of char; // NAS 主機IP 地址 */
    sNFSDirectory: Array[0..PATHNAME_LEN - 1] of BYTE; // NAS 目錄 */
    dwPPPOE: DWORD; // 0-不啟用,1-啟用 */
    sPPPoEUser: Array[0..NAME_LEN - 1] of BYTE ; // PPPoE 用戶名 */
    sPPPoEPassword: Array[0..PASSWD_LEN - 1] of char;// PPPoE 密碼 */
    sPPPoEIP: Array[0..15] of char; //PPPoE IP 地址(只讀)
    wHttpPort: WORD; //http 埠號
  end;
  LPNET_DVR_NETCFG = NET_DVR_NETCFG;

  {影像引數}
  NET_DVR_SCHEDTIME = Record
    byStartHour: BYTE; //開始時間
    byStartMin: BYTE;
    byStopHour: BYTE;  //結束時間
    byStopMin: BYTE;
  end;
//NET_DVR_SCHEDTIME,*LPNET_DVR_SCHEDTIME;

  NET_DVR_HANDLEEXCEPTION = Record
    dwHandleType: DWORD; //處理方式,處理方式的"或"結果*/
                  { $00: 無回應
                    $01: 監視器上警告
                    $02: 聲音警告
                    $04: 上傳中心
                    $08: 觸發報警輸出}
    byRelAlarmOut: Array[0..MAX_ALARMOUT - 1] of BYTE ;  //報警觸發的輸出通道,報警觸發的輸出,為1表示觸發該輸出
  end;

//信號丟失報警
  NET_DVR_VILOST = Record
    byEnableHandleVILost: BYTE ; // 是否處理信號丟失報警 */
    strVILostHandleType: NET_DVR_HANDLEEXCEPTION; // 處理方式 */
    struAlarmTime: Array[0..MAX_DAYS - 1] of Array[0..MAX_TIMESEGMENT - 1] of NET_DVR_SCHEDTIME ;//布防時間
  end;
  //NET_DVR_VILOST,*LPNET_DVR_VILOST;

//移動偵測
  NET_DVR_MOTION = Record
    byMotionScope: Array[0..17] of Array[0..21] of BYTE; //偵測區域,共有22*18個小宏塊,為1表示該宏塊是移動偵測區域,0-表示不是*/
    byMotionSensitive: BYTE; //移動偵測靈敏度, 0 - 5,越高越靈敏,0xff關閉*/
    byEnableHandleMotion: BYTE; // 是否處理移動偵測 */
    strMotionHandleType: NET_DVR_HANDLEEXCEPTION; // 處理方式 */
    struAlarmTime: Array[0..MAX_DAYS - 1] of Array[0..MAX_TIMESEGMENT - 1] of NET_DVR_SCHEDTIME;//布防時間
    byRelRecordChan: Array[0..MAX_CHANNUM - 1] of BYTE ; //報警觸發的錄象通道,為1表示觸發該通道
  end;
  //NET_DVR_MOTION,*LPNET_DVR_MOTION;


//遮擋報警區域為704*576
  NET_DVR_HIDEALARM = Record
    dwEnableHideAlarm: DWORD; // 是否啟動遮擋報警 ,0-否,1-低靈敏度 2-中靈敏度 3-高靈敏度 */
    wHideAlarmAreaTopLeftX: WORD; // 遮擋區域的x坐標 */
    wHideAlarmAreaTopLeftY: WORD; // 遮擋區域的y坐標 */
    wHideAlarmAreaWidth: WORD; // 遮擋區域的寬 */
    wHideAlarmAreaHeight: WORD; //遮擋區域的高*/
    strHideAlarmHandleType: NET_DVR_HANDLEEXCEPTION; // 處理方式 */
    struAlarmTime: Array[0..MAX_DAYS - 1] of Array[0..MAX_TIMESEGMENT - 1] of NET_DVR_SCHEDTIME;//布防時間
  end;
  //NET_DVR_HIDEALARM,*LPNET_DVR_HIDEALARM;

  NET_DVR_SHELTER = Record
    wHideAreaTopLeftX: WORD; // 遮擋區域的x坐標 */
    wHideAreaTopLeftY: WORD; // 遮擋區域的y坐標 */
    wHideAreaWidth: WORD; // 遮擋區域的寬 */
    wHideAreaHeight: WORD; //遮擋區域的高*/
  end;
  //NET_DVR_SHELTER,*LPNET_DVR_SHELTER;


  PNET_DVR_PICCFG_EX = ^LPNET_DVR_PICCFG_EX;
  {$EXTERNALSYM NET_DVR_PICCFG_EX}
  NET_DVR_PICCFG_EX = Record
    dwSize: DWORD;
    sChanName: Array[0..NAME_LEN - 1] of BYTE;//通道名稱
    dwVideoFormat: DWORD; // 只讀 視頻制式 1-NTSC 2-PAL
    byBrightness: BYTE;   //亮度,0-255*/
    byContrast: BYTE;     //對比度,0-255*/
    bySaturation: BYTE;   //飽和度,0-255 */
    byHue: BYTE;     //色調,0-255*/
    //顯示通道名
    dwShowChanName: DWORD; // 預覽的圖象上是否顯示通道名稱,0-不顯示,1-顯示 區域大小704*576
    wShowNameTopLeftX: WORD; // 通道名稱顯示位置的x坐標 */
    wShowNameTopLeftY: WORD; // 通道名稱顯示位置的y坐標 */
    //信號丟失報警
    struVILost: NET_DVR_VILOST;
    //移動偵測
    struMotion: NET_DVR_MOTION;
    //遮擋報警
    struHideAlarm: NET_DVR_HIDEALARM;
    //遮擋  區域大小704*576

    dwEnableHide: DWORD; // 是否啟動遮蓋 ,0-否,1-是*/
    struShelter: Array[0..MAX_SHELTERNUM - 1] of NET_DVR_SHELTER;
    //OSD
    dwShowOsd: DWORD;// 預覽的圖象上是否顯示OSD,0-不顯示,1-顯示 區域大小704*576
    wOSDTopLeftX: WORD; // OSD的x坐標 */
    wOSDTopLeftY: WORD; // OSD的y坐標 */
    byOSDType: BYTE; // OSD型別(主要是年月日格式) */
    {0: XXXX-XX-XX 年月日
    1: XX-XX-XXXX 月日年
    2: XXXX年XX月XX日
    3: XX月XX日XXXX年}
    byDispWeek: BYTE; // 是否顯示星期 */
    byOSDAttrib: BYTE; // OSD屬性:透明,閃爍 */
    {1: 透明,閃爍
    2: 透明,不閃爍
    3: 閃爍,不透明
    4: 不透明,不閃爍 }
  end;
  LPNET_DVR_PICCFG_EX = NET_DVR_PICCFG_EX;

uj5u.com熱心網友回復:


  {壓縮引數}
  NET_DVR_COMPRESSION_INFO_EX = Record
    byStreamType: BYTE; //碼流型別0-視頻流,1-復合流
    byResolution: BYTE;   //解析度0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF
    byBitrateType: BYTE; //碼率型別0:變碼率,1:定碼率
    byPicQuality: BYTE; //圖象質量 0-最好 1-次好 2-較好 3-一般 4-較差 5-差
    dwVideoBitrate: DWORD;  //視頻碼率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K
    // 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K
    //最高位(31位)置成1表示是自定義碼流, 0-30位表示碼流值(MIN-32K MAX-8192K)。
    dwVideoFrameRate: DWORD; //幀率 0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20; //V2.0增加 14-15; 15-18; 16-22;
    wIntervalFrameI: WORD;  //I幀間隔
    //2006-08-11 增加單P幀的配置介面,可以改善實時流延時問題
    byIntervalBPFrame: BYTE;//0-BBP幀; 1-BP幀; 2-單P幀 BP幀設定暫不支持
    byRes: BYTE;
  end;
  //NET_DVR_COMPRESSION_INFO_EX,*LPNET_DVR_COMPRESSION_INFO_EX;

  PNET_DVR_COMPRESSIONCFG_EX = ^LPNET_DVR_COMPRESSIONCFG_EX;
  {$EXTERNALSYM NET_DVR_COMPRESSIONCFG_EX}
  NET_DVR_COMPRESSIONCFG_EX = Record
    dwSize: DWORD;
    struRecordPara: NET_DVR_COMPRESSION_INFO_EX; //錄像
    struNetPara: NET_DVR_COMPRESSION_INFO_EX; //網傳
  end;
  LPNET_DVR_COMPRESSIONCFG_EX = NET_DVR_COMPRESSIONCFG_EX;



  
//錄像
  NET_DVR_RECORDSCHED = Record
    struRecordTime: NET_DVR_SCHEDTIME;
    byRecordType: BYTE; //0:定時錄像,1:移動偵測,2:報警錄像,3:動測|報警,4:動測&報警, 5:命令觸發, 6: 手動錄像
    reservedData: Array[0..2] of char;
  end;
  //NET_DVR_RECORDSCHED,*LPNET_DVR_RECORDSCHED;

  NET_DVR_RECORDDAY = Record
    wAllDayRecord: WORD; // 是否全天錄像 */
    byRecordType: BYTE; // 錄象型別 0:定時錄像,1:移動偵測,2:報警錄像,3:動測|報警,4:動測&報警 5:命令觸發, 6: 手動錄像*/
    reservedData: char;
  end;
  
  PNET_DVR_RECORD = ^LPNET_DVR_RECORD;
  {$EXTERNALSYM NET_DVR_RECORD}
  NET_DVR_RECORD = Record
    dwSize: DWORD;
    dwRecord: DWORD;  //是否錄像 0-否 1-是*/
    struRecAllDay: Array[0..MAX_DAYS - 1] of NET_DVR_RECORDDAY;
    struRecordSched: Array[0..MAX_DAYS - 1] of Array[0..MAX_TIMESEGMENT - 1] of NET_DVR_RECORDSCHED;
    dwRecordTime: DWORD; // 錄象時間長度 */
    dwPreRecordTime: DWORD; // 預錄時間 0-不預錄 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(盡可能預錄) */
  end;
  LPNET_DVR_RECORD = NET_DVR_RECORD;

//解碼器
  PNET_DVR_DECODERCFG = ^TNET_DVR_DECODERCFG;
  {$EXTERNALSYM NET_DVR_DECODERCFG}
  NET_DVR_DECODERCFG = record
    dwSize: DWORD;
    dwBaudRate: DWORD; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k;
    byDataBit: BYTE;// 資料有幾位 0-5位,1-6位,2-7位,3-8位;
    byStopBit: BYTE;   // 停止位 0-1位,1-2位;
    byParity: BYTE; // 校驗 0-無校驗,1-奇校驗,2-偶校驗;
    byFlowcontrol: BYTE; // 0-無,1-軟流控,2-硬流控
    wDecoderType: WORD; //解碼器型別, 0-YouLi,1-LiLin-1016,2-LiLin-820,3-Pelco-p,4-DM DynaColor,5-HD600,6-JC-4116,7-Pelco-d WX,8-Pelco-d PICO
    wDecoderAddress: WORD; //解碼器地址:0 - 255
    bySetPreset: array[0..MAX_PRESET-1] of BYTE; //預置點是否設定,0-沒有設定,1-設定
  bySetCruise: array[0..MAX_PRESET-1] of BYTE; //  巡航是否設定: 0-沒有設定,1-設定
   bySetTrack: array[0..MAX_PRESET-1] of BYTE;  //  軌跡是否設定,0-沒有設定,1-設定
  end;
  TNET_DVR_DECODERCFG = NET_DVR_DECODERCFG;

  // 時間
  PNET_DVR_TIME = ^TNET_DVR_TIME;
  {$EXTERNALSYM NET_DVR_TIME}
  NET_DVR_TIME = record
    dwYear: DWORD; //年
    dwMonth: DWORD; //月
    dwDay: DWORD; //日
    dwHour: DWORD; //時
    dwMinute: DWORD; //分
    dwSecond: DWORD; //秒
  end;
  TNET_DVR_TIME = NET_DVR_TIME;

  //查找檔案的結構體
  PNET_DVR_FIND_DATA = ^TNET_DVR_FIND_DATA;
  {$EXTERNALSYM NET_DVR_FIND_DATA}
  NET_DVR_FIND_DATA = record
   sFileName: array[0..99] of Char;//檔案名
    struStartTime: TNET_DVR_TIME;  //檔案的開始時間
    struStopTime: TNET_DVR_TIME;  //檔案的結束時間
    dwFileSize: DWORD;  //檔案的大小
  end;
  TNET_DVR_FIND_DATA = NET_DVR_FIND_DATA;

  //報警輸入
  PNET_DVR_ALARMINCFG = ^LPNET_DVR_ALARMINCFG;
  {$EXTERNALSYM NET_DVR_ALARMINCFG}
  NET_DVR_ALARMINCFG = Record
    dwSize: DWORD;
    sAlarmInName: Array[0..NAME_LEN - 1] of BYTE; // 名稱 */
    byAlarmType: BYTE; //報警器型別,0:常開,1:常閉
    byAlarmInHandle: BYTE; // 是否處理 */
    struAlarmHandleType: NET_DVR_HANDLEEXCEPTION; // 處理方式 */
    struAlarmTime: Array[0..MAX_DAYS - 1] of Array[0..MAX_TIMESEGMENT - 1] of NET_DVR_SCHEDTIME;//布防時間
    byRelRecordChan: Array[0..MAX_CHANNUM - 1] of BYTE; //報警觸發的錄象通道,為1表示觸發該通道
    byEnablePreset: Array[0..MAX_CHANNUM - 1] of BYTE; // 是否呼叫預置點 */
    byPresetNo: Array[0..MAX_CHANNUM - 1] of BYTE; // 呼叫的云臺預置點序號,一個報警輸入可以呼叫多個通道的云臺預置點, 0xff表示不呼叫預置點。*/
    byEnableCruise: Array[0..MAX_CHANNUM - 1] of BYTE; // 是否呼叫巡航 */
    byCruiseNo: Array[0..MAX_CHANNUM - 1] of BYTE; // 巡航 */
    byEnablePtzTrack: Array[0..MAX_CHANNUM - 1] of BYTE; // 是否呼叫軌跡 */
    byPTZTrack: Array[0..MAX_CHANNUM - 1] of BYTE; // 呼叫的云臺的軌跡序號 */
  end;
  LPNET_DVR_ALARMINCFG = NET_DVR_ALARMINCFG;

  //圖片質量
  PNET_DVR_JPEGPARA = ^LPNET_DVR_JPEGPARA;
  {$EXTERNALSYM NET_DVR_JPEGPARA}
  NET_DVR_JPEGPARA = Record
    wPicSize: WORD; // 0=CIF, 1=QCIF, 2=D1 */
   wPicQuality: WORD; // 圖片質量系數 0-最好 1-較好 2-一般 */
  end;
  LPNET_DVR_JPEGPARA = NET_DVR_JPEGPARA;

  //報警
  LPNET_DVR_ALARMOUTSTATUS = ^TNET_DVR_ALARMOUTSTATUS;
  {$EXTERNALSYM NET_DVR_ALARMOUTSTATUS}
  NET_DVR_ALARMOUTSTATUS = Record
    Output: array[0..MAX_ALARMOUT-1] of Byte;
  end;
  TNET_DVR_ALARMOUTSTATUS = NET_DVR_ALARMOUTSTATUS;

  //服務器通道狀態
  PNET_DVR_CHANNELSTATE = ^TNET_DVR_CHANNELSTATE;
  {$EXTERNALSYM NET_DVR_CHANNELSTATE}
  NET_DVR_CHANNELSTATE = record
    byRecordStatic: BYTE; //通道是否在錄像,0-不錄像,1-錄像
    bySignalStatic: BYTE; //連接的信號狀態,0-正常,1-信號丟失
    byHardwareStatic: BYTE; //通道硬體狀態,0-正常,1-例外,例如DSP死掉
    reservedData: Char;
    dwBitRate: DWORD; ///實際碼率
    dwLinkNum: DWORD; //客戶端連接的個數
    dwClientIP: array[0..MAX_LINK-1] of DWORD; //客戶端的IP地址
  end;
  TNET_DVR_CHANNELSTATE = NET_DVR_CHANNELSTATE;

  //硬碟狀態
  PNET_DVR_DISKSTATE = ^TNET_DVR_DISKSTATE;
  {$EXTERNALSYM NET_DVR_DISKSTATE}
  NET_DVR_DISKSTATE = record
    dwVolume: DWORD; //硬碟的容量
    dwFreeSpace: DWORD; //硬碟的剩余空間
    dwHardDiskStatic: DWORD; //硬碟的狀態,休眠,活動,不正常等
  end;
  TNET_DVR_DISKSTATE = NET_DVR_DISKSTATE;

  //設備狀態
  PNET_DVR_WORKSTATE = ^TNET_DVR_WORKSTATE;
  {$EXTERNALSYM NET_DVR_WORKSTATE}
  NET_DVR_WORKSTATE = record
    dwDeviceStatic: DWORD; //設備的狀態,0-正常,1-CPU占用率太高,超過85%,2-硬體錯誤,例如串口死掉
    struHardDiskStatic: array[0..MAX_DISKNUM-1] of TNET_DVR_DISKSTATE;

    struChanStatic: array[0..MAX_CHANNUM-1] of TNET_DVR_CHANNELSTATE;  //通道的狀態
    byAlarmInStatic: array[0..MAX_ALARMIN-1] of Byte;  //報警埠的狀態,0-沒有報警,1-有報警
    byAlarmOutStatic: array[0..MAX_ALARMOUT-1] of Byte; //報警輸出埠的狀態,0-沒有輸出,1-有報警輸出
    dwLocalDisplay: DWORD;  ////本地顯示狀態,0-正常,1-不正常
  end;
  TNET_DVR_WORKSTATE = NET_DVR_WORKSTATE;

  //報警設備資訊結構體。
  PNET_DVR_ALARMER = ^TNET_DVR_ALARMER;
  {$EXTERNALSYM NET_DVR_ALARMER}
  NET_DVR_ALARMER = record
    byUserIDValid: BYTE; //userid是否有效:0-無效;1-有效
    bySerialValid: BYTE;  //序列號是否有效:0-無效;1-有效
    byVersionValid: BYTE; //版本號是否有效:0-無效;1-有效
    byDeviceNameValid: BYTE; //設備名字是否有效:0-無效;1-有效
    byMacAddrValid: BYTE; //MAC地址是否有效:0-無效;1-有效
    byLinkPortValid: BYTE; //Login埠是否有效:0-無效;1-有效
    byDeviceIPValid: BYTE; //設備IP是否有效:0-無效;1-有效
    bySocketIPValid: BYTE; //Socket IP是否有效:0-無效;1-有效
    lUserID: Longint; //NET_DVR_Login或NET_DVR_Login_V30回傳值, 布防時有效
    sSerialNumber: array[0..SERIALNO_LEN-1] of BYTE; //序列號
    dwDeviceVersion: DWORD; //版本資訊:V3.0以上版本支持的設備最高8位為主版本號,次高8位為次版本號,低16位為修復版本號;V3.0以下版本支持的設備高16位表示主版本,低16位表示次版本
    sDeviceName: array[0..NAME_LEN-1] of Char;  //設備名稱
    byMacAddr: array[0..MACADDR_LEN-1] of BYTE;  //MAC地址
    wLinkPort: WORD; //設備通訊埠
    sDeviceIP: array[0..127] of Char; //設備IP地址
    sSocketIP: array[0..127] of Char; //報警主動上傳時的Socket IP地址
    byIpProtocol: Byte; //IP協議:0-IPV4;1-IPV6
    byRes2: array[0..10] of BYTE; //保留,置為0 
  end;
  TNET_DVR_ALARMER = NET_DVR_ALARMER;

uj5u.com熱心網友回復:


type
    fMessCallBack=function (lCommand: Longint;sDVRIP: PChar;pBuf: PChar;dwBufLen: DWORD): BOOL; stdcall;
    fMSGCallBack=function (lCommand: Longint;pAlarmer: PNET_DVR_ALARMER;pAlarmInfo: PChar;dwBufLen: DWORD; pUser: Pointer): BOOL; stdcall;

  function NET_DVR_CaptureJPEGPicture(LoginID: longint; lChannel: longint; lpJpegPara: PNET_DVR_JPEGPARA; sPicFileName: PChar):Boolean; stdcall;external 'HCNetSDK.dll';
  {功能:JPEG截圖}


  function NET_DVR_Init: Integer; stdcall; external 'HCNetSDK.dll';
  {初始化}

  procedure NET_DVR_Cleanup; stdcall;external 'HCNetSDK.dll';
  {釋放DLL}

  function NET_DVR_Login(IPAddr: PChar;wDVRPort: WORD;UserName: PChar;PassWord: PChar; lpDeviceInfo: PNET_DVR_DEVICEINFO): longint; stdcall;external 'HCNetSDK.dll';
  {功能:注冊用戶到硬碟錄像機}

  function NET_DVR_Logout(LoginID: longint): Integer; stdcall;external 'HCNetSDK.dll';
   {功能:注冊用戶退出硬碟錄像機}

  function NET_DVR_GetDVRConfig(lUserID:LongInt;dwCommand:DWORD;lChannel:LongInt;lpOutBuffer: Pointer;dwOutBufferSize:DWORD;lpBytesReturned: LPDWORD):BOOL; stdcall;  external 'HCNetSDK.dll';
  {功能:獲取硬碟錄像機的引數}

  function NET_DVR_SetDVRConfig(lUserID: LongInt;dwCommand:DWORD;lChannel:LongInt;lpInBuffer: Pointer;dwInBufferSize:DWORD):BOOL; stdcall;  external 'HCNetSDK.dll';
  {功能:設定硬碟錄像機的引數}

  function NET_DVR_GetLastError: DWORD; stdcall; external  'HCNetSDK.dll';
  {功能:獲取最后錯誤}

  function NET_DVR_RestoreConfig(lUserID: LongInt): BOOL; stdcall; external  'HCNetSDK.dll';
  {功能:恢復默認值}

  function NET_DVR_SaveConfig(lUserID: LongInt): BOOL; stdcall; external  'HCNetSDK.dll';
  {功能:保存引數}

  function NET_DVR_RebootDVR(lUserID: LongInt): BOOL; stdcall; external  'HCNetSDK.dll';
  {功能:重啟}

  function NET_DVR_ShutDownDVR(lUserID: LongInt): BOOL; stdcall; external  'HCNetSDK.dll';
  {功能:關閉DVR}

  //遠程格式化硬碟
  function NET_DVR_FormatDisk(lUserID: LongInt;lDiskNumber:LongInt):LongInt; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_GetFormatProgress(lFormatHandle: LongInt;pCurrentFormatDisk: Pointer;pCurrentDiskPos: Pointer;pFormatStatic: Pointer):Boolean; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_CloseFormatHandle(lFormatHandle: LongInt):BOOL; stdcall; external  'HCNetSDK.dll';

  function HCGetLastString: PChar;

  //報警
  function NET_DVR_SetupAlarmChan(lUserID: Longint): Longint;  stdcall; external  'HCNetSDK.dll';
  function NET_DVR_CloseAlarmChan(lAlarmHandle: Longint): BOOL; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_GetAlarmOut(lUserID: Longint; lpAlarmOutState: LPNET_DVR_ALARMOUTSTATUS): BOOL; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_SetAlarmOut(lUserID: Longint; lAlarmOutPort: Longint;lAlarmOutStatic: Longint): BOOL; stdcall; external  'HCNetSDK.dll';

  function NET_DVR_SetDVRMessCallBack(MessCallBack: fMessCallBack): BOOL;stdcall; external  'HCNetSDK.dll';

  //查找檔案
  function NET_DVR_FindFile(lUserID: Longint;lChannel: Longint;dwFileType: DWORD; lpStartTime: PNET_DVR_TIME; lpStopTime: PNET_DVR_TIME): Longint; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_FindNextFile(lFindHandle: Longint;lpFindData: PNET_DVR_FIND_DATA): Longint; stdcall; external  'HCNetSDK.dll';
  function NET_DVR_FindClose(lFindHandle: Longint): BOOL;stdcall; external  'HCNetSDK.dll';

  //服務器狀態
  function NET_DVR_GetDVRWorkState(lUserID: Longint; lpWorkState: PNET_DVR_WORKSTATE): BOOL; stdcall; external  'HCNetSDK.dll';
  //報警監聽和取消報警監聽
  function NET_DVR_StartListen_V30(sLocalIP: PChar; wLocalPort: WORD;DataCallback: fMSGCallBack;pUserData: Pointer): Longint; stdcall; external  'HCNetSDK.dll';
  //停止監聽(支持多執行緒)。
  function NET_DVR_StopListen_V30(lListenHandle: Longint): BOOL; stdcall; external  'HCNetSDK.dll';


implementation

uj5u.com熱心網友回復:

http://blog.csdn.net/ccnccyj/article/details/9131413

uj5u.com熱心網友回復:

參考 6 樓 andrew57 的回復:
直接到海康官網下個SDK指南,里面有delphi demo。

請給個地址,在官網上真的是找不到啊

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113161.html

標籤:Windows SDK/API

上一篇:關于DELPHI 寫的 ActiveX OCX 兼容的問題

下一篇:cxGrid 動態添加的列,用StoreToIniFile把列資訊保存到Ini檔案,但是失敗,求大俠

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more