mobile CCTV,mobile surveillance,police body worn cameras

标题: 适配BVCSP.h接口出现问题 [打印本页]

author: meige    time: 2019-6-3 11:48
标题: 适配BVCSP.h接口出现问题
获取libbvcsp.so 库里方法出现以下问题:
slb789:/system/bin # ./meig_demo
open lib error
dlopen failed: library "libiconv.so" not found


author: xuwei    time: 2019-6-3 12:00
依赖iconv.so在附件中

author: meige    time: 2019-6-3 12:11
初始化时报下面错误:
open initialize success
[1970/01/01 08:53:35:5124] NOTICE: libwebsockets version: 3.1.0 unknown-build-hash
BVCSP���ʼ���ɹ�
author: meige    time: 2019-6-3 15:51
1.请问下,BVCSP_Dialog_Open是用于cu端,BVCSP_Dialog_Write是用于pu端,向会话通道中写数据,是吗?
2.我们这边是开发pu端的,是不是会话相关,我这边只需关注被动打开和关闭会话,主动打开和关闭会话不需要关注。
3.能否提供演示的demo代码。
author: xuwei    time: 2019-6-3 16:09
meige post on2019-6-3 15:51
1.请问下,BVCSP_Dialog_Open是用于cu端,BVCSP_Dialog_Write是用于pu端,向会话通道中写数据,是吗?
2. ...

是的,pu端不需要关注主动会话,demo的话,这边只有最简单的注册,其他功能需要参照开发手册来开发
author: meige    time: 2019-6-3 16:20
#include "au_rsa.h" 这个头文件找不到,能否提供下,谢谢!

author: xuwei    time: 2019-6-3 16:27
meige post on2019-6-3 16:20
#include "au_rsa.h" 这个头文件找不到,能否提供下,谢谢!

哪个头文件用到的?
author: meige    time: 2019-6-3 16:42
在开发手册-->功能演示——>会话相关-->被动打开和关闭会话里,认证方法有要求该au_rsa.h。
author: Arthur    time: 2019-6-3 17:05
au_rsa.h

author: Arthur    time: 2019-6-3 17:24
可能还需要编译cpp文件。一起打包了一下。

author: meige    time: 2019-6-3 18:11
问下,编译时
#include <openssl/bn.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/md5.h>
头文件都找不到,怎么解,谢谢!

author: xuwei    time: 2019-6-4 09:17
meige post on2019-6-3 18:11
问下,编译时
#include
#include

这些属于开源库代码,可以下载自己编译
author: xuwei    time: 2019-6-4 09:26
meige post on2019-6-3 18:11
问下,编译时
#include
#include

头文件见附件

author: meige    time: 2019-6-4 10:55
这是打log的代码:
int au_rsa_encrypt(AU_RSA * pubkey, char * src, int src_len, char * dst, int dst_len)
{
    int rc = -1;
    int elen = -1, i = -1, offset = 0;
    int count = 0, remain = 0;
    char* cipper = NULL;
    unsigned char* from = NULL;
    unsigned char* to = NULL;
    size_t reserveSize = 0;
    printf("au_rsa_encrypt src=, %s\n", src);
    printf("au_rsa_encrypt src_len=, %d\n", src_len);
    printf("au_rsa_encrypt dst=, %s\n", dst);
    printf("au_rsa_encrypt dst_len=, %d\n", dst_len);
    int RSA_LEN = RSA_size((RSA*)pubkey); // 512 = 4096 / 8
    int FLEN_MAX = RSA_LEN - RSA_PKCS1_PADDING_SIZE;
    printf("au_rsa_encrypt RSA_LEN=, %d\n", RSA_LEN);
    printf("au_rsa_encrypt RSA_PKCS1_PADDING_SIZE=, %d\n", RSA_PKCS1_PADDING_SIZE);
    if (FLEN_MAX <= 0) {
        printf("FLEN_MAX <= 0, %d\n", FLEN_MAX);
        rc = -1;
        goto out_label;
    }
输出的log:
0xefd366c0
moKxoSB&qUorj0#GbxQV6xBF#96sb@
30
au_rsa_encrypt src=, moKxoSB&qUorj0#GbxQV6xBF#96sb@
au_rsa_encrypt src_len=, 30
au_rsa_encrypt dst=,
au_rsa_encrypt dst_len=, 512
au_rsa_encrypt RSA_LEN=, 9
au_rsa_encrypt RSA_PKCS1_PADDING_SIZE=, 11
FLEN_MAX <= 0, -2
au_rsa_encrypt success -1

加密失败。
author: Arthur    time: 2019-6-4 11:15
meige post on2019-6-4 10:55
这是打log的代码:
int au_rsa_encrypt(AU_RSA * pubkey, char * src, int src_len, char * dst, int dst_ ...

au_rsa_key_get_hex里的参数都是多少
author: meige    time: 2019-6-4 11:37
// 这里的密钥是公司提供的开发者账号

     AU_RSA* auRsa = nullptr;

     char* n = "b1d6ad586dcd1ca6dafb688c590e20c9";

     char* e = "830e7aa952a4f991";

     au_rsa_init();

     au_rsa_key_get_hex(&auRsa, n, e, NULL);

author: Arthur    time: 2019-6-4 12:12
meige post on2019-6-4 11:37
// 这里的密钥是公司提供的开发者账号

     AU_RSA* auRsa = nullptr;

好。我看到了。你把这一楼层重新编辑下,删掉。
author: Arthur    time: 2019-6-4 12:50
不用au_rsa接口了,尝试下直接调用。

author: meige    time: 2019-6-4 14:38
利用你给的方法认证已经成功了,但是登入不成功,这是是否要你那边授权。
}  

285 void OnAuthEvent(struct BVRAuthParam* param, enum BVRAuthResult result, enum BVRPermission* permission, int pemsCount)  

286 {  

287     if (AUTH_RResult_Register_Wait == result) {  

288         BVCU_Result bvResult = BVCSP_Trial(param->tagInfo.AuthCode);  

289         if (BVCU_Result_SUCCEEDED(bvResult)) {  

290             printf("申请试用成功\n");  

291             g_bAuthed = TRUE;  

292         }  

293         else {  

294             printf("申请使用失败\n");  

295             g_bAuthed = FALSE;  

296         }  

297         SetEvent(g_AuthHandle);  

298     }  

299 }  

以上代码不会走。
author: Arthur    time: 2019-6-4 14:49
meige post on2019-6-4 14:38
利用你给的方法认证已经成功了,但是登入不成功,这是是否要你那边授权。
}  

确认调用成功了么,BVCSP_Auth(&param); 返回值多少。
author: Arthur    time: 2019-6-4 14:57
meige post on2019-6-4 14:38
利用你给的方法认证已经成功了,但是登入不成功,这是是否要你那边授权。
}  

BVCSP_Auth 之前有设置回调么。 param.OnAuthEvent = OnAuthEvent;
author: meige    time: 2019-6-4 15:01
BVCSP_Auth(&param);返回值是0;
author: meige    time: 2019-6-4 15:08
有设置回调:
bool AuthPu()

