mobile CCTV,mobile surveillance,police body worn cameras

 forgetPW
 registerNow
search
view: 1598|reply: 9
打印 prevThread nextThread

SmartEye监视器查询到PU端的文件列表失败

[copyURL]

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
jumpTo
owner
poston 2018-9-29 10:30 | authorOnly 回帖奖励 |倒序浏览 |阅读模式

如题所述,SmartEye监视器中查询文件列表,提示连接失败,但实际有来获取查询数据,请问下,这种情况如何解释,可能是哪里出现了问题,谢谢。




实际获取文件列表的打印如下:
(PUMNG_OnCommand-1078:3): BVCU_SUBMETHOD_SEARCH_LIST
(pu_search_list-103:3): SearchInfo : iType[1], iPostition[0], iCount[128], iTotalCount[0]
(pu_search_list-173:3): szFilePath[0] : [/app/sd/000001/Photo/20180929_10084700.JPG]
(pu_search_list-173:3): szFilePath[1] : [/app/sd/000001/Photo/20180929_10084600.JPG]
(pu_search_list-173:3): szFilePath[2] : [/app/sd/000001/Photo/20180929_10084300.JPG]
(pu_search_list-173:3): szFilePath[3] : [/app/sd/000001/Photo/20180929_10084200.JPG]
(pu_search_list-177:3): u32FileCount = 4



相关获取文件列表的源码片段:
/**
* 索引文件(记录等)
* @param[in] hSession: BVCSP_Login返回的登录Session.
* @param[in] pCommand: 需要发送的命令。
* @param[in or out] pParam: 命令参数。
* @return: 常见返回值
*        BVCU_RESULT_S_OK: 调用正确完成。结果通过OnEvent通知调用者。
*        BVCU_RESULT_E_NOTEXIST: 登录Session不存在,即未登录
*        BVCU_RESULT_E_BADSTATE: 库没有初始化成功。
* @note: 索引文件(记录等)。输入类型:BVCU_Search_Request 输出类型:BVCU_Search_Response
*        如:BVCU_Search_Request *pRequest = (BVCU_Search_Request *)pCommand->stMsgContent.pData;
*/
BVCU_Result pu_search_list(BVCSP_HSession hSession, BVCSP_Command* pCommand, BVCSP_Event_SessionCmd* pParam)
{
    PU_CHECK_POINTER(pCommand);
    PU_CHECK_POINTER(pParam);

    const HI_CHAR *pCurFileName;
    BVCU_Search_Request *pRequest = (BVCU_Search_Request *)pCommand->stMsgContent.pData;
    HI_S32 s32Ret = HI_FAILURE;
    BVCU_Search_FileInfo stFileInfo[128]; /* 最大128个文件, 应 >= pRequest->stSearchInfo.iCount , 临时调试 */
    memset(stFileInfo, 0x0, sizeof(stFileInfo));
    BVCU_Search_Response stResponse;
    memset(&stResponse, 0x0, sizeof(stResponse));
    HI_U32 u32FileCount = 0;
    HI_U32 u32Idx = 0;
    HI_CHAR azFileName[256] = {0};
    HI_CHAR azTmpFileName[256] = {0};
    HI_CHAR azFilePerfixName[256] = {0};
    BVCU_Result enResult = BVCU_RESULT_S_OK;
    BVCSP_SessionInfo stSessionInfo;
    memset(&stSessionInfo, 0, sizeof(stSessionInfo));
    struct stat stBuf;


    MLOGD("SearchInfo : iType[%d], iPostition[%d], iCount[%d], iTotalCount[%d]\n", pRequest->stSearchInfo.iType, pRequest->stSearchInfo.iPostition,
            pRequest->stSearchInfo.iCount, pRequest->stSearchInfo.iTotalCount);

    /*
    *   TODO: Get file list by type
    */
    if (BVCU_SEARCH_TYPE_FILE == pRequest->stSearchInfo.iType)
    {
        s32Ret = HI_PDT_FileMng_GetFileCount_By_DirType(&u32FileCount, DTCF_DIR_PHOTO);
        if (s32Ret != HI_SUCCESS)
        {
            u32FileCount = 0;
            MLOGE("HI_PDT_FileMng_GetGroupCount failed\n");
        }

        if (u32FileCount > pRequest->stSearchInfo.iCount)
        {
            u32FileCount = pRequest->stSearchInfo.iCount;
        }

        for (u32Idx = 0; u32Idx < u32FileCount; u32Idx ++)
        {
            memset(azFileName, 0x0, sizeof(azFileName));
            s32Ret = HI_PDT_FileMng_GetFileByIndex(u32Idx, azFileName, sizeof(azFileName));
            if (s32Ret != HI_SUCCESS)
            {
                MLOGW("HI_PDT_FileMng_GetFileByIndex failed\n");
            }

            stFileInfo[u32Idx].iRecordType = BVCU_STORAGE_RECORDTYPE_MANUAL;
            stFileInfo[u32Idx].iFileType = BVCU_STORAGE_FILE_TYPE_ALL;
            stFileInfo[u32Idx].iFileSize = search_get_filesize(azFileName);
            stFileInfo[u32Idx].iRecordID = (u32Idx + 1);

            stat(azFileName, &stBuf);
            stFileInfo[u32Idx].iTimeBegin = stBuf.st_mtime;
            stFileInfo[u32Idx].iTimeRecord = 0;
            sprintf(stFileInfo[u32Idx].szFilePath, "%s", azFileName);

            extern BVCSP_HSession g_hSession;
            enResult = BVCSP_GetSessionInfo(g_hSession, &stSessionInfo);
            if (BVCU_Result_FAILED(enResult))
            {
                sprintf(stFileInfo[u32Idx].szSourceID, "PU_%s", BVCSP_CLIENT_ID);
                MLOGW("BVCSP_GetSessionInfo fail! %d\n", enResult);
            }
            else
            {
                strcpy(stFileInfo[u32Idx].szSourceID, stSessionInfo.stParam.szClientID);
            }

            MLOGD("szFilePath[%d] : [%s]\n", u32Idx, stFileInfo[u32Idx].szFilePath);
        }

        stResponse.iCount = (0 == u32FileCount) ? 1 : u32FileCount;
        MLOGD("u32FileCount = %d\n", u32FileCount);

        memcpy(&stResponse.stSearchInfo, &pRequest->stSearchInfo, sizeof(stResponse.stSearchInfo));
        stResponse.pData.pFileInfo = stFileInfo;

        pParam->stContent.iDataCount = stResponse.iCount;
        pParam->stContent.pData = &stResponse;
        pCommand->OnEvent(hSession, pCommand, pParam);
    }

    return BVCU_RESULT_S_OK;
}





