是海康卡的SDK
就是翻译成delphi版的pas原来没有做过这些,完全弄不懂谁能帮我翻译一下sdk下载
http://prj.csdn.net/upfile/adjunct/2010_02_04_201939579.rar
x-flashboy[ a ]163.com

解决方案 »

  1.   

    这个东西?
    http://www.prowt.com/soft/showsoft.asp?id=44
      

  2.   

    只要翻译
    HIKS_CreatePlayer
    HIKS_OpenURL
    这两个函数就可以了
      

  3.   

    这个是函数介绍
    CLIENT_API HSESSION __stdcall
    HIKS_CreatePlayer(IHikClientAdviseSink* pSink, void* pWndSiteHandle,
    pDataRec pRecFunc, pMsgBack pMsgFunc=0, int TransMethod=0)
    作用:创建Player。pSink 为回调函数集合类指针, pWndSiteHandle 为显示
    窗口句柄,cfun 为回调函数指针。如果pWndSiteHandle 是否为NULL 表示是否
    被实时播放,如果pWndSiteHandle 为NULL,表示不被实时播放。cfun 指向处
    理数据录像的函数,如果cfun 为NULL,表示不录像。pMsgFunc 为消息回调函
    数句柄,它的功能和第一个参数pSink 表示的回调函数集合的功能一致,只不过
    采用了不同形式,pMsgFunc 和pSink 不能同时为null。TransMethod 表示媒体
    数据传输的方式,0 表示TCP,1 表示UDP,默认为TCP 传输,但如果在局域
    网环境下,建议使用UDP。
    回调函数:(i) IHikClientAdviseSink 形式见2.2.2 回调函数集的说明。
    (ii) pDataRec typedef int (__stdcall *pDataRec)(int sid, int iusrdata, int
    idatatype, char* pdata, int ilen)。sid 表示Session ID。iusrdata 暂时无用处。idatatype
    表示回调上来的数据类型,0 表示头数据,1 表示流媒体数据。pdata 是回调上
    来的数据的指针。ilen 表示数据的大小。
    (iii) pMsgBack typedef int (__stdcall *pMsgBack)(int sid, int opt, int param1,
    int param2)。Sid 表示SessionID。opt 表示消息类型。param1 和param2 视消息
    的类型决定其有效性。不同的opt 对应了回调函数集IHikClientAdviseSink 中不
    同的回调函数:
    opt 回调函数 param1 param2
    1 OnPosLength nLength 无效
    2 OnPresentationOpened success 无效
    3 OnPresentationClosed 无效 无效
    4 OnPreSeek uOldTime uNewTime
    5 OnPostSeek uOldTime uNewTime
    6 OnStop 无效 无效
    7 OnPause uTime 无效
    8 OnBegin uTime 无效
    9 OnRandomBegin uTime 无效
    10 OnContacting pszHost 无效
    11 OnPutErrorMsg pError 无效
    12 OnBuffering uFlag uPercentComplete
    13 OnChangeRate flag 无效
    14 OnDisconnect 无效 无效
    返回值:成功返回新建Player 的标示(int 类型,>=0),失败返回-1。
    CLIENT_API int __stdcall HIKS_OpenURL(HSESSION hSession,const
    char* pszURL,int iusrdata)
    作用:根据URL,连接服务器。hSession 是Player 的标示,应该设置为
    HIKS_CreatePlayer 成功返回的新建Player 的标示, pszURL 即为服务器的地址,
    iusrdata 为用户数据。
    返回值:成功返回1,失败返回-1。
      

  4.   

    楼主还是边翻译边问吧,海康的把sdk翻译好了就行了,其他的只是调用而已。
      

  5.   

    HIKS_CreatePlayer 
    HIKS_OpenURL 其他的我都翻译好了,这是这两个不会
      

  6.   

    function HIKS_OpenURL(m_hSession:HSESSION;const pszURL:PChar;iusrdata:Integer):integer;stdcall; HIKS_CreatePlayer 没看到原型
      

  7.   


    type
      pDataRec = function (sID, iUsrdata, iDataType: Longint;  pData: PByte;  iLen: Longint): Longint;  stdcall;
      pMsgBack = function (sID, opt, param1, param2: Longint): Longint;  stdcall;function  HIKS_CreatePlayer(pSink: Pointer;  pWndSiteHandle: HWND;  pRecFunc: pDataRec;
                  pMsgFunc: pMsgBack = nil;  TransMethod: Longint = 0): Longint;  stdcall;  external 'client.dll';function  HIKS_OpenURL(hSession: Longint;  pszURL: PChar;  iusrdata: Longint): Longint;  stdcall;  external 'client.dll';
      

  8.   

    这两个函数是海康视频中间件的SDK中的, 这套SDK使用起来并不象看上去那么好用,有不少Bug。
      

  9.   

    jadeluo,问一下这样掉用对不对呢?
    最后的nRet是返回[-1]
    是不是那里写错了?==============================================procedure TForm1.Button3Click(Sender: TObject);
    var
      m_hSession,nRet:Integer;
    begin
      InitStreamClientLib();
      m_hSession:=HIKS_CreatePlayer(Panel1,Panel1.Handle,nil);  Application.MessageBox(PChar(IntToStr(m_hSession)), '提示', MB_OK);  nRet:=HIKS_OpenURL(m_hSession,'rtsp://192.168.1.111:554/127.0.0.1:5050:HIK-Cards:0:0:admin:12345/av_stream',0);  Application.MessageBox(PChar(IntToStr(nRet)), '提示', MB_OK);
    end;
      

  10.   

    jadeluo,你有没有示例程序呢,能不能发给我一份?x-flashboy[ a ]163.com
      

  11.   

    m_hSession:=HIKS_CreatePlayer(Panel1,Panel1.Handle,nil); 这个调用的参数不对。function  HIKS_CreatePlayer(pSink: Pointer;  pWndSiteHandle: HWND;  pRecFunc: pDataRec;
                  pMsgFunc: pMsgBack = nil;  TransMethod: Longint = 0): Longint;  stdcall;  external 'client.dll';
    //作用:创建Player。
    //参数:
    //  pSink 为回调函数集合类指针
    //  pWndSiteHandle 为显示窗口句柄
    //  cfun 为回调函数指针。如果pWndSiteHandle 是否为Nil 表示是否被实时播放,如果pWndSiteHandle 为Nil,表示不被实时播放。
    //  cfun 指向处理数据录像的函数,如果cfun 为Nil,表示不录像。
    //  pMsgFunc 为消息回调函数句柄,它的功能和第一个参数pSink 表示的回调函数集合的功能一致,只不过
    //           采用了不同形式,pMsgFunc 和pSink 不能同时为Nil。
    //  TransMethod 表示媒体数据传输的方式,0 表示TCP,1 表示UDP,默认为TCP 传输,但如果在局域网环境下,建议使用UDP。
    //返回值:成功返回新建Player 的标示(int 类型,>=0),失败返回-1。}你要么实现一个pSink, 要么实现一个pMsgFunc, 必选其一。
    这个pSink在Delphi里我也不知道该如何实现,所以还是实现一个pMsgFunc吧。m_hSession := HIKS_CreatePlayer(nil, Panel1.Handle, nil, @MyMsgBack); ......function MyMsgBack(sID, opt, param1, param2: Longint): Longint;  stdcall;
    begin
      //这里需要对回调消息进行处理
      Result := 0;
    end;
      

  12.   

    BTW, 这套SDK,在异常情况处理上,相当麻烦。
      

  13.   

    试了一下还是不行,如过用HIKS_CreatePlayer(nil, Panel1.Handle, nil, @MyMsgBack); 
    的话,在服务端没有连接的提示,如果用
    HIKS_CreatePlayer(Sender, Panel1.Handle, nil, @MyMsgBack); 
    服务端会提示[加入],不过过了一些时间提示[退出]连接是用:
    nRet:=HIKS_OpenURL(m_hSession,'rtsp://192.168.1.111:554/127.0.0.1:5050:HIK-Cards:0:0:admin:12345/av_stream',0);是不是已经成功连接,只是读取数据不对呢?
    jadeluo能不能写一个实例呢,太谢谢你了