{
     BVRAuthParam authParam;

     memset(&authParam, 0, sizeof(authParam));

     authParam.iSize = sizeof(authParam);

     authParam.OnAuthEvent = OnAuthEvent;

     authParam.OnMessage = OnMessage;
author: tony258    time: 2019-6-4 15:33
meige post on2019-6-4 15:08
有设置回调:
bool AuthPu()

你好, 你看一下控制台的打印信息,服务器端没有收到你的连接信息
author: tony258    time: 2019-6-4 15:39
tony258 post on2019-6-4 15:33
你好, 你看一下控制台的打印信息,服务器端没有收到你的连接信息

或者提供下你的出口IP   (https://www.baidu.com/s?wd=ip
author: meige    time: 2019-6-4 15:47
本机IP: 116.247.69.94上海市上海市 电信,192.168.0.175来自本地局域网
author: meige    time: 2019-6-4 15:49
BVCSP so init success
Login success
-65522
AuthPu start
GetEncryptedData success
0
open EncryptData bvReulst =
BVCSP_Auth start
[D] [06-04 15:48:15] [push:1037] auth randcode: 640344
BVCSP_Auth success
0
Authentication Interface Call Successful n[D] [06-04 15:48:15] [connect:0217] connect 47.107.87.21 : 18866 ...
author: tony258    time: 2019-6-4 16:05
meige post on2019-6-4 15:49
BVCSP so init success
Login success
-65522

可能是你的网络无法访问47.107.87.21:18866, 我们先确定网络通畅,你通过工具试试, 如 [attach]1807[/attach]
author: meige    time: 2019-6-4 16:08
//HANDLE g_LoginEvent = nullptr;

bool g_Logined = false;

//HANDLE g_AuthHandle = nullptr;
你好,因为HANDLE对象没有,window.h头文件也找不到,我把这个相关代码删除了,是否会跟这个有关。
author: tony258    time: 2019-6-4 16:14
meige post on2019-6-4 16:08
//HANDLE g_LoginEvent = nullptr;

bool g_Logined = false;

demo中没有搜到g_AuthHandle变量, HANDLE类型可以#include <Windows.h>
author: meige    time: 2019-6-4 16:22
我的代码是从你们给的开发手册里-->功能演示-->会话相关-->被动打开和关闭会话,这里考出来的。或者你们能否提供下你们的demo代码?#include <Windows.h>头文件找不到,问下删除上述代码有没有影响.
author: tony258    time: 2019-6-4 16:42
不影响认证. 附件中有个demo,你运行下试试(输入6, 测试认证)
author: meige    time: 2019-6-4 16:46
35;1m[2019/06/04 16:45:18:8337] NOTICE: libwebsockets version: 3.0.1 unknown-build-hash
0U test   1:CU test  2:cmd  3:notify  4:dialog  5:exit  6:auth  7: encode rect
6
[D] [06-04 16:45:24] [WebClient::push:1037] auth randcode: 100041
0U test   1:CU test  2:cmd  3:notify  4:dialog  5:exit  6:auth  7: encode rect
[D] [06-04 16:45:24] [WebClient::connect:0217] connect 47.107.87.21 : 18866 ...
[D] [06-04 16:45:24] [callback_auth:0123] create  LWS_CALLBACK_WSI_CREATE
[D] [06-04 16:45:24] [WebClient::wsOnConnected:0342]
[D] [06-04 16:45:25] [WebClient::wsOnReceive:0476] debug cmd, type: 2, result: 1024, msg: success
[D] [06-04 16:45:25] [WebClient:nRVDecryption:0544] is auth server
[D] [06-04 16:45:25] [WebClient::wsOnReceive:0476] debug cmd, type: 5, result: 1024, msg: success
[D] [06-04 16:45:25] [WebClient:nRVAES:0563] get aes key iv
[I] [06-04 16:45:25] [WebClient::wsOnWriteable:0525] send success
[D] [06-04 16:45:25] [WebClient::wsOnReceive:0476] debug cmd, type: 50, result: 52, msg: auth wait
[D] [06-04 16:45:25] [WebClient:nRVLogin:0662] auth fail: 52, 52, , error: auth wait

---------------
result: 52
rand code: 100041
auth code: 3542
SerialNumber:
issuer:
type: PU
id: PU_12456
user_data: 0
result: auth wait
---------------
### trial 0

[I] [06-04 16:45:25] [WebClient::wsOnWriteable:0525] send success
[D] [06-04 16:45:25] [WebClient::wsOnReceive:0476] debug cmd, type: 54, result: 6, msg: company of meigchina un support trail

---------------
result: 6
rand code: 100041
auth code: 3542
SerialNumber:
issuer:
type: PU
id: PU_12456
user_data: 0
result: company of meigchina un support trail
author: meige    time: 2019-6-4 16:47
我想说下,我们是调试android设备,不是在windows开发。
author: tony258    time: 2019-6-4 16:54
meige post on2019-6-4 16:46
35;1m[2019/06/04 16:45:18:8337] NOTICE: libwebsockets version: 3.0.1 unknown-build-hash
0U te ...

void test_auth()
{
#if ENABLE_AUTH
    BVRAuthParam param;
    memset(&param, 0, sizeof(BVRAuthParam));
    {
        param.iSize = sizeof(BVRAuthParam);
        param.OnAuthEvent = PU_OnAuthEvent;
        strcpy(param.SerialNumber, ""); //
        {
            strcpy(param.termInfo.Type, "PU");
            strcpy(param.termInfo.ID, "PU_12456");
            strcpy(param.termInfo.ModelNumber, "ModelNumber_123");
            strcpy(param.termInfo.MAC, "MAC_14156");
            strcpy(param.termInfo.IMEI, "IMEI_235328965jkljfkl");
            strcpy(param.termInfo.HardwareProvider, "HardwareProvider_sdjgkagjnsjakdfj");
            strcpy(param.termInfo.HardwareSN, "HardwareSN_GHK6BC290E7E4AF4B59DB24B576A8ABJ");
            strcpy(param.termInfo.HardwareVersion, "HardwareVersion_akgjk");
            strcpy(param.termInfo.SoftwareProvider, "SoftwareProvider_sadkgjaskl");
            strcpy(param.termInfo.SoftwareVersion, "SoftwareVersion_sdkgj");
            strcpy(param.termInfo.OSType, "OSType_214ui");
            strcpy(param.termInfo.OSVersion, "OSVersion_sajkdg");
            strcpy(param.termInfo.OSID, "OSID_sdajgk");
            strcpy(param.termInfo.CPU, "CPU_234i");
            strcpy(param.termInfo.Desc, "Desc_ad");
        }
    }
    {
        AU_RSA* rsa = NULL;

        char* app_id = "app_xxxxxxxxxxxxx";
        char* n = "b1d6ad586dxxxxxxxxxxxxxxxxxxxx";
        char* e = "830e7aaxxxxxxxxxxxxxx";
        char data[256];
        int data_len = 0;
        int len = 0;
        char base64[512];
        int base64_len;

        char encrypt[512];
        int encrypt_len = 0;

        data_len = sizeof(data);
        memset(data, 0, sizeof(data));

        encrypt_len = sizeof(encrypt);
        memset(encrypt, 0, sizeof(encrypt));

        base64_len = sizeof(base64);
        memset(base64, 0, sizeof(base64));


        strcpy(param.appInfo.appId, app_id);

        // 获取需要字符串
        BVCSP_GetEncryptedData(data, &data_len);
#if 0
        au_rsa_init();
        au_rsa_key_get_hex(&rsa, n, e, NULL);

        // Base64(RSA(data))
        len = au_rsa_encrypt(rsa, data, data_len, encrypt, encrypt_len);
        if (len > 0)
        {
            base64_len = base64_encode((const unsigned char*)encrypt, len, base64);

            param.appInfo.ciph_data = base64;
            param.appInfo.ciph_len = strlen(base64);
        }

#else
        char outdata[512];
        int outdata_len = sizeof(outdata);
        BVCSP_EncryptData(n, e, data, data_len, outdata, &outdata_len);
        param.appInfo.ciph_data = outdata;
        param.appInfo.ciph_len = outdata_len;
#endif
    }
    BVCSP_Auth(&param);
#endif
}


author: tony258    time: 2019-6-4 16:56
tony258 post on2019-6-4 16:54
void test_auth()
{
#if ENABLE_AUTH

你试试直接调用这个函数, 注意更换app_id, n, e
author: meige    time: 2019-6-4 17:23
你看看是否成功了
[2019/06/04 17:23:08:0859] NOTICE: libwebsockets version: 3.1.0 unknown-build-hash
BVCSP so init success
GetEncryptedData
0
bvEncryptData
0
[D] [06-04 17:23:08] [push:1037] auth randcode: 236801
BVCSP_Auth
0
[D] [06-04 17:23:08] [connect:0217] connect 47.107.87.21 : 18866 ...
[D] [06-04 17:23:08] [callback_auth:0123] create  LWS_CALLBACK_WSI_CREATE
author: tony258    time: 2019-6-4 17:29
meige post on2019-6-4 17:23
你看看是否成功了
[2019/06/04 17:23:08:0859] NOTICE: libwebsockets version: 3.1.0 unknown-build-hash ...

在回调函数中打印
void PU_OnAuthEvent(BVRAuthParam* param, BVRAuthResult result, BVRPermission* permission, int pemsCount)
{
    printf("\n--------------- \n\
result: %d                   \n\
rand code: %d              \n\
auth code: %d              \n\
SerialNumber: %s             \n\
issuer: %s                   \n\
type: %s                     \n\
id: %s                       \n\
user_data: %d                \n\
result: %s                   \n\
---------------\n",
        result,
        param->tagInfo.RandCode,
        param->tagInfo.AuthCode,
        param->SerialNumber,
        param->certInfo.IssueUser,
        param->termInfo.Type,
        param->termInfo.ID,
        (int)param->user_data,
        param->innerInfo.errstr);
}
author: meige    time: 2019-6-4 17:44
void  PU_OnAuthEvent(struct BVRAuthParam* param, enum BVRAuthResult result, enum BVRPermission* permission, int pemsCount)

{
         printf("open OnAuthEvent start\n");
         printf("\n--------------- \n\
         result: %d                   \n\
         rand code: %d              \n\
         auth code: %d              \n\
         SerialNumber: %s             \n\
         issuer: %s                   \n\
         type: %s                     \n\
         id: %s                       \n\
         user_data: %d                \n\
         result: %s                   \n\
         ---------------\n",
                 result,
                 param->tagInfo.RandCode,
                 param->tagInfo.AuthCode,
                 param->SerialNumber,
                 param->certInfo.IssueUser,
                 param->termInfo.Type,
                 param->termInfo.ID,
                 (int)param->user_data,
                 param->innerInfo.errstr);

这个回调函数不会走。
author: tony258    time: 2019-6-4 18:02
meige post on2019-6-4 17:44
void  PU_OnAuthEvent(struct BVRAuthParam* param, enum BVRAuthResult result, enum BVRPermission* per ...

1. 打印的log信息帖下,尽量全  2. 在android上测试下47.107.87.21:18866是否通



author: Arthur    time: 2019-6-4 18:16
meige post on2019-6-4 17:44
void  PU_OnAuthEvent(struct BVRAuthParam* param, enum BVRAuthResult result, enum BVRPermission* per ...

// 这个是我这边调用流程。
CallAuth(2);
static void CallAuth(int request){

        BVRAuthParam param;
        memset(&param, 0, sizeof(param));

        param.iSize = sizeof(param);
        // 参数对应改下
        strcpy(param.termInfo.CPU, "ARM");
        strcpy(param.termInfo.Desc, "Besovideo copyright");
        strcpy(param.termInfo.HardwareProvider, lo_billRequest.stEntity.szBrand);
        strcpy(param.termInfo.HardwareSN, lo_billRequest.stEntity.szFingerPrint);
        strcpy(param.termInfo.HardwareVersion, "1.0");
        strcpy(param.termInfo.ID, lo_billRequest.szAppDeviceID);
        strcpy(param.termInfo.IMEI, lo_billRequest.stEntity.szDeviceID);
        strcpy(param.termInfo.MAC, lo_billRequest.stEntity.szMacAddress);
        strcpy(param.termInfo.ModelNumber, lo_billRequest.stEntity.szModel);
        strcpy(param.termInfo.DeviceModelNumber, lo_billRequest.stEntity.szModel);
        strcpy(param.termInfo.OSID, lo_billRequest.stEntity.szAndroidID);
        strcpy(param.termInfo.OSType, "Android");
        sprintf(param.termInfo.OSVersion,"%d", lo_billRequest.stEntity.iAPILevel);
        strcpy(param.termInfo.SoftwareProvider, "Besovideo");
        strcpy(param.termInfo.SoftwareVersion, "v1.0");
        strcpy(param.termInfo.Type, lo_billRequest.szAppType);
        strcpy(param.termInfo.UserLabel,lo_billRequest.szUserLabel);
        LOGI("CallAuth lo_billRequest.szProductKey = %s", lo_billRequest.szProductKey);
        strcpy(param.termInfo.ProductKey,lo_billRequest.szProductKey);

        AU_RSA* rsa = NULL;

        char* n = "xxxxxxxxxxxxxx";
        char* e = "xxxxxxxxxxxxxxx";
        char data[256];
        int data_len = 0;
        int len = 0;
        char base64[512];
        int base64_len;

        char encrypt[512];
        int encrypt_len = 0;

        data_len = sizeof(data);
        memset(data, 0, sizeof(data));

        encrypt_len = sizeof(encrypt);
        memset(encrypt, 0, sizeof(encrypt));

        base64_len = sizeof(base64);
        memset(base64, 0, sizeof(base64));

        au_rsa_init();
        au_rsa_key_get_hex(&rsa, n, e, NULL);

        // 获取需要字符串
        BVCSP_GetEncryptedData(data, &data_len);
        len = au_rsa_encrypt(rsa, data, data_len, encrypt, encrypt_len);
        if (len > 0) {
                base64_len = base64_encode((const unsigned char*) encrypt, len, base64);
                strcpy(param.appInfo.appId, "app_xxxxxxxxx");
                param.appInfo.ciph_data = base64;
                param.appInfo.ciph_len = strlen(base64);
        }

        if(strlen(lo_billRequest.szInnerInfo) > 0){
                param.innerInfo.ciphertext = lo_billRequest.szInnerInfo;
                param.innerInfo.length = strlen(lo_billRequest.szInnerInfo)+1;
        }

        memcpy(param.SerialNumber, lo_billRequest.szSerialNumber, 128);

        param.user_data = (void*)request;

        param.OnAuthEvent = BVOnAuthEvent;
        param.OnMessage =BVOnMessage;

#if 1
        BVCU_Result br = BVCSP_Auth(&param);
        if(BVCU_Result_FAILED(br)){
                LOGI("auth call error!");
        }else{
                LOGI("auth call success!");
        }
#endif
        LOGI("***************>> request: %d\n", request);
}


author: meige    time: 2019-6-4 20:21
tony258 post on2019-6-4 18:02
1. 打印的log信息帖下,尽量全  2. 在android上测试下47.107.87.21:18866是否通

1.[2019/06/04 20:13:38:8466] NOTICE: libwebsockets version: 3.1.0 unknown-build-hash
BVCSP so init success
Login success
-65522
AuthPu start
GetEncryptedData success
0
open EncryptData bvReulst =
BVCSP_Auth start
[D] [06-04 20:13:38] [push:1037] auth randcode: 324808
BVCSP_Auth success
0
Authentication Interface Call Successful
[D] [06-04 20:13:38] [connect:0217] connect 47.107.87.21 : 18866 ...
slb789:/system/bin # ping 47.107.87.21:18866
ping: unknown host 47.107.87.21:18866
我参数修改成android的参数,还是没有回调
2.问下如何在android设备测试47.107.87.21:18866是否通
author: xuwei    time: 2019-6-4 20:37
meige post on2019-6-4 20:21
1.[2019/06/04 20:13:38:8466] NOTICE: libwebsockets version: 3.1.0 unknown-build-hash
BVCSP so ini ...

ping通这个ip就行了
author: lihui2006    time: 2019-6-4 20:46
此外,别忘记了用我们标准的MPU/MCP软件做对比测试。
用成品的APP跟你们用SDK编译出来的做对比排查。
标准APP的公开下载URL:

http://up.besovideo.com:7780/mpu_na.apk

http://up.besovideo.com:7780/MCP.apk

MCP=MPU(执法仪947规范录传-编码+推流)+MCU(取流+解码,即手机客户端功能)+公网对讲PoC(双向视频对讲)+警用微信(警用多媒体通信,警讯发布)
author: meige    time: 2019-6-5 09:15
xuwei post on2019-6-4 20:37
ping通这个ip就行了

这个ip 47.107.87.21,ping不通。
author: tony258    time: 2019-6-5 09:38
meige post on2019-6-5 09:15
这个ip 47.107.87.21,ping不通。

你好,服务器关闭了ping服务. 可以在android上建立tcp连接,测试是否能连接成功
author: meige    time: 2019-6-5 09:39
lihui2006 post on2019-6-4 20:46
此外,别忘记了用我们标准的MPU/MCP软件做对比测试。
用成品的APP跟你们用SDK编译出来的做对比排查。
标 ...

MPU app是能认证,登入的。
author: Arthur    time: 2019-6-5 09:40
meige post on2019-6-5 09:15
这个ip 47.107.87.21,ping不通。

服务器那边说不允许ping。 用这个ip和端口建立一个socket连接试下。另外调用auth之后,如果一直连不上服务器,回调里会回复一个超时,时间挺长,多等一会以测试回调流程是否正常。
author: meige    time: 2019-6-5 11:10
Arthur post on2019-6-5 09:40
服务器那边说不允许ping。 用这个ip和端口建立一个socket连接试下。另外调用auth之后,如果一直连不上服 ...

认证,已经成功,非常感谢支持!
Authentication Interface Call Successful
[D] [06-05 11:07:58] [connect:0217] connect 47.107.87.21 : 18866 ...
[D] [06-05 11:07:58] [callback_auth:0123] create  LWS_CALLBACK_WSI_CREATE
[D] [06-05 11:07:58] [wsOnConnected:0342]
[D] [06-05 11:07:58] [wsOnReceive:0476] debug cmd, type: 2, result: 1024, msg: success
[D] [06-05 11:07:58] [onRVDecryption:0544] is auth server
[D] [06-05 11:07:59] [wsOnReceive:0476] debug cmd, type: 5, result: 1024, msg: success
[D] [06-05 11:07:59] [onRVAES:0563] get aes key iv
[I] [06-05 11:07:59] [wsOnWriteable:0525] send success
[D] [06-05 11:07:59] [wsOnReceive:0476] debug cmd, type: 50, result: 52, msg: auth wait
[D] [06-05 11:07:59] [onRVLogin:0662] auth fail: 52, 52, , error: auth wait
open OnAuthEvent start

---------------
         result: 52
         rand code: 263662
         auth code: 3607
         SerialNumber:
         issuer:
         type: Android
         id: PU_100100AE
         user_data: 0
         result: auth wait
         ---------------
successful application for trial
[I] [06-05 11:07:59] [wsOnWriteable:0525] send success
[D] [06-05 11:07:59] [wsOnReceive:0476] debug cmd, type: 54, result: 6, msg: company of meigchina un support trail
open OnAuthEvent start

---------------
         result: 6
         rand code: 263662
         auth code: 3607
         SerialNumber:
         issuer:
         type: Android
         id: PU_100100AE
         user_data: 0
         result: company of meigchina un support trail
         ---------------
Login szServerAddr=192.168.0.175
Login iServerPuPort=9701
Login success11
-65522

现在登入失败,帮忙看看,谢谢!
author: hardfire    time: 2019-6-5 11:24
兄弟,你 也多费心,多研究下,多调试下就都解决了。

author: meige    time: 2019-6-5 12:01
hardfire post on2019-6-5 11:24
兄弟,你 也多费心,多研究下,多调试下就都解决了。

兄弟,我这边在研究,这个是你们的东西,可以有些东西对于你们来说简单,但是我们这边可能要研究很久,这个你们要理解下。
现在问题是bvcuResult = BVCSP_Login(&g_hSession, &sessionParam);  调用so库登入方法返回值是失败的。



author: Arthur    time: 2019-6-5 14:42
meige post on2019-6-5 12:01
兄弟,我这边在研究,这个是你们的东西,可以有些东西对于你们来说简单,但是我们这边可能要研究很久,这 ...

label_    把这个值传入param.termInfo.UserLabel。然后再次调用认证,调用完成后说下,我们这边授权。
author: meige    time: 2019-6-5 15:30
Arthur post on2019-6-5 14:42
label_e2a6ac4246f611e9a0dc0242ac130006    把这个值传入param.termInfo.UserLabel。然后再次调用认证, ...

这个参数值已经加入:
[D] [06-05 15:29:50] [onRVLogin:0662] auth fail: 52, 52, , error: auth wait
open OnAuthEvent start

---------------
         result: 52
         rand code: 281355
         auth code: 3607
         SerialNumber:
         issuer:
         type: Android
         id: PU_100100AE
         user_data: 0
         result: auth wait
         ---------------
successful application for trial
author: Arthur    time: 2019-6-5 15:36
meige post on2019-6-5 15:30
这个参数值已经加入:
[D] [06-05 15:29:50] [onRVLogin:0662] auth fail: 52, 52, , error: auth wait
...

param.termInfo.Type 这个值需要填MPU
author: meige    time: 2019-6-5 16:03
Arthur post on2019-6-5 15:36
param.termInfo.Type 这个值需要填MPU

已经修改为MPU,问下// 终端认证信息
typedef struct BVRAuthInfo {
    char Type[64]; // PU、MPU、CU、CMS、VTDU、NRU ...
    char ID[128]; // PU_ID、CU_ID、NRU_ID ...
    char Name[128]; // PU NAME、CU NAME

    char ModelNumber[128]; // 验证型号

    char MAC[64]; // 网卡地址
    char IMEI[64]; // 安卓设备(非安卓设备必须置空)
    char HardwareProvider[128]; // 硬件提供商 UTF-8, 内部覆盖
    char HardwareSN[1024]; // 硬件序列号
    char HardwareVersion[64]; // 硬件版本号

    char SoftwareProvider[128]; // 软件提供商 UTF-8
    char SoftwareVersion[64]; // 软件版本号

    char OSType[64]; // 系统类型 window、linux、android、ios
    char OSVersion[32]; // 系统版本
    char OSID[64]; // 系统ID
    char CPU[64]; // 处理器信息

    char UserLabel[64]; // 用户标签, 后台管理用户通过用户标签, 访问未授权终端

    char DeviceModelNumber[64]; // 设备型号
    char Desc[256]; // 其他信息 UTF-8

    char ProductKey[64]; // 产品密钥
}BVRAuthInfo;
哪些参数值一定不能出错,
author: Arthur    time: 2019-6-5 16:26
meige post on2019-6-5 16:03
已经修改为MPU,问下// 终端认证信息
typedef struct BVRAuthInfo {
    char Type[64]; // PU、MPU、C ...

Type固定的几种类型,不能错。
UserLabel是授权时需要填入的。
ProductKey是自动授权的。
如果要认证,ProductKey和UserLabel必须要存在一个。 我看你的已经授权了,现在能登录成功了么?
author: meige    time: 2019-6-5 16:54
Arthur post on2019-6-5 16:26
Type固定的几种类型,不能错。
UserLabel是授权时需要填入的。
ProductKey是自动授权的。

可以登录了,非常感谢!
author: meige    time: 2019-6-5 18:10
问下上层LICENSE 是传入到哪个参数,获取Auth_ID,这个值是不是auth code: 3649 ?
author: Arthur    time: 2019-6-5 18:55
meige post on2019-6-5 18:10
问下上层LICENSE 是传入到哪个参数,获取Auth_ID,这个值是不是auth code: 3649 ?

1.不需要传License。
2.是的。
author: meige    time: 2019-6-6 13:58
1.问下 pu端的图片,音频和视频如何上传到pc端的,能否给相关demo,谢谢!

author: Arthur    time: 2019-6-6 17:36
meige post on2019-6-6 13:58
问下 pu端的图片,音频和视频如何上传到pc端的,能否给相关demo,谢谢!

参照下开发手册。目前没有这个demo。
author: meige    time: 2019-6-6 18:00
Arthur post on2019-6-6 17:36
参照下开发手册。目前没有这个demo。

开发手册,只看到主动上传的方法,没看到回调,查看上传的状态。
author: meige    time: 2019-6-6 18:01

2.cu端有远程抓拍,远程录像,远程录音,是向pu端发送消息,让pu端执行拍照,录像,录音功能吗?如果是,能否提供接收这些消息地方。
3.BVCSP_Dialog_Write写入数据,是否是cu端开始传输时,才执行写入数据操作。
4.cu端有只传音频,音视频同传,只传视频的操作,是向pu端发送信息,pu端根据不同的消息,决定向通道中写入什么数据是吗?
author: meige    time: 2019-6-10 16:21
调用BVCSP_Dialog_Write 方法向通道中写入数据时:
1.如果是实时图传,会返回-65521 内部状态错误
2.如果是上传文件,会返回-65526 未实现
author: Arthur    time: 2019-6-10 17:09
BVCU_SUBMETHOD_PU_MANUALRECORD,//手工启动/停止PU录像。输入类型:BVCU_PUCFG_ManualRecord;输出类型:无
BVCU_SUBMETHOD_PU_SNAPSHOT, //手工远程抓拍。输入类型:BVCU_PUCFG_Snapshot;输出类型:无
sesParam.OnCommand = PUOnCommand; PU端接收命令,决定做何操作。

不同的媒体方向iAVStreamDir 来决定音频还是视频传输。

至于write的问题,贴下代码看下。
author: meige    time: 2019-6-10 17:40
Arthur post on2019-6-10 17:09
BVCU_SUBMETHOD_PU_MANUALRECORD,//手工启动/停止PU录像。输入类型:BVCU_PUCFG_ManualRecord;输出类型: ...

sessionParam.OnCommand = OnCommand;
sessionParam.OnNotify = OnNotify;
sessionParam.OnDialogCmd = OnDialogCommand;(该回调是用来做何操作,我一直是在这里做一些操作的)

以下是上传文件的代码:
bool OpenDialog()

  {

      if (!g_hSession || g_hDialog) return false;

      BVCSP_DialogParam dialogParam;

      memset(&dialogParam, 0, sizeof(dialogParam));

      dialogParam.iSize = sizeof(dialogParam);

      dialogParam.hSession = g_hSession;

      strcpy(dialogParam.stTarget.szID, "PU_8953");

      dialogParam.stTarget.iIndexMajor = BVCU_SUBDEV_INDEXMAJOR_DOWNLOAD;

      dialogParam.iAVStreamDir = BVCU_MEDIADIR_DATASEND;
      printf("open lib Dialog_Open 1\n");
      dialogParam.stFileTarget.pPathFileName="/sdcard/sdcard/video/0123456789_19700105083843000_000001.MP4";//"/sdcard/zpf_test123.h264";
      printf("open lib Dialog_Open 2\n");
      dialogParam.stFileTarget.iStartTime_iOffset=0;
      printf("open lib Dialog_Open 3\n");
      FILE *fp=fopen(dialogParam.stFileTarget.pPathFileName,"rb");
          if(!fp) return false;
          fseek(fp,0L,SEEK_END);
          int size=ftell(fp);
          fclose(fp);
          printf("open lib Dialog_Open size=%d\n",size);
      dialogParam.stFileTarget.iEndTime_iFileSize=size;
      printf("open lib Dialog_Open 4\n");
      dialogParam.OnEvent = OnDialogEvent;

      dialogParam.afterRecv = OnDialogAfterRecv;



      BVCSP_DialogControlParam dialogControlParam;

      memset(&dialogControlParam, 0, sizeof(dialogControlParam));

      dialogControlParam.iTimeOut = 30 * 1000;

      dialogControlParam.iDelayMax = 5000;

      dialogControlParam.iDelayMin = 500;

      dialogControlParam.iDelayVsSmooth = 3;
      //hejianfeng add start
                 void *handle=getHandle();
                 typedef BVCU_Result (*BVCSP_Dialog_Open)(BVCSP_HDialog* phDialog, BVCSP_DialogParam* pParam, BVCSP_DialogControlParam* pControl);
                 BVCSP_Dialog_Open Dialog_Open = (BVCSP_Dialog_Open) dlsym(handle, "BVCSP_Dialog_Open");
                if(!Dialog_Open)
                {
                        printf("open lib Dialog_Open fail\n");
                        cout<<dlerror()<<endl;
                        dlclose(handle);
                        return false;
                }
                 //hejianfeng add end
                BVCU_Result bvReulst=Dialog_Open(&g_hDialog, &dialogParam, &dialogControlParam);
                printf("open lib Dialog_Open \n");
                cout<<bvReulst<<endl;
      return BVCU_Result_SUCCEEDED(bvReulst);

  }


void OnDialogEvent(BVCSP_HDialog hDialog, int iEventCode, BVCSP_Event_DialogCmd* pParam)

  {

      if (!pParam) return;

//      BVCSP_DialogInfo dialogInfo;
//
//      memset(&dialogInfo, 0, sizeof(dialogInfo));

      switch (iEventCode)

      {

      case BVCSP_EVENT_SESSION_OPEN:

          if (pParam->iResult == BVCU_RESULT_S_OK)

          {

//              BVCSP_GetDialogInfo(g_hDialog, &dialogInfo);

              printf("打开设备: 的通道: 会话成功\n");
//              FILE *fd=fopen("/sdcard/zpf_test123.h264","rb");
              FILE *fd=fopen("/sdcard/sdcard/video/0123456789_19700105083843000_000001.MP4","rb");
                          if(!fd) return;
                          const int iDataLen = 100000;

                              char szData[iDataLen] = { 0 };
                              void *handle=getHandle();
                                 typedef BVCU_Result (*BVCSP_Dialog_Write)(BVCSP_HDialog hDialog, BVCSP_Packet* pData);
                                 BVCSP_Dialog_Write Dialog_Write = (BVCSP_Dialog_Write) dlsym(handle, "BVCSP_Dialog_Write");
                                if(!Dialog_Write)
                                {
                                        printf("open lib Dialog_Write fail\n");
                                        cout<<dlerror()<<endl;
                                        dlclose(handle);
                                        return ;
                                }
                               while (1)

                               {

                                   int iReadSize = fread(szData, sizeof(char), iDataLen, fd);

                                   memset(szData, 0, sizeof(szData));

                                   BVCSP_Packet packet;

                                   memset(&packet, 0, sizeof packet);

                                   packet.iDataType = BVCSP_DATA_TYPE_VIDEO;

                                   packet.iDataSize = iReadSize;

                                   fread(szData, 1, iReadSize, fd);

                                   packet.pData = szData;

                                   BVCU_Result result=Dialog_Write(g_hDialog,&packet);
                                   printf("open lib BVCSP_Dialog_Write success\n");
                                   cout<<result<<endl;
                                   printf("open lib BVCSP_Dialog_Write iReadSize=%d\n",iReadSize);
                                   if (iReadSize < iDataLen){

                                       break;

                                   }

                                   usleep(4);

                               }

                               fclose(fd);

          }

          else

          {

              printf("打开会话失败\n");

          }

          break;

      case BVCSP_EVENT_SESSION_CLOSE:

          if (pParam->iResult == BVCU_RESULT_S_OK)

          {

              printf("关闭会话成功\n");

          }

          else

          {

              printf("关闭会话失败\n");

          }

          break;

      default:

          break;

      }

  }

author: Arthur    time: 2019-6-11 09:32
OnDialogCmd 里接收被动Dialog。 比如cu端请求音视频,cu端下载pu端的文件。
author: Arthur    time: 2019-6-11 09:44
上传文件如果想要cu端能够查询到文件,要上传到指定服务器目录 /PU_23504251/Video/20190611/PU_23504251_00_20190611_092908.mkv  (video audio photo) ,并且前缀名和后缀名有格式要求。前缀PU_xxxxxx(PUID)_00(通道) _xxxx(时间)。后缀.mkv  .mp4 .aac .jpg。

直接上传到/temp/目录下,没有任何要求,但是cu端文件检索是查不到的。 /temp/2019-06-11/PU_23504251_00_20190611_092456.jpg      /temp/123.apk
上传文件时,肯定是需要填一个本地路径和远端路径的。
BVCU_File_TransferParam param;
param.pLocalFilePathName
param.pRemoteFilePathName

param.OnEvent = OnFileTransferEvent;

author: Arthur    time: 2019-6-11 10:18
bvcspPacket.iDataType = BVCSP_DATA_TYPE_TSP; 你不是上传文件么,不应该填video
dialogParam.stFileTarget.pPathFileName 这个应该是远端路径。
strcpy(dialogParam.stTarget.szID, "NRU_"); 这个应该是存储服务器ID。 填NRU_ 服务器会自动选择。
author: meige    time: 2019-6-11 10:26
Arthur post on2019-6-11 09:44
上传文件如果想要cu端能够查询到文件,要上传到指定服务器目录 /PU_23504251/Video/20190611/PU_23504251_0 ...

我定义了BVCU_File_TransferParam对象后,把这个对象传到哪个方法里呢?
author: meige    time: 2019-6-11 10:42
Arthur post on2019-6-11 09:44
上传文件如果想要cu端能够查询到文件,要上传到指定服务器目录 /PU_23504251/Video/20190611/PU_23504251_0 ...

/**
* 创建文件传输。该函数是异步的。如果创建会话成功,在返回前或者返回后会产生OnEvent回调函数,
* 事件码是BVCU_EVENT_DIALOG_OPEN,如果事件参数的iResult是失败代码,则会话创建失败。
* @param[out] phTransfer: 返回传输句柄.
* @param[in] pParam: 传输参数。
* @return: 常见返回值
*        BVCU_RESULT_S_OK: 调用正确完成。结果通过OnEvent通知调用者。
*        BVCU_RESULT_E_UNSUPPORTED: 不支持的操作,服务器版本过低。
*        BVCU_RESULT_E_FAILED或其他: 其他错误导致失败
*/
LIBBVCU_API BVCU_Result BVCU_FileTransfer_Open(BVCU_File_HTransfer* phTransfer, BVCU_File_TransferParam* pParam);

/**
*获得会话相关信息
*@param[in] hTransfer: BVCU_FileTransfer_Open返回的hTransfer,或BVCU_File_GlobalParam.OnFileRequest通知的hTransfer
*@param[out] pInfo: BVCU_File_TransferInfo
*@return: BVCU_Result
*/
LIBBVCU_API BVCU_Result BVCU_FileTransfer_GetInfo(BVCU_File_HTransfer hTransfer, BVCU_File_TransferInfo* pInfo);

/**
* 关闭文件传输。
* @param[in] hTransfer: 同BVCU_FileTransfer_GetInfo.
* @return: 常见返回值
*        BVCU_RESULT_S_OK: 正确完成。结果通过OnEvent通知调用者。
*        BVCU_RESULT_S_IGNORE:  会话不存在
*        BVCU_RESULT_E_FAILED或其他: 其他错误导致失败
*/
LIBBVCU_API BVCU_Result BVCU_FileTransfer_Close(BVCU_File_HTransfer hTransfer);
问下这个不是cu端调用的接口吗?
开发手册里
主动上传文件 BVCSP_Dialog_Open/BVCSP_Dialog_Write 会话目标的子通道号写BVCU_SUBDEV_INDEXMAJOR_DOWNLOAD, 媒体方向为BVCU_MEDIADIR_DATASEND。 通过BVCSP_Dialog_Write写文件流到通道来上传文件。  
问下实现上传不是调用BVCSP_Dialog_Open/BVCSP_Dialog_Write方法实现吗?

author: Arthur    time: 2019-6-11 11:17
哦。这个BVCU_File_TransferParam只是上层用来传值用的。 方法的确是用BVCSP_Dialog_Open/BVCSP_Dialog_Write。那你把其他几个地方改下,试下。

author: meige    time: 2019-6-11 11:25
Arthur post on2019-6-11 10:18
bvcspPacket.iDataType = BVCSP_DATA_TYPE_TSP; 你不是上传文件么,不应该填video
dialogParam.stFileTarg ...

strcpy(dialogParam.stTarget.szID, "NRU_");修改成这个后,
dialogParam.OnEvent = OnDialogEvent;这个回调打开会话失败,返回值是-65523 请求错误
author: Arthur    time: 2019-6-11 11:37
meige post on2019-6-11 11:25
strcpy(dialogParam.stTarget.szID, "NRU_");修改成这个后,
dialogParam.OnEvent = OnDialogEvent;这个 ...

dialogParam.stFileTarget.pPathFileName 这个远端路径改了么,先传到/temp/目录下
author: meige    time: 2019-6-11 12:05
Arthur post on2019-6-11 11:37
dialogParam.stFileTarget.pPathFileName 这个远端路径改了么,先传到/temp/目录下

修改成/temp,打开会话成功,但是BVCSP_Dialog_Write写数据还是返回值为-65526
author: Arthur    time: 2019-6-11 12:31
meige post on2019-6-11 12:05
修改成/temp,打开会话成功,但是BVCSP_Dialog_Write写数据还是返回值为-65526

要么没有流,要么是通道还没有完全建立成功。
author: meige    time: 2019-6-11 13:54
Arthur post on2019-6-11 12:31
要么没有流,要么是通道还没有完全建立成功。

问下BVCSP_Dialog_Open 成功后:
sessionParam.OnCommand = OnCommand;

sessionParam.OnNotify = OnNotify;

sessionParam.OnDialogCmd = OnDialogCommand;
这三个回调方法会走吗?现在现象是都不走。

如果strcpy(dialogParam.stTarget.szID, "PU_8953");这样修改BVCSP_Dialog_Open 成功后
sessionParam.OnDialogCmd = OnDialogCommand;这个回调会走,
OnDialogCommand success IndexMajor =66064

sessionParam.OnCommand = OnCommand;这个回调不会走。

author: Arthur    time: 2019-6-11 14:19
meige post on2019-6-11 13:54
问下BVCSP_Dialog_Open 成功后:
sessionParam.OnCommand = OnCommand;

目标ID填成PU_ID就相当于去向这个PU设备(这个ID应该是你自己吧)发送请求了,所以会有这个回调。主动上传不走这里。OnCommand之前说了。是cu端发送一些query和control命令时接收的地方。


author: meige    time: 2019-6-11 15:17
Arthur post on2019-6-11 14:19
目标ID填成PU_ID就相当于去向这个PU设备(这个ID应该是你自己吧)发送请求了,所以会有这个回调。主动上 ...

BVCSP_Dialog_Write写数据 返回值-65526,不知道如何解,你们那边能否写的demo实例给到我
author: Arthur    time: 2019-6-11 15:36
meige post on2019-6-11 15:17
BVCSP_Dialog_Write写数据 返回值-65526,不知道如何解,你们那边能否写的demo实例给到我

bvcspPacket.iDataType = BVCSP_DATA_TYPE_TSP;这个地方改了么
author: meige    time: 2019-6-11 16:06
Arthur post on2019-6-11 15:36
bvcspPacket.iDataType = BVCSP_DATA_TYPE_TSP;这个地方改了么

这个地方改了。
author: yumengtao    time: 2019-6-11 19:47
如果传输文件时得到的返回值为 BVCU_RESULT_E_NOTIMPL(-65526) 可能是一次传输的数据太大了,建议等待一会。每次上传数据量建议设为800字节。
author: meige    time: 2019-6-11 19:58
yumengtao post on2019-6-11 19:47
如果传输文件时得到的返回值为 BVCU_RESULT_E_NOTIMPL(-65526) 可能是一次传输的数据太大了,建议等待一会 ...

每次上传数据改成800字节,有等待上传,返回值还是BVCU_RESULT_E_NOTIMPL(-65526)
author: yumengtao    time: 2019-6-11 22:03
在回调通知你上传之后,你一个包都无法上传是吗?
author: meige    time: 2019-6-12 09:05
yumengtao post on2019-6-11 22:03
在回调通知你上传之后,你一个包都无法上传是吗?

是的,没有一组数据写入通道上传成功的。
author: meige    time: 2019-6-12 09:57
yumengtao post on2019-6-11 22:03
在回调通知你上传之后,你一个包都无法上传是吗?

回调的log信息
06-12 09:55:03.701 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/ThreadNetwork.cpp, line 190, function Login, call Login:1 CUID:8953 user:admin server:192.168.0.175:9701 agent:BVCSP_PU_Test
06-12 09:55:03.724 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 257, function OnEvent, CSession::OnEvent:1 evetCode:1 result:0
06-12 09:55:03.800 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/BVDialog.cpp, line 361, function OnEvent, CBVDialog::OnEvent:2 eventCode:1 result:0
06-12 09:55:04.042 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 276, function OnCommand, 1 CSession::OnCommand: method:1 submothod:65541
06-12 09:55:04.052 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 276, function OnCommand, 1 CSession::OnCommand: method:1 submothod:65542
06-12 09:55:04.062 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 276, function OnCommand, 1 CSession::OnCommand: method:1 submothod:65543
06-12 09:55:07.717 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/ThreadNetwork.cpp, line 354, function Invite, 1 call Invite:3 targetID:NRU_ index:66064 media:16 bOverTCP:1 iResult:0
06-12 09:55:07.789 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/BVDialog.cpp, line 361, function OnEvent, CBVDialog::OnEvent:3 eventCode:1 result:0
06-12 09:55:34.045 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 286, function CommandOnEvent, 1 CSession::CommandOnEvent: method:1 submothod:65541 result:-65516
06-12 09:55:34.052 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 286, function CommandOnEvent, 1 CSession::CommandOnEvent: method:1 submothod:65542 result:-65516
06-12 09:55:34.062 16816 16820 D MG_LOG  : Log_Callback ,level=1,log=jni-r19c/../src/Session.cpp, line 286, function CommandOnEvent, 1 CSession::CommandOnEvent: method:1 submothod:65543 result:-65516
帮忙分析下。
author: yumengtao    time: 2019-6-12 10:16
我将我写的思路发给你,你对比一下我们之间的异同
1.登陆时注册文件传输通道。

    //file    g_channelInfo[channelIndex].iChannelIndex = BVCU_SUBDEV_INDEXMAJOR_DOWNLOAD;    g_channelInfo[channelIndex].iMediaDir = BVCU_MEDIADIR_DATASEND;    strcpy(g_channelInfo[channelIndex++].szName, "file");

2.打开成功后,库会调用onDialogCmd回调 ,在onDialogCmd中需要注册onEvent回调,并填写相应的文件信息。

写文件信息
                     pParam->stFileTarget.iStartTime_iOffset = 0;        pParam->stFileTarget.iEndTime_iFileSize = fileInfo.size();//文件大小


3.onEvent回调被调用后,就可以上传数据了。

while (!data->close){        iSendLen = in.readRawData(sendBuf,sizeof(sendBuf));        if (iSendLen > 0){            bvcspPacket.bKeyFrame = 1;            bvcspPacket.iDataType = BVCSP_DATA_TYPE_TSP;            bvcspPacket.iDataSize = iSendLen;            bvcspPacket.pData = sendBuf;            BVCU_Result ret= BVCSP_Dialog_Write(data->dialog, &bvcspPacket);            if (BVCU_Result_FAILED(ret)){                DEBUG(ret);                if(ret == BVCU_RESULT_E_NOTIMPL){//可能上传过快,等1S继续上传                    while(ret == BVCU_RESULT_E_NOTIMPL){                        DEBUG("try to upload");                        QThread::sleep(1);                        ret= BVCSP_Dialog_Write(data->dialog, &bvcspPacket);                    }


以上是我的思路。

如果思路相同,可以看一下每次只发一个字节得到的返回结果是否还是-65526


author: meige    time: 2019-6-12 11:07
yumengtao post on2019-6-12 10:16
我将我写的思路发给你,你对比一下我们之间的异同
1.登陆时注册文件传输通道。

还是不行,我把我的代码贴给你分析下:
OpenDialog(){
BVCSP_DialogParam dialogParam;

      memset(&dialogParam, 0, sizeof(dialogParam));

      dialogParam.iSize = sizeof(dialogParam);

      dialogParam.hSession = g_hSession;

      strcpy(dialogParam.stTarget.szID, "NRU_");//NRU_

      dialogParam.stTarget.iIndexMajor = BVCU_SUBDEV_INDEXMAJOR_DOWNLOAD;

      dialogParam.iAVStreamDir = BVCU_MEDIADIR_DATASEND;
      dialogParam.stFileTarget.pPathFileName="/temp/Audio/20190611/PU_20190611_172552.aac";//"/PU_8953/Video/20181011/PU_1234567_20181011121314000_00001.JPG";
      dialogParam.stFileTarget.iStartTime_iOffset=0;
      FILE *fp=fopen("/sdcard/sdcard/audio/20190611_172552.aac","rb");
          if(!fp) return false;
          fseek(fp,0L,SEEK_END);
          int size=ftell(fp);
          fclose(fp);
          printf("open lib Dialog_Open size=%d\n",size);
      dialogParam.stFileTarget.iEndTime_iFileSize=size;
      printf("open lib Dialog_Open \n");
      dialogParam.OnEvent = OnDialogEvent;

      dialogParam.afterRecv = OnDialogAfterRecv;


      BVCSP_DialogControlParam dialogControlParam;

      memset(&dialogControlParam, 0, sizeof(dialogControlParam));

      dialogControlParam.iTimeOut = 30 * 1000;

      dialogControlParam.iDelayMax = 5000;

      dialogControlParam.iDelayMin = 500;

      dialogControlParam.iDelayVsSmooth = 3;
      //hejianfeng add start
                 void *handle=getHandle();
                 typedef BVCU_Result (*BVCSP_Dialog_Open)(BVCSP_HDialog* phDialog, BVCSP_DialogParam* pParam, BVCSP_DialogControlParam* pControl);
                 BVCSP_Dialog_Open Dialog_Open = (BVCSP_Dialog_Open) dlsym(handle, "BVCSP_Dialog_Open");
                if(!Dialog_Open)
                {
                        printf("open lib Dialog_Open fail\n");
                        cout<<dlerror()<<endl;
                        dlclose(handle);
                        return false;
                }
                 //hejianfeng add end
                BVCU_Result bvReulst=Dialog_Open(&g_hDialog, &dialogParam, &dialogControlParam);
                printf("open lib Dialog_Open \n");
                cout<<bvReulst<<endl;
}

回调方法OnDialogEvent:
FILE *fd=fopen("/sdcard/sdcard/audio/20190611_172552.aac","r");
                        if(!fd) return;
                        const int iDataLen = 1;

                            char szData[iDataLen] = { 0 };
                             while (1)
                             {
                                     memset(szData, 0, sizeof(szData));
                                 int iReadSize = fread(szData, sizeof(char), iDataLen, fd);

//                                 memset(szData, 0, sizeof(szData));
                                 LOGD("iReadSize=%d,szData size=%d,char size=%d,g_hDialog=%d",iReadSize,sizeof(szData),sizeof(char),g_hDialog);
                                 BVCSP_Packet packet;

                                 memset(&packet, 0, sizeof (packet));

                                 packet.iDataType = BVCSP_DATA_TYPE_TSP;

                                 packet.iDataSize = iReadSize;
                                 packet.bKeyFrame=1;
//                                 fread(szData, 1, iReadSize, fd);

                                 packet.pData = szData;
                                 BVCU_Result result=BVCSP_Dialog_Write(g_hDialog,&packet);
                                 LOGD("BVCSP_Dialog_Write result=%d",result);
                                 if (iReadSize < iDataLen){
                                     break;
                                 }
                                 sleep(1);
                             }

                             fclose(fd);

author: yumengtao    time: 2019-6-12 15:43
strcpy(dialogParam.stTarget.szID, "NRU_");//NRU_ 这个地方 "NRU_" 即 NRU_ 有对应 其他设备吗?还是随意填写的一个ID。
author: yumengtao    time: 2019-6-12 16:00
您尝试一下起一个线程上传文件数据,不要阻塞onEvent回调。
author: meige    time: 2019-6-12 16:36
yumengtao post on2019-6-12 16:00
您尝试一下起一个线程上传文件数据,不要阻塞onEvent回调。

上传文件现在可以了,问下 dialogParam.stFileTarget.pPathFileName="/temp/Audio/20190611/PU_20190611_172552.aac";
temp不能修改吗?如修改成PU_8953.
author: yumengtao    time: 2019-6-12 16:40
您能再描述一下您的需求吗?
author: meige    time: 2019-6-12 16:41
meige post on2019-6-12 16:36
上传文件现在可以了,问下 dialogParam.stFileTarget.pPathFileName="/temp/Audio/20190611/PU_20190611_ ...

问下,怎样获取文件上传的进度百分比。
author: meige    time: 2019-6-12 16:46
实时图传时,向音视频通道BVCSP_Dialog_Write写数据是返回值为-65521,向里面写的是H264数据。
author: meige    time: 2019-6-12 17:12
yumengtao post on2019-6-12 16:40
您能再描述一下您的需求吗?

目录是temp,cu端文件检索查不到的,没达到我们的需求,现在修改成PU_***,打开会话会失败。
author: meige    time: 2019-6-12 17:23
yumengtao post on2019-6-12 15:43
strcpy(dialogParam.stTarget.szID, "NRU_");//NRU_ 这个地方 "NRU_" 即 NRU_ 有对应 其他设备吗?还是随意 ...

dialogParam.stTarget.szID,不清楚赋什么值。
author: meige    time: 2019-6-12 17:50
meige post on2019-6-12 16:46
实时图传时,向音视频通道BVCSP_Dialog_Write写数据是返回值为-65521,向里面写的是H264数据。

BVCU_Result OnDialogCommand(BVCSP_HDialog hDialog, int iEventCode, BVCSP_DialogParam* pParam)

{
         printf(" OnDialogCommand success iEventCode =%d\n",iEventCode);
         printf(" OnDialogCommand success IndexMajor =%d\n",pParam->stTarget.iIndexMajor);
         bvhDialog=hDialog;
         LOGV("bvhDialog=%d",hDialog);
         pParam->OnEvent=OnEventDialog;
         printf(" OnDialogCommand success end\n");
     return BVCU_RESULT_S_OK;

}
void OnEventDialog(BVCSP_HDialog hDialog, int iEventCode, BVCSP_Event_DialogCmd* pParam){
         LOGD(" OnEventDialog success iEventCode =%d\n",iEventCode);
         LOGD(" OnEventDialog success iResult=%d\n",pParam->iResult);
         LOGD(" OnEventDialog success iIndexMajor =%d\n",pParam->pDialogParam->stTarget.iIndexMajor);
         if (iEventCode == BVCSP_EVENT_SESSION_OPEN && pParam->iResult==BVCU_RESULT_S_OK){
                 if(pParam->pDialogParam->stTarget.iIndexMajor==0){
                         pthread_create(&thr[0], NULL, Dialog_Write, NULL);//在这里开始向通道里写入数据
                 }
         }
}
帮忙分析下什么原因写入数据失败。
author: yumengtao    time: 2019-6-12 21:00
meige post on2019-6-12 17:50
BVCU_Result OnDialogCommand(BVCSP_HDialog hDialog, int iEventCode, BVCSP_DialogParam* pParam)

  ...

打开音视频通道时需要在pParam中填写一些有关于视频的参数,请问您有没有填写。

如图所示


author: meige    time: 2019-6-13 17:48
android.mk引用libbvcsp.so,运行报如下错误:
libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 2.6.0 of the Protocol Buffer runtime library, but the installed version is 2.4.1.  Please update your library.  If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.  (Version verification failed in "out/target/product/slb789/obj_arm/STATIC_LIBRARIES/libhwui_static_intermediates/proto/frameworks/base/libs/hwui/protos/hwui.pb.cpp".)
terminating with uncaught exception of type google::protobuf::FatalException: This program requires version 2.6.0 of the Protocol Buffer runtime library, but the installed version is 2.4.1.  Please update your library.  If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.  (Version verification failed in "out/target/product/slb789/obj_arm/STATIC_LIBRARIES/libhwui_static_intermediates/proto/frameworks/base/libs/hwui/protos/hwui.pb.cpp".)
Aborted
author: yumengtao    time: 2019-6-13 19:50
meige post on2019-6-13 17:48
android.mk引用libbvcsp.so,运行报如下错误:
libprotobuf FATAL google/protobuf/stubs/common.cc:61] Th ...

之前您的程序不是能运行吗,怎么现在出现这个编译错误?请问您有什么改动?




欢迎光临 mobile CCTV,mobile surveillance,police body worn cameras (http://bbs.besovideo.com:8067/) Powered by Discuz! X3.2