delphi 网络摄像机--问题

yunankuangke 2013-09-24 01:59:39
var
error:integer;
deviceinfo:H264_DVR_DEVICEINFO;
begin
loginID :=
H264_DVR_Login('192.168.1.10',34567,'admin','',deviceinfo,@error,TCPSOCKET);
if (LoginID <> 0) Then
begin
ShowMessage('Login Succes loginID = ' + inttostr(LoginID));
end
else
begin
ShowMessage('Login Fail errorcode = ' + inttostr(error));
end;
其中:
H264_DVR_DEVICEINFO = record
sSoftWareVersion:array[0..63] of Char;
sHardWareVersion:array[0..63] of Char;
sEncryptVersion:array[0..63] of Char;
SDK_SYSTEM_TIME:SDK_SYSTEM_TIME;
sSerialNumber:array[0..63] of Char;
byChanNum,
iVideoOutChannel,
byAlarmInPortNum,
byAlarmOutPortNum,iTalkInChannel,
iTalkOutChannel,iExtraChannel,
iAudioInChannel,iCombineSwitch,
iDigChannel:Integer;
uiDeviceRunTime:Word;
deviceTye:SDK_DeviceType;
sHardWare:array[0..63] of Char;
end;

登录函数 H264_DVR_Login返回的值不对,请各位大侠指教,谢谢!
...全文
507 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
果然厉害 2013-10-23
  • 打赏
  • 举报
回复
播放不出来我曾经遇到过一次,自己犯了一个低级错误,没把264的库放进去。你把所有库都放到程序目录下看看行不行。
yunankuangke 2013-10-02
  • 打赏
  • 举报
