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返回的值不对,请各位大侠指教,谢谢!delphi
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返回的值不对,请各位大侠指教,谢谢!delphi
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);
报错,如右图所示:,请大侠们指教。谢谢
首先这个函数是两个参数,不知道你为什么要给他三个参数。
其次第二个参数是指针,你传个0进去,不崩溃才怪
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);调用完后,界面不显示图像
你的流程不对,只调用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_InputDataPS:H264_DVR_RealPlay第二个参数是指针,你应该取lpClientInfo的地址,在传入。或者是
将lpClientInfo声明成LPH264_DVR_CLIENTINFO
...
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);均编译不通过啊?请大侠帮看看,谢谢
调用时 loginID :=
H264_DVR_Login('192.168.1.10',34567,'admin','',@deviceinfo,@error,TCPSOCKET);
这个编译通过。但是 返回的 loginID 是一个很大的随机数。不知道是否正确?
不行的话,你可以调用一下H264_DVR_GetDevConfig获取下设备的参数,如果成功了,loginID就是对的。
此外,视频监控这块
realplayhandle := H264_DVR_RealPlay(LoginID,lpClientInfo);调用完后,界面不显示图像
楼上说的流程,我看了厂家VC++写的DEMO实例里没看到。
请楼上的 把您的源码给我发一份,,在此十分感谢!
unit NetPlay.System.NetPlayLibrary;interfaceconst
PROTOCOL_TCP = 1;
PROTOCOL_UDP = 2; PLAY_NETSTREAM_TYPE = 2; //网络实时流typeTmsg_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';
implementationend.应用代码unit NetPlay.View.RealCaptureView;interfaceuses
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;implementationuses ....;//无参考价值{$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.