DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fiscan1
今日帖子: 1
在线用户: 3
导航: 论坛 -> 发布代码 斑竹:liumazi,ruralboy  
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2020/6/27 7:39:57
标题:
海康威视及大华技术SDK C头文件转Delphi Pas文件 浏览:7215
加入我的收藏
楼主:    视频监控领域两家著名的公司海康威视和大华技术,他们提供的SDK都不直接支持Delphi,据他们的说法是Delphi用户不够多,无法什么语言都支持。如果我们想用Delphi调用这些SDK里面的接口,那就需要自己先把其中C头文件转换成Delphi的pas文件。

    海康威视SDK里面的HCNetSDK.h有50734行,而大华技术的dhnetsdk.h和dhconfigsdk.h分别有53335行和13846行,如果手工转的话,不知要转到何年何月,而且手工转不但容易出错、而且难以发现转错的地方。以前我曾经用手工方式试转了一下,感觉既机械又郁闷。后来在网上找了一些别人手工转的,但很不完整,只转其中极小的一部分,而且对应的sdk版本比较老。

   最后是想用程序自动转。在网上找了一下C头文件转pas的工具,发现没有一个是好用的,不论是国外的还是国内的。最后没有办法,只能自己写程序来转换,花了我不少的时间。

  现把这些转换后的文件共享出来,避免大家重复造轮子了。
  这些文件我只是用到其中极少一部分的功能,没有做过完整的测试,仅供参考,有问题欢迎留言。

 文件可以到盒子ftp里面下载, 在ftp里搜索“海康威视”或“大华”就能找到。
此帖子包含附件:bluestorm8_202062774314.zip 大小:1.33M
----------------------------------------------
-
作者:
男 12288144 (12288144) ★☆☆☆☆ -
普通会员
2020/6/27 8:46:44
1楼: 谢谢
----------------------------------------------
-
作者:
男 www12345 (风云) ★☆☆☆☆ -
盒子活跃会员
2020/6/27 9:05:38
2楼: 辛苦
----------------------------------------------
一卡通专家的中专家www.cnduh.com
作者:
男 qq81709989 (战石电子) ▲▲△△△ -
普通会员
2020/6/27 9:42:34
3楼: 感谢!建议放Github
----------------------------------------------
《Z-Gantt战石智慧时间管理进度计划甘特图软件》:WWW.Z-SHi.NET
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2020/6/27 10:34:07
4楼: 我看了一下,你大华中有如下代码
{$IFDEF WIN64}
  LLONG =  Int64;
  LDWORD = UInt64;
{$ELSE}
  LLONG =  LONG;
  LDWORD = DWORD;
然后多数地方对应的句柄都是用LLONG来定义的
而海康中没有相关的定义转换,我很久前看过海康的代码,好像海康直接使用的LONG,这个LONG在什么地方做了定义,64位系统中也是Int64的,我记不清了,但我在头文件转换时是这样定义的  
THIK_NET_DVR_Login_V30 = function(sDVRIP: PAnsiChar; wDVRPort: Word; sUserName, sPassword: PAnsiChar;
    var lpDeviceInfo: THIK_NET_DVR_DEVICEINFO_V30): NativeInt; stdcall;
THIK_NET_DVR_Logout_V30 = function(lUserID: NativeInt): BOOL; stdcall;
在实际使用中做64位或32位都未发现问题,应该海康和大华在头文件中确实使用了LONG来表示句柄。

后来我做这个始终有点担心,就在头部加了重定义的部分
  THikNet_Int = integer;
  THikNet_Long = Long;
  THikNet_Handle = THikNet_Long;

  TDahNet_Int = integer;
  TDahNet_Long = integer;
  TDahNet_LLong = NativeInt;
  TDahNet_Handle = TDahNet_LLong;
但海康和大华都还有一套解码库,它们的头部我是这样定义的
  THikPlay_Int = integer;
  THikPlay_Long = Long;
  THikPlay_Port = THikPlay_Long;

  TDahPlay_Int = integer;
  TDahPlay_Long = integer;
  TDahPlay_Port = TDahPlay_Long;
