my32144 2023-03-22 09:24 采纳率: 0%
浏览 140
已结题

在linux上调用海康SDK没有进入函数内

开发语言java
把海康威视 ISUP SDK linux demo的部分代码移到自己的项目里了
但在走到预览监听的时候,判断成功后没有进new FPREVIEW_NEWLINK_CB中,包括FPREVIEW_NEWLINK_CB预览数据回调参数也没有进去
在日志里没有看到函数里的打印输出,想知道这是怎么回事,有没有什么解决方法


    public void startRealPlayListen() {
            //预览监听
            if (fPREVIEW_NEWLINK_CB == null) {
                fPREVIEW_NEWLINK_CB = new FPREVIEW_NEWLINK_CB();
            }
            System.arraycopy(propertiesUtil.readValue("SmsServerListenIP").getBytes(), 0, struPreviewListen.struIPAdress.szIP, 0, propertiesUtil.readValue("SmsServerListenIP").length());
            struPreviewListen.struIPAdress.wPort = Short.parseShort(propertiesUtil.readValue("SmsServerListenPort")); //流媒体服务器监听端口
            struPreviewListen.fnNewLinkCB = fPREVIEW_NEWLINK_CB; //预览连接请求回调函数
            struPreviewListen.pUser = null;
            struPreviewListen.byLinkMode = 1; //0- TCP方式,1- UDP方式
            struPreviewListen.write();

            if (StreamHandle < 0) {
                StreamHandle = hCEhomeStream.NET_ESTREAM_StartListenPreview(struPreviewListen);
                if (StreamHandle == -1) {

                    System.out.println("NET_ESTREAM_StartListenPreview failed, error code:" + hCEhomeStream.NET_ESTREAM_GetLastError());
                    hCEhomeStream.NET_ESTREAM_Fini();
                    return;
                } else {
                    String StreamListenInfo = new String(struPreviewListen.struIPAdress.szIP).trim() + "_" + struPreviewListen.struIPAdress.wPort;
                    System.out.println("流媒体服务:" + StreamListenInfo + ",NET_ESTREAM_StartListenPreview succeed");
                }
            }
        }

FPREVIEW_NEWLINK_CB代码如下:

public class FPREVIEW_NEWLINK_CB implements HCISUPStream.PREVIEW_NEWLINK_CB {
        @Override
        public boolean invoke(int lLinkHandle, HCISUPStream.NET_EHOME_NEWLINK_CB_MSG pNewLinkCBMsg, Pointer pUserData) {
            System.out.println("FPREVIEW_NEWLINK_CB callback");
            log.info("FPREVIEW_NEWLINK_CB callback");
            //预览数据回调参数
            lPreviewHandle = lLinkHandle;
            HCISUPStream.NET_EHOME_PREVIEW_DATA_CB_PARAM struDataCB = new HCISUPStream.NET_EHOME_PREVIEW_DATA_CB_PARAM();
            if (fPREVIEW_DATA_CB == null) {
                fPREVIEW_DATA_CB = new FPREVIEW_DATA_CB();
            }
            struDataCB.fnPreviewDataCB = fPREVIEW_DATA_CB;

            if (!hCEhomeStream.NET_ESTREAM_SetPreviewDataCB(lLinkHandle, struDataCB)) {
                System.out.println("NET_ESTREAM_SetPreviewDataCB failed err::" + hCEhomeStream.NET_ESTREAM_GetLastError());
                return false;
            }
            return true;
        }
    }

调用的HCISUPStream.PREVIEW_NEWLINK_CB


public interface PREVIEW_NEWLINK_CB extends Callback {
        public boolean invoke(int lLinkHandle, NET_EHOME_NEWLINK_CB_MSG pNewLinkCBMsg, Pointer pUserData);
    }
  • 写回答

7条回答 默认 最新

  • 於黾 2023-03-22 09:33
    关注
    获得15.00元问题酬金

    fPREVIEW_NEWLINK_CB 里没有构造函数,所以new了什么代码也不执行,只是创建了一个对象
    而invoke要调用的时候才会执行呀
    我不知道具体你这里是注册了个什么事件
    我们之前用海康自动识别车牌功能的摄像头的时候,是识别到车牌就会自动调用回调函数
    你应该先确定这个事件触发了没有

    评论

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 修改了问题 3月22日
  • 创建了问题 3月22日