本帖子中包含更多资源

pls login 才可以下载或查看,没有帐号?registerNow

x
reply

使用道具 report

0

主题

20

帖子

80

积分

member

Rank: 2

积分
80
sofa
poston 2018-9-29 11:48 | authorOnly
stResponse.stSearchInfo中iCount,iTotalCount需要填写,还有pParam->stContent.iDataCount=1
reply agree Against

使用道具 report

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
bench
 Owner| poston 2018-10-8 20:32 | authorOnly
zhangjun post on2018-9-29 11:48
stResponse.stSearchInfo中iCount,iTotalCount需要填写,还有pParam->stContent.iDataCount=1

您好,按照您的提示,现在改成了如下:
if (BVCU_SEARCH_TYPE_FILE == pRequest->stSearchInfo.iType)
    {
        s32Ret = HI_PDT_FileMng_GetFileCount_By_DirType(&u32FileCount, DTCF_DIR_PHOTO);
        if (s32Ret != HI_SUCCESS)
        {
            u32FileCount = 0;
            MLOGE("HI_PDT_FileMng_GetGroupCount failed\n");
        }

        if (u32FileCount > pRequest->stSearchInfo.iCount)
        {
            u32FileCount = pRequest->stSearchInfo.iCount;
        }

        for (u32Idx = 0; u32Idx < u32FileCount; u32Idx ++)
        {
            memset(azFileName, 0x0, sizeof(azFileName));
            s32Ret = HI_PDT_FileMng_GetFileByIndex(u32Idx, azFileName, sizeof(azFileName));
            if (s32Ret != HI_SUCCESS)
            {
                MLOGW("HI_PDT_FileMng_GetFileByIndex failed\n");
            }

            stFileInfo[u32Idx].iRecordType = BVCU_STORAGE_RECORDTYPE_MANUAL;
            stFileInfo[u32Idx].iFileType = BVCU_STORAGE_FILE_TYPE_CAPTURE;
            stFileInfo[u32Idx].iFileSize = search_get_filesize(azFileName);
            stFileInfo[u32Idx].iRecordID = u32Idx;

            memset(azFilePerfixName, 0x0, sizeof(azFilePerfixName));
            memset(azTmpFileName, 0x0, sizeof(azTmpFileName));

            pCurFileName = strrchr(azFileName, '/');
            if (HI_NULL !=  pCurFileName)
            {               
                pCurFileName ++;
               
                if (0 == strncmp(pCurFileName, "IMP_", 4))
                {
                    memcpy(azTmpFileName, pCurFileName + 4, 17);
                    memcpy(azFilePerfixName, azFileName, strlen(azFileName) - 27);
                }
                else
                {
                    memcpy(azTmpFileName, pCurFileName, 17);
                    memcpy(azFilePerfixName, azFileName, strlen(azFileName) - 23);
                }
            }

            stat(azFileName, &stBuf);
            stFileInfo[u32Idx].iTimeBegin = stBuf.st_mtime;
            stFileInfo[u32Idx].iTimeRecord = 0;
            sprintf(stFileInfo[u32Idx].szFilePath, "%s", azFileName);

            extern BVCSP_HSession g_hSession;
            enResult = BVCSP_GetSessionInfo(g_hSession, &stSessionInfo);
            if (BVCU_Result_FAILED(enResult))
            {
                sprintf(stFileInfo[u32Idx].szSourceID, "PU_%s", BVCSP_CLIENT_ID);
                MLOGW("BVCSP_GetSessionInfo fail! %d\n", enResult);
            }
            else
            {
                strcpy(stFileInfo[u32Idx].szSourceID, stSessionInfo.stParam.szClientID);
            }
            
            MLOGD("szFilePath[%d] : [%s]\n", u32Idx, stFileInfo[u32Idx].szFilePath);
        }

        MLOGD("u32FileCount = %d\n", u32FileCount);
        
        stResponse.iCount = u32FileCount;
        stResponse.pData.pFileInfo = stFileInfo;
        stResponse.stSearchInfo.iCount = u32FileCount;
        stResponse.stSearchInfo.iTotalCount = u32FileCount;
        stResponse.stSearchInfo.iType = BVCU_SEARCH_TYPE_FILE;
        stResponse.stSearchInfo.iPostition = 0;

        pParam->stContent.pData = &stResponse;
        pParam->stContent.iDataCount = 1;
        pCommand->OnEvent(hSession, pCommand, pParam);
    }