回复
引用 13 楼 sanmaotuo 的回复:
刚刚做完2个项目 设备是拓普威视的 流程和上面几位说的一样 DEMO也是C++的 没有DELPHI 我自己转换过来 注意两点 1、回调函数 2、设置一个时钟(或子线程)调用心跳函数 具体代码如下: 库函数(由C++转换) unit NetPlay.System.NetPlayLibrary; interface const PROTOCOL_TCP = 1; PROTOCOL_UDP = 2; PLAY_NETSTREAM_TYPE = 2; //网络实时流 type Tmsg_time_t = RECORD YEAR: INTEGER; MONTH: INTEGER; DAY: INTEGER; HOUR: INTEGER; MINUTE: INTEGER; SECOND: INTEGER; END; pTmsg_time_t = ^Tmsg_time_t; TCHANNEL_STREAM_CALLBACK = function(pserver_ip: pchar; channel: longint; buf: pointer; len: longint; pcontext: pointer): longint; function Net_setSystemTime(user_id: longint; tm: Tmsg_time_t): longint; stdcall; far;external 'NetSdk.dll' name 'Net_setSystemTime'; function Net_initClientNetLib: longint; stdcall; far;external 'NetSdk.dll' name 'Net_initClientNetLib'; function Net_deinitClientNetLib: longint; stdcall; far;external 'NetSdk.dll' name 'Net_deinitClientNetLib'; function Net_initServerInfo(ip_addr: string; port: Integer; user_name: string; user_pwd: string):longint; stdcall; far;external 'NetSdk.dll' name 'Net_initServerInfo'; function Net_deinitServerInfo(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_deinitServerInfo'; function Net_openChannelStream(user_id: longint; channel: longint; protocol_type: longint; rt: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_openChannelStream'; function Net_startChannelStream(user_id: longint; channel: longint; stream_type: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_startChannelStream'; function Net_userLogin(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_userLogin'; function Net_getHeartbeatStatus(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_getHeartbeatStatus'; function Net_registerChannelStreamCallback(user_id: longint; channel: longint; callback: TCHANNEL_STREAM_CALLBACK; handle: pointer): longint; stdcall; far;external 'NetSdk.dll' name 'Net_registerChannelStreamCallback'; function Player_createPlayInstance(play_type: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_createPlayInstance'; function Player_setPlayWnd(play_id: longint; Handle: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_setPlayWnd'; function Player_startPlay(play_id: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_startPlay'; function Player_openSound(play_id: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_openSound'; function Player_inputNetFrame(play_id: longint; buf: pointer; size: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_inputNetFrame'; function Player_capturePicture(play_id: longint; filename: pchar): longint; stdcall; far;external 'playerSDK.dll' name 'Player_capturePicture'; implementation end. 应用代码 unit NetPlay.View.RealCaptureView; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, RzButton, ExtCtrls, NetPlay.System.NetPlayLibrary; type TRealCaptureView = class(TForm) PnlStreamPlay: TPanel; ButtonCapture: TRzButton; TimerHeartBeat: TTimer; procedure TimerHeartBeatTimer(Sender: TObject); procedure ButtonCaptureClick(Sender: TObject); private User_ID: LongInt; Play_ID: LongInt; Channel: LongInt; FState: Integer; procedure NetStreamPlay; public property State: Integer read FState write FState; procedure SetNetPlayTime; procedure AfterConstruction; override; end; function Data_CallBack(PServer_IP: PChar; Channel: Integer; Buf: Pointer; Len: longint; PContext: Pointer): LongInt; stdcall; var RealCaptureView: TRealCaptureView; CallBack: TCHANNEL_STREAM_CALLBACK; implementation uses ....;//无参考价值 {$R *.dfm} { TRealCaptureView } function Data_CallBack(PServer_IP: PChar; Channel: Integer; Buf: pointer; Len: longint; PContext: pointer): LongInt; stdcall; begin Player_inputNetFrame(RealCaptureView.Play_ID, PChar(Buf), Len); Result := 0; end; procedure TRealCaptureView.AfterConstruction; begin inherited; Channel := 0; @CallBack := @Data_CallBack; NetStreamPlay; end; procedure TRealCaptureView.NetStreamPlay; var Return: Integer; begin User_ID := Net_initServerInfo(GetServerIP, GetServerPort, GetServerUser, GetServerPassword); if User_ID = 0 then begin MainView.StatusNetPlayConnect.Caption := '网络视频初始化失败'; end else begin MainView.StatusNetPlayConnect.Caption := '网络视频初始化成功'; end; Return := Net_userLogin(User_ID); if Return <> 0 then begin MainView.StatusNetPlayConnect.Caption := '网络视频登录失败'; end else begin MainView.StatusNetPlayConnect.Caption := '网络视频登录成功'; end; --心跳时钟 TimerHeartBeat.Enabled := True; --流程1 Play_ID := Player_createPlayInstance(PLAY_NETSTREAM_TYPE); Player_setPlayWnd(Play_ID, PnlStreamPlay.Handle); Player_startPlay(Play_ID); --流程2 Net_openChannelStream(User_ID, Channel, PROTOCOL_TCP, 0); Net_startChannelStream(User_ID, Channel, 0); --流程3 Net_registerChannelStreamCallback(User_ID, Channel, CallBack, nil); end; procedure TRealCaptureView.SetNetPlayTime; var rtime: tmsg_time_t; begin rtime.YEAR := YearOf(Now); rtime.MONTH := MonthOf(Now); rtime.DAY := DayOf(Now); rtime.HOUR := HourOf(Now); rtime.MINUTE := MinuteOf(Now); rtime.SECOND := SecondOf(Now); if User_ID > 0 then begin Net_setSystemTime(user_id, rtime); end; end; procedure TRealCaptureView.ButtonCaptureClick(Sender: TObject); begin //抓拍图片代码 无参考价值 end; procedure TRealCaptureView.TimerHeartBeatTimer(Sender: TObject); begin Net_getHeartbeatStatus(User_ID); end; end.
哥们,我想要的是,登录、播放以及抓图部分的C++转DELPHI代码。 我的邮箱是:yunankuangke@163.com
老冯 2013-09-30
  • 打赏
  • 举报
