基于优视设备与smarteye平台通信协议BVCSP的嵌入式LINUX设备侧软件开发
已经成功测试的平台有:hisi3518ev100, hisi3518ev200,hisi3516ev300,hisi3516a, hisi3519a, hisi3556, imx6,安霸S2/S5有详细的开发文档,https://gitee.com/besovideo/bvcspsdk/blob/master/BVCSPManual.chm
下面记录了一些客户基于我司提供的跨平台PUSDK~BVCSP SDK库进行嵌入式LINUX侧开发的一些问题及解答的记录:
dialog建立好后,就只调BVCSP_Dialog_Write 就可以了, 那个这个extradata到底又是什么?
收到dialog请求后,如果是异步处理, 返回pending,等板子自己准备好extradata(就是pps和sps)后,再调 onevent,在onevent的参数里面填入extradata参数。
这样就完成了 dialog的回复。 后面发送数据就一直调用dialog建立好后,就只调BVCSP_Dialog_Write 就可以了。
BVCSP_Dialog_Write 这个写 还是要 包含 pps sps的数据, 是完整的pps和sps的帧哦。就是pps,sps帧,加上10000000的头,。头文件里面有描述。
返回 success代表 dialog处理完成, pending代表dialog还没有处理完成, 会异步回调处理结果。
一个通道里面,可以包含 音频发送+音频接收+视频发送都是在这个回调里面的,返回收到的invite的命令的。
请求 打开不是一个回调函数嘛, 在回调函数返回 pending就可以了
不是检查 是否pending, 是你自己return pending, 就代表这个命令没有处理完, 后面还有异步回复这个命令。 return success, 就代表这个命令处理完了
1. 码率设置小一些(1.5mb以内)
2. 发送不出去后(拥堵后), 需要自动调整码率。
初始码率也不要设置大了, 不然必然会卡的返回忙的后, 需要调 BVCSP_HandleEvent()
1. 你前面发送速度太快, 导致底层网络堆积了很多数据, 后面你还按照原来的速度发送, 很容易卡。
2. 你每秒 只能 发送 4.5帧, 是因为你的处理方法不对导致的, 你现在的写法是遇到一次write fail就等1s。


设备侧是要做认证的,认证是根据设备ID来核算的,设备ID是跟设备MAC一一对应的。有相关的代码demo供参考。type: PU
app_id: app_86816ca02fea07c9
rsa_n(hex): 88c83a419ca6279679a80dee67d9143f
rsa_e(hex): af5c58047d054585
mac这个项不能为空, ID这个项里面 只能是 16进制的, 不能出现 F以上的字母

库的轮询,用于库处理内部事务。
当BVCSP_Initialize() bAutoHandle = 0 时,由调用者通过BVCSP_HandleEvent()处理库内部事务。
在BVCSP_Login() 之前需要 认证通过。

返回值的错误定义都在 BVCUConst.h头文件里面。
// Decoder
#define BVCU_MAX_SUPPORT_RESOLUTION 6 // 解码器输出口支持的最多分辨率数。
#define BVCU_DEC_MAX_WINDOWS 32 //解码器每个显示通道支持的最多窗口数。
#define BVCU_MAX_TOUR_IPCHANNEL_COUNT 16 //IP通道最大轮询连接数量


/*函数返回值及事件通知状态码*/
typedef enum _BVCU_Result {
BVCU_RESULT_E_FAILED = -0x10000, /*general error*/
BVCU_RESULT_E_INVALIDARG, /*invalid argument*/
BVCU_RESULT_E_UNSUPPORTED, /*unsupported functions*/
BVCU_RESULT_E_ALLOCMEMFAILED, /*allocate memory failed*/
BVCU_RESULT_E_MEMALIGNMENT, /*memory alignment is not satisfied*/
BVCU_RESULT_E_NOTFOUND, /*not found*/
BVCU_RESULT_E_NOTALLOWED, /*the requested access is not allowed*/
BVCU_RESULT_E_IO, /*I/O error*/
BVCU_RESULT_E_EOF, /*End of file*/
BVCU_RESULT_E_INVALIDDATA, /*Invalid data found when processing input*/
BVCU_RESULT_E_NOTIMPL, /*not implemented*/
BVCU_RESULT_E_BUSY, /*busy.deny service now*/
BVCU_RESULT_E_INUSE, /*device in use*/
BVCU_RESULT_E_BADREQUEST, /*bad request*/
BVCU_RESULT_E_AUTHORIZE_FAILED, /*authorize failed。登录/发送命令等的OnEvent回调中使用*/
BVCU_RESULT_E_BADSTATE, /*bad internal state*/
BVCU_RESULT_E_NOTINITILIZED, /*not initialized*/
BVCU_RESULT_E_FATALERROR, /*fatal error. BVCU should be closed*/
BVCU_RESULT_E_OUTOFSPACE, /*out of space*/
BVCU_RESULT_E_DISCONNECTED, /*disconnected*/
BVCU_RESULT_E_TIMEOUT, /*time out*/
BVCU_RESULT_E_CONNECTFAILED, /*connect failed*/
BVCU_RESULT_E_ABORTED, /*request aborted*/
BVCU_RESULT_E_THRAEDCONTEXT, /*can not execute in the specified thread context*/
BVCU_RESULT_E_UNAVAILABLE, /*unavailable, eg: initialize a dialog with an offlined PU*/
BVCU_RESULT_E_ALREADYEXIST, /*already exist*/
BVCU_RESULT_E_SEVERINTERNAL, /*Server internal error*/
BVCU_RESULT_E_MAXRETRIES, /*达到最大重试次数*/

关于对H.265的支持,我们SDK只支持I帧和P帧, 不支持B帧,SEI等其它辅助信息,都要去掉。
音频支持AAC,采样率固定8K,码率可变。