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

解决方案 »

  1.   

    H264_DVR_GetLastError 看下返回值
      

  2.   

    H264_DVR_GetLastError  返回值为 0
      

  3.   

    应该有Demo的,Demo能登录上吗?
      

  4.   

    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);
    报错,如右图所示:,请大侠们指教。谢谢
      

  5.   

    long H264_DVR_RealPlay(long lLoginID, LPH264_DVR_CLIENTINFO lpClientInfo); 
    首先这个函数是两个参数,不知道你为什么要给他三个参数。
    其次第二个参数是指针,你传个0进去,不崩溃才怪
      

  6.   

    有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);调用完后,界面不显示图像 
      

  7.   

    我这只有官方给的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_InputDataPS:H264_DVR_RealPlay第二个参数是指针,你应该取lpClientInfo的地址,在传入。或者是
    将lpClientInfo声明成LPH264_DVR_CLIENTINFO
      

  8.   

       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);均编译不通过啊?请大侠帮看看,谢谢
      

  9.   

    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 是一个很大的随机数。不知道是否正确?
      

  10.   

    应该是对的
    不行的话,你可以调用一下H264_DVR_GetDevConfig获取下设备的参数,如果成功了,loginID就是对的。
      

  11.   

    代码跟踪了,能正确获取 设备信息。但是登录函数 返回值是一个很大的随机数。应该是登录成功了。
    此外,视频监控这块
    realplayhandle := H264_DVR_RealPlay(LoginID,lpClientInfo);调用完后,界面不显示图像  
    楼上说的流程,我看了厂家VC++写的DEMO实例里没看到。
    请楼上的 把您的源码给我发一份,,在此十分感谢!
      

  12.   

    你用的Delphi是什么版本?注意C++的类型 与Delphi的类型有所不同,具体请参考“万一博客”的类型表。你用的是哪家的设备?海康?大华?还是其他?登录函数,返回的值,可以参考SDK,一般情况下是按照1,2,3,4这样的顺序。若有其他问题,可以给我发电邮:[email protected]
      

  13.   

    刚刚做完2个项目 设备是拓普威视的 流程和上面几位说的一样 DEMO也是C++的 没有DELPHI 我自己转换过来 注意两点 1、回调函数 2、设置一个时钟(或子线程)调用心跳函数 具体代码如下:库函数(由C++转换)
    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.
      

  14.   

    哥们,我想要的是,登录、播放以及抓图部分的C++转DELPHI代码。