其实我还做有别的一些厂商的SDK接口,为了这个32位和64位的问题早就看晕了

有没有海康自己的人把这些类型的宏定义说明一下啊,有的定义部分在一些版本真的找不到了
----------------------------------------------
-
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2020/6/27 10:48:11
5楼: 我可以负责的讲,楼主是个好人。造福大家。。。
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
男 kaida (kaida) ★☆☆☆☆ -
盒子活跃会员
2020/6/27 11:05:15
6楼: 楼主好人,十分感谢!
----------------------------------------------
http://down.desei.com.cn/down/1041485/MyWeb/VCLs.html
作者:
男 ken0137 (顺眼即佛) ★☆☆☆☆ -
普通会员
2020/6/27 13:36:06
7楼: 楼主热心,我之前也自己手工转过,真心累
----------------------------------------------
只会简单使用,并未精通深入
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2020/6/27 14:19:35
8楼: 向作者敬礼!
----------------------------------------------
-我的博客
作者:
男 tulater (tulater) ★☆☆☆☆ -
普通会员
2020/6/27 15:11:20
9楼: 楼主好人,十分感谢!
----------------------------------------------
http://www.cnblogs.com/tulater/
作者:
男 qq81709989 (战石电子) ▲▲△△△ -
普通会员
2020/6/27 15:16:06
10楼: 推荐一个C2Pascal头文件转换工具,用于将C头文件转换成Delphi格式
https://github.com/neslib/Chet
----------------------------------------------
《Z-Gantt战石智慧时间管理进度计划甘特图软件》:WWW.Z-SHi.NET
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2020/6/27 17:14:38
11楼: 我曾经试过用C2Pascal来转,但各种报错太多,基本上帮不上什么忙。
海康威视sdk里面有宏函数、重复的常量定义、结构体名称和函数名称重复、函数定义里面含有回调函数的定义、结构体定义里面含有联合体的定义,而这些联合体定义又含有结构体的定义,等等,特殊的、复杂的地方太多, C2Pascal应付不过来,我试用了一下就放弃了。
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2020/6/27 17:16:11
12楼: bluestorm:试下Chet,期待结果。
----------------------------------------------
-我的博客
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2020/6/27 17:21:28
13楼: 我自己都写了转换程序,就没有必要用chet了。试下Chet的事情,为什么你自己不试一下?
----------------------------------------------
-
作者:
男 xjia (xjia) ★☆☆☆☆ -
盒子活跃会员
2020/6/27 22:03:15
14楼: 楼主辛苦了,感谢楼主分享~~~
----------------------------------------------
-
作者:
男 421 (421) ★☆☆☆☆ -
盒子活跃会员
2020/6/28 8:49:44
15楼: 感谢分享~~
楼主辛苦了
曾经用过各种工具转换,出错太多,后来索性用到哪个就手工添加,一直没有如此完整的单元文件
----------------------------------------------
-
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2020/6/28 10:04:28
16楼: 我试过手工转,但后来发现有转错的地方,如数组下标忘了减1了,因此对手工转没什么信心,才下定决心用程序转。由于第一次写这样的程序,而且完全没有参考别人的转换程序,以为这个程序比较简单,直到写的过程中,才发现工作量和难度远超原来的估计,耗费了一个多月的时间,还加班加点,真是高强度的脑力活。
----------------------------------------------
-
作者:
男 littlestone08 (littlestone08) ★☆☆☆☆ -
普通会员
2020/7/22 14:39:17
17楼: 楼主好人
----------------------------------------------
我和我追逐的梦,擦肩而过
作者:
男 foryour (sean) ★☆☆☆☆ -
普通会员
2020/7/22 15:15:15
18楼: mark
----------------------------------------------
-
作者:
男 shuaialang (lenog) ★☆☆☆☆ -
普通会员
2020/8/5 12:09:28
19楼: mark,delphi海康车牌识别做过,也走了不少弯路,为支持楼主,有需要的朋友可以联系我,不收费
----------------------------------------------
-
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2020/8/5 14:09:24
20楼: @shuaialang ,海康车牌识别,能发一份demo吗?37540862@qq.com
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2020/8/5 14:31:51
21楼: 19楼:同求车牌识别代码 85269698@qq.com
----------------------------------------------
作者:
男 ybj316 (ybj) ★☆☆☆☆ -
盒子活跃会员
2020/8/6 8:33:11
22楼: @shuaialang :同求车牌识别代码 14625154@qq.com   谢谢!!
----------------------------------------------
-
作者:
男 hz_2009 (盒子) ★☆☆☆☆ -
普通会员
2020/8/6 8:41:43
23楼: 感谢分享!
----------------------------------------------
-
作者:
男 bigboy2050 (bigboy2050) ★☆☆☆☆ -
普通会员
2020/8/13 10:18:35
24楼: 支持楼主大侠!!!
----------------------------------------------
kittyapp
作者:
男 czq627526434 (天罗柚子) ▲▲▲▲△ -
普通会员
2020/9/29 9:36:54
25楼: 支持下楼主,感谢分享。
----------------------------------------------
-
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/9/29 14:37:27
26楼: 确实,现在监控、AI这么发达,值班人员面临下岗大潮。
只要把摄像头接到云上,一个人就能同时监控几百个摄像头有没有异常,有异常就通知人处理。
物业、没有物业的小区、停车场、商场购物中心、家里,WOW,影响面好大
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2020/9/29 20:39:42
27楼: 重复的劳动,全被机器代替了。
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
男 sarsfree (非典型Delphi) ★☆☆☆☆ -
普通会员
2020/10/12 19:52:13
28楼: 新版本出来了,包括人脸考勤机的体温数据,如果有空,希望更新下。
非常感谢
----------------------------------------------
Delphi forever
作者:
男 ken0137 (顺眼即佛) ★☆☆☆☆ -
普通会员
2020/10/13 10:51:19
29楼: 海康PlayMpeg4.pas
来源:https://gitee.com/afrusrsc/HCNetSDK/blob/master/src/PlayMpeg4.pas
{**********
  名  称:海康威视播放库SDK
  作  者:jxq
  方  式: 静态调用
**********}
unit PlayMpeg4;