打印结果为:
(pu_search_list-173:3): szFilePath[0] : [/app/sd/180920/Photo/20180930_10133700.JPG]
(pu_search_list-173:3): szFilePath[1] : [/app/sd/180920/Photo/20180930_10133600.JPG]
(pu_search_list-173:3): szFilePath[2] : [/app/sd/180920/Photo/20180930_10133400.JPG]
(pu_search_list-176:3): u32FileCount = 3

但是SmartEye监视器在查询时出错:

长度不能小于 0。
参数名: length
   在 System.String.Substring(Int32 startIndex, Int32 length)
   在 SmartEyeMonitor.RecordCheckWorkingArea.refreshDataSheet(ArrayList records)
   在 SmartEyeMonitor.RecordCheckWorkingArea.showRecords(IList records)
   在 SmartEyeMonitor.RecordCheckWorkingArea.RecordCache.show(Int32 iPosition, Int32 iCount)
   在 SmartEyeMonitor.RecordCheckWorkingArea.showSearchRecordFiles(RecordCheckControl recordCheck, String szTargetId, BVCU_SearchInfo searchInfo, BVCU_Search_FileFilter fileFilter, List`1 records, RecordType type)
   在 SmartEyeMonitor.RecordCheckControl.onGetSearchResponse(String szTargetId, BVSearchResponse searchResponse, IntPtr pUserData)
   在 SmartEyeMonitor.InterfaceAdapter.onGetSearchResponse(String szTargetId, BVSearchResponse searchResponse, IntPtr pUserData)
   在 SmartEye.SndCmdEventHandler.procOnGetSearchResponse(BVSearchResponse searchResponse, IntPtr pUserData, String szTargetId)

本帖子中包含更多资源

pls login 才可以下载或查看,没有帐号?registerNow

x
reply agree Against

使用道具 report

0

主题

20

帖子

80

积分

member

Rank: 2

积分
80
ground
poston 2018-10-9 09:38 | authorOnly
看一下文件大小填的是否正确
reply agree Against

使用道具 report

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
5#
 Owner| poston 2018-10-9 09:48 | authorOnly
zhangjun post on2018-10-9 09:38
看一下文件大小填的是否正确

添加打印:
            MLOGD("szFilePath[%d] : [%s], iFileSize [%dByte]\n", u32Idx, stFileInfo[u32Idx].szFilePath, stFileInfo[u32Idx].iFileSize);

文件大小打印如下:
(PUMNG_OnCommand-1088:3): BVCU_SUBMETHOD_SEARCH_LIST
(pu_search_list-103:3): SearchInfo : iType[1], iPostition[0], iCount[128], iTotalCount[0]
(pu_search_list-173:3): szFilePath[0] : [/app/sd/180920/Photo/20180930_10133700.JPG], iFileSize [692825Byte]
(pu_search_list-173:3): szFilePath[1] : [/app/sd/180920/Photo/20180930_10133600.JPG], iFileSize [455184Byte]
(pu_search_list-173:3): szFilePath[2] : [/app/sd/180920/Photo/20180930_10133400.JPG], iFileSize [443861Byte]
(pu_search_list-176:3): u32FileCount = 3

文件大小也是正确的,监视器还是会出错
reply agree Against

使用道具 report

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
6#
 Owner| poston 2018-10-9 15:04 | authorOnly
unionman_li post on2018-10-9 09:48
添加打印:
            MLOGD("szFilePath[%d] : [%s], iFileSize [%dByte]\n", u32Idx, stFileInfo.sz ...

目前发现,文件检索://文件路径 + 文件名。录像(图片)文件名严格要求格式为:"PU_%08X_%02d_xxx.xxx",PUID,channelIndex 或Conf_ID_0_xxx会议录音文件。
    char szFilePath[BVCU_MAX_FILE_NAME_LEN + 1];,格式是否一定要这样要求,库能否做相应处理自动添加

目前我们的命名方式为:20180930_10133600.JPG
要求为:PU_00000001_00_20180930_10133600.JPG

如果我们改动现有命名方式,兼容性很差,且需要改动较多相关设备端和PC端软件
reply agree Against

使用道具 report

1

主题

580

帖子

2003

积分

vipMem

Rank: 6Rank: 6

积分
2003
7#
poston 2018-10-9 15:17 | authorOnly
unionman_li post on2018-10-9 15:04
目前发现,文件检索://文件路径 + 文件名。录像(图片)文件名严格要求格式为:"PU_%08X_%02d_xxx.xxx", ...

您好,库内部不好做处理的,因为如果库内部修改了您传入的文件名,当客户端发下载文件请求时,库如何再映射回原来的文件名呢。
我们的设备端是这样做的,他们的真实文件存储也不是这样的命名格式,上层自己有个文件名映射处理逻辑,根据自己本地的文件名生成满足平台要求的文件名,收到文件下载请求时,上层知道怎么解析成本地的真实存储文件名和路径。
平台格式要求:PU_ID_channelID_日期_时间_xxxx.jpg。xxx为自定义数据,平台不处理。
reply agree Against

使用道具 report

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
8#
 Owner| poston 2018-10-9 15:24 | authorOnly
fanghj90 post on2018-10-9 15:17
您好,库内部不好做处理的,因为如果库内部修改了您传入的文件名,当客户端发下载文件请求时,库如何再映 ...

您好,明白了,您们采用的映射关系,目前我们按照要求给了上述文件名PU_ID_channelID_日期_时间_xxxx.jpg, 实际文件名为xxxx.jpg,如给的是:
(pu_search_list-174:3): szFilePath[1] : [/app/sd/180920/Photo/PU_00000001_00_20180930_10133600.JPG], iFileSize [455184Byte]

实际路径是/app/sd/180920/Photo/20180930_10133600.JPG

现在遇到的问题,下载时,没有任何反应,不能正常下载,不清楚目前这种映射方式是否存在问题


reply agree Against

使用道具 report

6

主题

19

帖子

70

积分

member

Rank: 2

积分
70
9#
 Owner| poston 2018-10-9 15:26 | authorOnly
fanghj90 post on2018-10-9 15:17
您好,库内部不好做处理的,因为如果库内部修改了您传入的文件名,当客户端发下载文件请求时,库如何再映 ...


本帖子中包含更多资源

pls login 才可以下载或查看,没有帐号?registerNow

x
reply agree Against

使用道具 report

1

主题

580

帖子

2003

积分

vipMem

Rank: 6Rank: 6

积分
2003
10#
poston 2018-10-9 16:09 | authorOnly

您好,这里显示的文件名,是客户端去掉设备ID和通道信息后的。
下载文件,发送的是Dialog通道请求,在 OnDialogCmd的回调中处理。
BVCSP_DialogParam.stFileTarget 指向目标文件。
请求通道号 BVCU_SUBDEV_INDEXMAJOR_DOWNLOAD 表示下载文件;BVCU_SUBDEV_INDEXMAJOR_PLAYBACK表示在线回放。
reply agree Against

使用道具 report

creditRule

QQ|wireless surveillance

GMT+8, 2024-5-17 13:29 , Processed in 0.064455 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

QuickReply backToTop BackToList