回复
刚刚做完2个项目 设备是拓普威视的 流程和上面几位说的一样 DEMO也是C++的 没有DELPHI 我自己转换过来 注意两点 1、回调函数 2、设置一个时钟(或子线程)调用心跳函数 具体代码如下: 库函数(由C++转换) unit NetPlay.System.NetPlayLibrary; interface const PROTOCOL_TCP = 1; PROTOCOL_UDP = 2; PLAY_NETSTREAM_TYPE = 2; //网络实时流 type Tmsg_time_t = RECORD YEAR: INTEGER; MONTH: INTEGER; DAY: INTEGER; HOUR: INTEGER; MINUTE: INTEGER; SECOND: INTEGER; END; pTmsg_time_t = ^Tmsg_time_t; TCHANNEL_STREAM_CALLBACK = function(pserver_ip: pchar; channel: longint; buf: pointer; len: longint; pcontext: pointer): longint; function Net_setSystemTime(user_id: longint; tm: Tmsg_time_t): longint; stdcall; far;external 'NetSdk.dll' name 'Net_setSystemTime'; function Net_initClientNetLib: longint; stdcall; far;external 'NetSdk.dll' name 'Net_initClientNetLib'; function Net_deinitClientNetLib: longint; stdcall; far;external 'NetSdk.dll' name 'Net_deinitClientNetLib'; function Net_initServerInfo(ip_addr: string; port: Integer; user_name: string; user_pwd: string):longint; stdcall; far;external 'NetSdk.dll' name 'Net_initServerInfo'; function Net_deinitServerInfo(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_deinitServerInfo'; function Net_openChannelStream(user_id: longint; channel: longint; protocol_type: longint; rt: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_openChannelStream'; function Net_startChannelStream(user_id: longint; channel: longint; stream_type: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_startChannelStream'; function Net_userLogin(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_userLogin'; function Net_getHeartbeatStatus(user_id: longint): longint; stdcall; far;external 'NetSdk.dll' name 'Net_getHeartbeatStatus'; function Net_registerChannelStreamCallback(user_id: longint; channel: longint; callback: TCHANNEL_STREAM_CALLBACK; handle: pointer): longint; stdcall; far;external 'NetSdk.dll' name 'Net_registerChannelStreamCallback'; function Player_createPlayInstance(play_type: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_createPlayInstance'; function Player_setPlayWnd(play_id: longint; Handle: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_setPlayWnd'; function Player_startPlay(play_id: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_startPlay'; function Player_openSound(play_id: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_openSound'; function Player_inputNetFrame(play_id: longint; buf: pointer; size: longint): longint; stdcall; far;external 'playerSDK.dll' name 'Player_inputNetFrame'; function Player_capturePicture(play_id: longint; filename: pchar): longint; stdcall; far;external 'playerSDK.dll' name 'Player_capturePicture'; implementation end. 应用代码 unit NetPlay.View.RealCaptureView; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, RzButton, ExtCtrls, NetPlay.System.NetPlayLibrary; type TRealCaptureView = class(TForm) PnlStreamPlay: TPanel; ButtonCapture: TRzButton; TimerHeartBeat: TTimer; procedure TimerHeartBeatTimer(Sender: TObject); procedure ButtonCaptureClick(Sender: TObject); private User_ID: LongInt; Play_ID: LongInt; Channel: LongInt; FState: Integer; procedure NetStreamPlay; public property State: Integer read FState write FState; procedure SetNetPlayTime; procedure AfterConstruction; override; end; function Data_CallBack(PServer_IP: PChar; Channel: Integer; Buf: Pointer; Len: longint; PContext: Pointer): LongInt; stdcall; var RealCaptureView: TRealCaptureView; CallBack: TCHANNEL_STREAM_CALLBACK; implementation uses ....;//无参考价值 {$R *.dfm} { TRealCaptureView } function Data_CallBack(PServer_IP: PChar; Channel: Integer; Buf: pointer; Len: longint; PContext: pointer): LongInt; stdcall; begin Player_inputNetFrame(RealCaptureView.Play_ID, PChar(Buf), Len); Result := 0; end; procedure TRealCaptureView.AfterConstruction; begin inherited; Channel := 0; @CallBack := @Data_CallBack; NetStreamPlay; end; procedure TRealCaptureView.NetStreamPlay; var Return: Integer; begin User_ID := Net_initServerInfo(GetServerIP, GetServerPort, GetServerUser, GetServerPassword); if User_ID = 0 then begin MainView.StatusNetPlayConnect.Caption := '网络视频初始化失败'; end else begin MainView.StatusNetPlayConnect.Caption := '网络视频初始化成功'; end; Return := Net_userLogin(User_ID); if Return <> 0 then begin MainView.StatusNetPlayConnect.Caption := '网络视频登录失败'; end else begin MainView.StatusNetPlayConnect.Caption := '网络视频登录成功'; end; --心跳时钟 TimerHeartBeat.Enabled := True; --流程1 Play_ID := Player_createPlayInstance(PLAY_NETSTREAM_TYPE); Player_setPlayWnd(Play_ID, PnlStreamPlay.Handle); Player_startPlay(Play_ID); --流程2 Net_openChannelStream(User_ID, Channel, PROTOCOL_TCP, 0); Net_startChannelStream(User_ID, Channel, 0); --流程3 Net_registerChannelStreamCallback(User_ID, Channel, CallBack, nil); end; procedure TRealCaptureView.SetNetPlayTime; var rtime: tmsg_time_t; begin rtime.YEAR := YearOf(Now); rtime.MONTH := MonthOf(Now); rtime.DAY := DayOf(Now); rtime.HOUR := HourOf(Now); rtime.MINUTE := MinuteOf(Now); rtime.SECOND := SecondOf(Now); if User_ID > 0 then begin Net_setSystemTime(user_id, rtime); end; end; procedure TRealCaptureView.ButtonCaptureClick(Sender: TObject); begin //抓拍图片代码 无参考价值 end; procedure TRealCaptureView.TimerHeartBeatTimer(Sender: TObject); begin Net_getHeartbeatStatus(User_ID); end; end.
孤独de猫 2013-09-26
  • 打赏
  • 举报