interface

uses
  Winapi.Windows;

{======== 常量定义 ==========}

const
{-------- 播放库错误码 ----------}
  PLAYM4_NOERROR = 0;          //没有错误
  PLAYM4_PARA_OVER = 1;          //输入参数非法
  PLAYM4_ORDER_ERROR = 2;          //调用顺序不对
  PLAYM4_TIMER_ERROR = 3;          //多媒体时钟设置失败
  PLAYM4_DEC_VIDEO_ERROR = 4;          //视频解码失败
  PLAYM4_DEC_AUDIO_ERROR = 5;          //音频解码失败
  PLAYM4_ALLOC_MEMORY_ERROR = 6;        //分配内存失败
  PLAYM4_OPEN_FILE_ERROR = 7;          //文件操作失败
  PLAYM4_CREATE_OBJ_ERROR = 8;          //创建线程事件等失败
  PLAYM4_CREATE_DDRAW_ERROR = 9;        //创建DierctDraw失败
  PLAYM4_CREATE_OFFSCREEN_ERROR = 10;   //创建后端缓存失败
  PLAYM4_BUF_OVER = 11;          //缓冲区满,输入流失败
  PLAYM4_CREATE_SOUND_ERROR = 12;       //创建音频设备失败
  PLAYM4_SET_VOLUME_ERROR = 13;         //设置音量失败
  PLAYM4_SUPPORT_FILE_ONLY = 14;        //只能在播放文件时才能使用此接口
  PLAYM4_SUPPORT_STREAM_ONLY = 15;      //只能在播放流时才能使用此接口
  PLAYM4_SYS_NOT_SUPPORT = 16;          //不支持
  PLAYM4_FILEHEADER_UNKNOWN = 17;       //没有文件头
  PLAYM4_VERSION_INCORRECT = 18;        //解码器和编码器版本不对应
  PALYM4_INIT_DECODER_ERROR = 19;       //初始化解码器失败
  PLAYM4_CHECK_FILE_ERROR = 20;         //文件太短或码流无法识别
  PLAYM4_INIT_TIMER_ERROR = 21;         //初始化多媒体时钟失败
  PLAYM4_BLT_ERROR = 22;          //位拷贝失败
  PLAYM4_UPDATE_ERROR = 23;          //显示overlay失败
  PLAYM4_OPEN_FILE_ERROR_MULTI = 24;    //打开文件失败,流类型是复合流
  PLAYM4_OPEN_FILE_ERROR_VIDEO = 25;    //打开文件失败,流类型是视频流
  PLAYM4_JPEG_COMPRESS_ERROR = 26;      //JPEG压缩失败
  PLAYM4_EXTRACT_NOT_SUPPORT = 27;      //文件不支持
  PLAYM4_EXTRACT_DATA_ERROR = 28;       //数据错误
  PLAYM4_SECRET_KEY_ERROR = 29;         //解码密钥错误
  PLAYM4_DECODE_KEYFRAME_ERROR = 30;    //解码关键帧失败
  PLAYM4_NEED_MORE_DATA = 31;          //数据不足
  PLAYM4_INVALID_PORT = 32;          //无效端口号
  PLAYM4_NOT_FIND = 33;          //查找失败
  PLAYM4_NEED_LARGER_BUFFER = 34;       //需要更大的缓冲区
  PLAYM4_FAIL_UNKNOWN = 99;          //未知的错误
{-------- 鱼眼部分错误码 ----------}
  PLAYM4_FEC_ERR_ENABLEFAIL = 100;          //鱼眼模块加载失败
  PLAYM4_FEC_ERR_NOTENABLE = 101;          //鱼眼模块没有加载
  PLAYM4_FEC_ERR_NOSUBPORT = 102;          //子端口没有分配
  PLAYM4_FEC_ERR_PARAMNOTINIT = 103;        //没有初始化对应端口的参数
  PLAYM4_FEC_ERR_SUBPORTOVER = 104;         //子端口已经用完
  PLAYM4_FEC_ERR_EFFECTNOTSUPPORT = 105;    //该安装方式下这种效果不支持
  PLAYM4_FEC_ERR_INVALIDWND = 106;          //非法的窗口
  PLAYM4_FEC_ERR_PTZOVERFLOW = 107;         //PTZ位置越界
  PLAYM4_FEC_ERR_RADIUSINVALID = 108;       //圆心参数非法
  PLAYM4_FEC_ERR_UPDATENOTSUPPORT = 109;    //指定的安装方式和矫正效果,该参数更新不支持
  PLAYM4_FEC_ERR_NOPLAYPORT = 110;          //播放库端口没有启用
  PLAYM4_FEC_ERR_PARAMVALID = 111;          //参数为空
  PLAYM4_FEC_ERR_INVALIDPORT = 112;         //非法子窗口
  PLAYM4_FEC_ERR_PTZZOOMOVER = 113;         //PTZ矫正范围越界
  PLAYM4_FEC_ERR_OVERMAXPORT = 114;         //矫正通道饱和,最大支持的矫正通道为四个
  PLAYM4_FEC_ERR_ENABLED = 115;          //该端口已经启用了鱼眼模块
  PLAYM4_FEC_ERR_D3DACCENOTENABLE = 116;    //D3D加速没有开启
  PLAYM4_FEC_ERR_PLACETYPE = 117;          //安装方式不正确;一个播放库port需要对应一种安装方式
  PLAYM4_FEC_ERR_CorrectType = 118;         //矫正方式错误:如矫正方式已有,则不能开多个;比如一个播放库port设定除了PTZ和鱼眼半球矫正方式外,其他的矫正方式则只能开一路;设置180度矫正不能和PTZ矫正仪器开,半球矫正与其他矫正则无关联性。
  PLAYM4_FEC_ERR_NULLWND = 119;          //鱼眼窗口为NULL

