旧项目升级P2P库说明

由于历史原因,很多二次开发项目是在2cu或Yoosee的基础上进行修改,现在为了增加新功能或者解决某些bug,在无法使用GWP2P SDK 的情况下,需要升级项目中用到的P2P库,但是由于期间经历了多次P2P库的升级,升级过程中可能会遇到各种问题,特编写此文档进行说明。

适用范围

使用旧P2P库或者2cu、Yoosee进行二次开发,需要升级到最新P2P库。

库文件

本文档指的的P2P库是P2P静态库,静态库名称为libAVCtrl.a或者多个libAVCtrl_xxx.a(如libAVCtrl_arm64.a,libAVCtrl_armv7.a),头文件P2PCInterface.h

升级过程

1.替换文件

删除项目中的libAVCtrl.a或者所有libAVCtrl_xxx.a格式的文件,删除P2PCInterface.h。下载最新的P2P库,导入项目。

2.枚举修改记录

P2PCInterface.h修改过部分错误的枚举命名,如果项目中有用到这些,直接替换为修改后的名称即可。

修改前 修改后
USR_CMD_PLAY_CTL USR_CMD_REMOTLY_PLAY_CTL
LAN_TRANS_SET_INIT_PASSWD 这个枚举不应该放在这个头文件,如果代码中用到,
直接改为其枚举值48
PUSH_MESG_FRIEND PUSH_MESG_TYPE_NORMAL

3.初始化参数改变

P2P初始化函数fgP2PInit(sP2PInitPrm * pPrm),增加了部分参数需要赋值;也增加了一些回调函数指针,需要实现相关函数并赋值。

增加的参数 参数来源
SessionID1
SessionID2
新的P2P库增加了帐号踢飞功能,需要传入登录时接口返回的两个SessionID,请使用最新GWNet SDK的登录接口进行登录。
如果不想使用GWNet,可以在原来的登录接口增加一个参数SessionID2=1;或者使用不支持踢飞功能的P2P库,SessionID1和ID2传0。
void (*vIndexFriendsStatusUpdate)(sFriendsTypeV2 *pFriends) 新的在线状态回调函数
void (* LoginInAnotherOne)(DWORD LoginStatus) 帐号在别处登录(踢飞)回调函数,踢飞后P2P连接会断开,重连需登出APP重新登录,传入新的SessionID
pHostName 服务器列表请用"|p2p1.cloudlinks.cn|p2p2.cloudlinks.cn|p2p3.cloud-links.net|p2p4.cloud-links.net|p2p5.cloudlinks.cn|p2p6.cloudlinks.cn|p2p7.cloudlinks.cn|p2p8.cloudlinks.cn|p2p9.cloudlinks.cn|p2p10.cloudlinks.cn"

以上新增参数的获取以及回调函数的实现,可参考Yoosee2.7及以上版本代码,联系客服获取。

3.获取设备状态架构改变

在旧的P2P库中,分别从各个P2P服务器获取设备在线状态,效率较低,后面新增了索引(Index)服务器,大大提高获取设备状态的效率。同时新接口也增加了部分设备信息(布防状态、子类型)。

旧的获取设备状态接口fgP2PGetFriendsStatus,通过void (* vFriendsStatusUpdate)(sFriendsType * pFriends)回调状态;新的库分为两个接口fgGetFriendsStatusFromP2PServerfgGetFriendsStatusFromIndexServer,前者对应旧的接口,后者是新接口,新接口通过void (*vIndexFriendsStatusUpdate)(sFriendsTypeV2 *pFriends);回调设备在线状态。

如果不使用新接口,将原项目中的fgP2PGetFriendsStatus直接改为fgGetFriendsStatusFromP2PServer即可。新库只使用旧接口获取可能只能获取到列表中部分设备的在线状态。
如果使用新接口,则在获取设备状态时,优先使用fgGetFriendsStatusFromIndexServer进行获取,具体代码可参考Yoosee2.7或者之后版本的代码。

4.部分新增的接口功能说明

新增接口 说明
DWORD dwGetAvBytesPerSec() 监控时的网络速率
unsigned int iP2PLinkStatus() 获取P2P连接状态
返回值说明见函数定义上方的define