回复
你用的Delphi是什么版本?注意C++的类型 与Delphi的类型有所不同,具体请参考“万一博客”的类型表。你用的是哪家的设备?海康?大华?还是其他?登录函数,返回的值,可以参考SDK,一般情况下是按照1,2,3,4这样的顺序。若有其他问题,可以给我发电邮:ch2001023@sina.com
浩南_哥 2013-09-25
  • 打赏
  • 举报
回复
应该是对的 不行的话,你可以调用一下H264_DVR_GetDevConfig获取下设备的参数,如果成功了,loginID就是对的。
yunankuangke 2013-09-25
  • 打赏
  • 举报
回复
代码跟踪了,能正确获取 设备信息。但是登录函数 返回值是一个很大的随机数。应该是登录成功了。
此外,视频监控这块
realplayhandle := H264_DVR_RealPlay(LoginID,lpClientInfo);调用完后,界面不显示图像
楼上说的流程,我看了厂家VC++写的DEMO实例里没看到。
请楼上的 把您的源码给我发一份,我的邮箱是:yunankuangke@163.com,在此十分感谢!
yunankuangke 2013-09-24
  • 打赏
  • 举报
回复
function H264_DVR_Login(strDVRIP: Pchar; wDVRPort: WORD; strUserName: Pchar; strPassword: Pchar; aDeviceInfo: LPH264_DVR_DEVICEINFO; error:Pinteger;Style:SocketStyle=TCPSOCKET):LongInt;stdcall; External ALS_NET_SDK; 调用时 loginID := H264_DVR_Login('192.168.1.10',34567,'admin','',@deviceinfo,@error,TCPSOCKET); 这个编译通过。但是 返回的 loginID 是一个很大的随机数。不知道是否正确?
yunankuangke 2013-09-24
  • 打赏
  • 举报