{-------- 流播放模式 ----------}
  STREAME_REALTIME = 0;   //此模式(默认)下, 会尽量保正实时性, 防止数据阻塞; 而且数据检查严格
  STREAME_FILE = 1;       //此模式下按时间戳播放
{-------- 缓冲数据流大小 ----------}
  SOURCE_BUF_MIN = 1024 * 50;       //缓冲数据流缓冲最小值
  SOURCE_BUF_MAX = 1024 * 100000;   //缓冲数据流缓冲最大值

{======== 结构体定义 ==========}

type
  {-------- 交互信息结构 --------}
  PLAYM4_SESSION_INFO = packed record
    nSessionInfoType: Integer;
    nSessionInfoLen: Integer;
    pSessionInfoData: Pointer;
  end;

/// <summary>索引回调函数</summary>
/// <param name="nPort" IO="Out">播放器通道号</param>
/// <param name="nUser" IO="Out">用户数据</param>
  FileRefDoneCB = procedure(nPort: DWORD; nUser: DWORD); stdcall;

{======== 接口函数 ==========}

{-------- 错误码 ----------}

/// <summary>获取错误号</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>错误码</returns>
function PlayM4_GetLastError(nPort: LONG): DWORD; stdcall; external 'PlayCtrl.dll';

{-------- 端口号 ----------}

/// <summary>获取未使用的通道号</summary>
/// <param name="nPort" IO="Out">播放通道号,指向用于获取端口号的LONG型变量指针</param>
/// <returns>True成功,False失败</returns>
function PlayM4_GetPort(nPort: PLongint): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>释放已使用的通道号</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_FreePort(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

{-------- 文件操作 ----------}

/// <summary>打开文件</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="sFileName" IO="In">文件名</param>
/// <returns>True成功,False失败</returns>
function PlayM4_OpenFile(nPort: LONG; sFileName: LPSTR): BOOL; stdcall; external
  'PlayCtrl.dll';

/// <summary>关闭文件</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_CloseFile(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

{-------- 流操作 ----------}

/// <summary>设置流播放模式</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="nMode" IO="In">流播放模式</param>
/// <returns>True成功,False失败</returns>
/// <remarks>必须在播放之前设置</remarks>
function PlayM4_SetStreamOpenMode(nPort: LONG; nMode: DWORD): BOOL; stdcall;
  external 'PlayCtrl.dll';

/// <summary>获取流播放模式</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>STREAME_REALTIME或STREAME_FILE</returns>
function PlayM4_GetStreamOpenMode(nPort: LONG): LONG; stdcall; external 'PlayCtrl.dll';

/// <summary>打开流</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="pFileHeadBuf" IO="In">文件头数据</param>
/// <param name="nSize" IO="In">文件头长度</param>
/// <param name="nBufPoolSize" IO="In">设置播放器中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~ SOURCE_BUF_MAX</param>
/// <returns>True成功,False失败</returns>
/// <remarks>流开关接口和文件开关接口不能交叉使用</remarks>
function PlayM4_OpenStream(nPort: LONG; pFileHeadBuf: PByte; nSize, nBufPoolSize:
  DWORD): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>关闭流</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_CloseStream(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>输入流数据</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="pBuf" IO="In">流数据缓冲区地址</param>
/// <param name="nSize" IO="In">流数据缓冲区大小</param>
/// <returns>True表示已经输入数据。False表示失败</returns>
function PlayM4_InputData(nPort: LONG; pBuf: PByte; nSize: DWORD): BOOL; stdcall;
  external 'PlayCtrl.dll';

/// <summary>打开流(以协议的方式)</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="nProtocolType" IO="In">协议类型,若取值为PLAYM4_PROTOCOL_RTSP,表示RTSP协议</param>
/// <param name="pstSessionInfo" IO="In">协议信息结构体,若取值为PLAYM4_SESSION_INFO_SDP,表示nSessionInfoTypeSDP信息</param>
/// <param name="nBufPoolSize" IO="In">协议数据大小</param>
/// <returns>True成功,False失败</returns>
function PlayM4_OpenStreamAdvanced(nPort: LONG; nProtocolType: Integer;
  pstSessionInfo: PLAYM4_SESSION_INFO; nBufPoolSize: DWORD): BOOL; stdcall;
  external 'PlayCtrl.dll';

{-------- 播放控制 ----------}

/// <summary>开启播放</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="hWnd" IO="In">播放视频的窗口句柄</param>
/// <returns>True成功,False失败</returns>
function PlayM4_Play(nPort: LONG; HWND: HWND): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>关闭播放</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_Stop(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>暂停/恢复播放</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="nPause" IO="In">1:暂停,0:恢复</param>
/// <returns>True成功,False失败</returns>
function PlayM4_Pause(nPort: LONG; nPause: DWORD): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>慢速播放</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
/// <remarks>每次调用将使当前播放速度慢一倍;最多调用4次;要恢复正常播放调用PlayM4_Play(),从当前位置开始正常播放</remarks>
function PlayM4_Slow(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>快速播放</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
/// <remarks>每次调用将使当前播放速度加快一倍,正常速度调用此接口最多调用4次;要恢复正常播放调用PlayM4_Play(),从当前位置开始正常播放;高清码流在高倍速播放时,由于受到解码和显示的限制,可能达不到所设置的速度</remarks>
function PlayM4_Fast(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>单帧前进</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
/// <remarks>恢复正常播放需要调用PlayM4_Play()</remarks>
function PlayM4_OneByOne(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>单帧回退</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
/// <remarks>只支持文件播放,且必须在文件索引生成之后才能调用,暂时不支持TS封装文件,且需要文件帧号是连续的</remarks>
function PlayM4_OneByOneBack(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>以独占方式打开声音</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_PlaySound(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>关闭声音(独占方式)</summary>
/// <returns>True成功,False失败</returns>
function PlayM4_StopSound: BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>以共享方式打开声音</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
/// <remarks>建议PlayM4_PlaySound,PlayM4_PlaySoundShare不要混用。播放低帧率文件时,必须先开启声音再播放,否则可能造成声音播放不正常</remarks>
function PlayM4_PlaySoundShare(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>关闭声音(共享方式)</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>True成功,False失败</returns>
function PlayM4_StopSoundShare(nPort: LONG): BOOL; stdcall; external 'PlayCtrl.dll';

/// <summary>设置音量</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="nVolume" IO="In">音量值,范围0-$FFFF</param>
/// <returns>True成功,False失败</returns>
function PlayM4_SetVolume(nPort: LONG; nVolume: Word): BOOL; stdcall; external
  'PlayCtrl.dll';

/// <summary>获取音量</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>音量值。这里的音量是指声卡输出的主音量,会影响到其他的声音应用</returns>
function PlayM4_GetVolume(nPort: LONG): Word; stdcall; external 'PlayCtrl.dll';

{-------- 文件定位 ----------}

/// <summary>获取文件当前播放位置(百分比)</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <returns>范围0~100%</returns>
function PlayM4_GetPlayPos(nPort: LONG): Single; stdcall; external 'PlayCtrl.dll';

/// <summary>设置文件当前播放位置(百分比)</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="fRelativePos" IO="In">播放位置,范围:0~100%</param>
/// <returns>True成功,False失败</returns>
function PlayM4_SetPlayPos(nPort: LONG; fRelativePos: Single): BOOL; stdcall;
  external 'PlayCtrl.dll';

{-------- 文件索引 ----------}

/// <summary>设置建立索引回调</summary>
/// <param name="nPort" IO="In">播放通道号</param>
/// <param name="pFileRefDone" IO="In">索引回调函数</param>
/// <param name="nUser" IO="In">用户指针</param>
/// <returns>True成功,False失败</returns>
function PlayM4_SetFileRefCallBack(nPort: LONG; pFileRefDone: FileRefDoneCB;
  nUser: DWORD): BOOL; stdcall; external 'PlayCtrl.dll';

implementation

end.
----------------------------------------------
只会简单使用,并未精通深入
作者:
男 yzsy_xhg (学子) ★☆☆☆☆ -
普通会员
2020/12/3 17:34:09
30楼: @shuaialang ,海康车牌识别,能发一份demo吗?459242217@qq.com
----------------------------------------------
-
作者:
男 sailor77 (我悄悄地来) ★☆☆☆☆ -
普通会员
2020/12/3 20:20:53
31楼: @shuaialang ,海康车牌识别,能发一份demo吗?14277268@qq.com
----------------------------------------------
-
作者:
男 wangarcon (大王生) ★☆☆☆☆ -
盒子活跃会员
2020/12/4 12:04:01
32楼: @shuaialang ,海康车牌识别,请发一份demo,谢谢
945168347@qq.com
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2020/12/4 16:14:54
33楼: 大家别留邮箱了,到现在也没有收到海康车牌识别的代码
----------------------------------------------
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/12/4 16:30:11
34楼: 代码能不能收到不知道,但是广告一定有。
很多爬虫,天天爬邮箱。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 somemak (mak) ★☆☆☆☆ -
普通会员
2021/1/11 16:01:04
35楼: 感谢分享~~
以前试过用工具转换,简直惨不忍睹,后来只能降低到delphi7用官方的pas文件
----------------------------------------------
-
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2021/1/11 16:22:09
36楼: 官方什么时候出过Pas文件? 如果有官方Pas文件,为什么只能用Delphi 7
----------------------------------------------
-
作者:
男 blockke (blockke) ★☆☆☆☆ -
盒子活跃会员
2021/1/14 14:21:34
37楼: 建议作者放到 Gitee 或者Github上共享,让更多的delphi爱好者受益
----------------------------------------------
-
作者:
男 ywqs (roger) ★☆☆☆☆ -
盒子活跃会员
2021/2/15 17:23:09
38楼: 感觉分享,非常好,比自己手工转好多了,全面,本来用一个转一个
----------------------------------------------
-
作者:
女 lililala6868 (lila) ▲▲△△△ -
普通会员
2021/2/16 19:44:20
39楼: 福彩3D
体彩排列5
----------------------------------------------
-
作者:
男 somemak (mak) ★☆☆☆☆ -
普通会员
2021/3/2 12:39:11
40楼: @bluestorm 
官方什么时候出过Pas文件? 如果有官方Pas文件,为什么只能用Delphi 7


-- 官方在早期的时候,有出过Pas版,后来Delphi没落后就不维护了。因为当时的PAS文件是在D7下的,所以用XE以后的版本处理,会产生错误。如某些类型定义发生了改变。
----------------------------------------------
-
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2021/3/3 9:42:32
41楼: 大华的SDK都提供Go语言版了。反观Delphi的境况、生态有多糟,大家都不支持这个开发平台了,囧、惨!
----------------------------------------------
-
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2021/3/8 16:05:29
42楼: 对应的海康sdk
https://download.hikvision.com/UploadFile/SDK/CH-HCNetSDKV6.1.4.6_build20191220_Win32.zip
----------------------------------------------
-
作者:
男 wyattwriy (wyatt) ★☆☆☆☆ -
盒子活跃会员
2022/8/7 16:05:55
44楼: 呵,谢谢,正好有需要。
https://wiki.freepascal.org/C_to_Pascal
----------------------------------------------
-
作者:
男 szfity (szfity) ▲▲▲△△ -
普通会员
2023/10/27 22:34:06
45楼: 我用了下有2个问题请教大神:
1.我用的是delphiXE5 编译时提示没有PLong类型;
2.我将接口单元引入工程,调用接口时出错,不知何故? 请指教!!不甚感激!
procedure THMainFrm.Button1Click(Sender: TObject);
Var
  BResu: Boolean;
  int: Integer;

  UserP: LPNET_DVR_USER_LOGIN_INFO;
  MacsP: LPNET_DVR_DEVICEINFO_V40;
begin
  BResu := NET_DVR_Init(); //执行此时报错:External exception C06D007E.

  NET_DVR_SetConnectTime(2000, 1);
  NET_DVR_SetReconnect(10000, true);
  if not BResu then Exit;
end;
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/10/28 6:03:22
46楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2023/10/30 8:57:55
47楼: 海康威视sdk pas文件最新版本在这里: https://bbs.2ccc.com/topic.asp?topicid=606222(31楼)

Delphi 10.3里面PLong的定义是PLong = ^Long = ^LongInt
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行91.79688毫秒 RSS