回复
H264_DVR_DEVICEINFO = record
...
end;
LPH264_DVR_DEVICEINFO = ^H264_DVR_DEVICEINFO;
deviceinfo:LPH264_DVR_DEVICEINFO;

function H264_DVR_Login(strDVRIP: Pchar; wDVRPort: WORD; strUserName: Pchar; strPassword: Pchar; var aDeviceInfo: H264_DVR_DEVICEINFO; error:Pinteger;Style:SocketStyle=TCPSOCKET):LongInt;stdcall; External ALS_NET_SDK;
调用时候:loginID :=
H264_DVR_Login('192.168.1.10',34567,'admin','',@deviceinfo,@error,TCPSOCKET);
或loginID :=
H264_DVR_Login('192.168.1.10',34567,'admin','',deviceinfo,@error,TCPSOCKET);

均编译不通过啊?请大侠帮看看,谢谢
浩南_哥 2013-09-24
  • 打赏
  • 举报
回复
我这只有官方给的Demo,没有Delphi的。 你的流程不对,只调用H264_DVR_RealPlay是不行的。 应该是网络库和播放库一起用的。大致流程如下: 1、H264_DVR_Login 2、H264_DVR_RealPlay (1)返回成功时需要设置视频帧回调:H264_DVR_SetRealDataCallBack_V2 3、H264_PLAY_OpenStream 开启流模式 4、H264_PLAY_Play 5、在H264_DVR_SetRealDataCallBack_V2函数设置的回调函数里面将网络过来的视频帧 放入播放库中。H264_PLAY_InputData PS:H264_DVR_RealPlay第二个参数是指针,你应该取lpClientInfo的地址,在传入。或者是 将lpClientInfo声明成LPH264_DVR_CLIENTINFO
yunankuangke 2013-09-24
  • 打赏
  • 举报
回复
有demo是VC++的,楼上的哥们有 DELPHI的DEMO吗?有的话,给我传分,我给你积分,十分感谢! var lpClientInfo:H264_DVR_CLIENTINFO; begin lpClientInfo.nChannel := VideoWin.Selected; lpClientInfo.nStream := 0; lpClientInfo.nMode := 0; //lpClientInfo.hWnd := 这个没赋值 realplayhandle := H264_DVR_RealPlay(LoginID,lpClientInfo); end; 还有realplayhandle := H264_DVR_RealPlay(LoginID,lpClientInfo);调用完后,界面不显示图像
浩南_哥 2013-09-24
  • 打赏
  • 举报
回复
long H264_DVR_RealPlay(long lLoginID, LPH264_DVR_CLIENTINFO lpClientInfo); 首先这个函数是两个参数,不知道你为什么要给他三个参数。 其次第二个参数是指针,你传个0进去,不崩溃才怪
yunankuangke 2013-09-24
  • 打赏
  • 举报
回复
H264_DVR_RealPlay C++代码为: long H264_DVR_RealPlay(long lLoginID, LPH264_DVR_CLIENTINFO lpClientInfo); 变成delphi 代码为 function H264_DVR_RealPlay(aLoginID: LongInt; aChannelID: Integer;aWnd: HWND): LongInt; stdcall external ALS_NET_SDK; 不知道是否有问题? 在调用处:realplayhandle := H264_DVR_RealPlay(LoginID,0,VideoWin.Handle); 报错,如右图所示:,请大侠们指教。谢谢
浩南_哥 2013-09-24
  • 打赏
  • 举报
回复
应该有Demo的,Demo能登录上吗?
yunankuangke 2013-09-24
  • 打赏
  • 举报
回复
H264_DVR_GetLastError 返回值为 0
浩南_哥 2013-09-24
  • 打赏
  • 举报
回复
H264_DVR_GetLastError 看下返回值

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