Skip to content

Latest commit

 

History

History
115 lines (99 loc) · 5.27 KB

3.0.0版本xp2p插件变更日志.md

File metadata and controls

115 lines (99 loc) · 5.27 KB

3.0.1 xp2p插件变更日志

  • 修复设备断开连接后,未正确处理eof逻辑的问题
// 下载视频文件示例:
const file = { file_name: 'p2p_demo_file.mp4' };
const params = `channel=0&file_name=${file.file_name}&offset=0`;

// 临时文件路径
const filePath = `${wx.env.USER_DATA_PATH}/${file.file_name.replace('/', '_')}`;

// 使用FileSystemManager组装文件
const fileSystemManager = wx.getFileSystemManager();

p2pModule.startLocalDownload(ipcId, { urlParams: params }, {
  onChunkReceived: (chunk) => {
    // 接收chunk包并组装文件
    fileSystemManager.appendFileSync(filePath, chunk, 'binary')
  },
  onComplete: () => {
    // 流结束了,会触发onComplete回调函数
    // 保存组装的临时视频文件到相册
    wx.saveVideoToPhotosAlbum({
      filePath,
      success(res) {
        // saved file handler
      },
      fail(res) {
        // Error handler
      }
    });
  },
  onSuccess: () => {
    // 下载成功了,此时拿到的数据是完整的了
  },
  onFailure: (result) => {
    // http.status >= 400 && http.status < 600 会触发这个事件
    // Error handler
  },
  onError: (result) => {
    // 网络传输错误,虽然http.status 为 200, 但下载过程中失败了。会触发这个事件
  },
});
  • 修复某些情况下使用udp6返回空的data.local.address时导致流程报错的问题

3.0.0 xp2p插件变更日志

此次变更为打断性更新,不兼容之前的版本,即1.x.x版,2.x.x版

变更列表:

修改 init函数,入参和返回值均有改动,用法如下:

p2pModule
  .init({
    appParams: {
      appid: $yourTCloudAppId,
      appOauthId: $yourAppOauthId,
      appKey: $yourAppKey,
      appSecretKey: $yourAppSecretKey,
      appPackage: $yourAppPackage,
    },
    initParams: {
      deviceP2PVersion: p2pModule.DeviceVersion.Device_2_4 // Device_2_3: 2.3设备, Device_2_4: 2.4设备
      eventHandler: (event, detail) => {
        // 各种本地NAT相关的事件通知,取值见api说明,要求最低版本 1.1.1
      },
    }
  })
  .then((res) => {
    console.log('init res', res);
  })
  .catch(({ errcode, errmsg }) => {
    console.error('init error', errcode, errmsg);
  });

多了initParams对象,将原来的eventHandler移动进来,添加deviceP2PVersion属性,该属性必传。 注意,调用init函数中,正确拼写字段名哦

res对象是内部类的实例,有如下属性:deviceP2PVersion, localXp2pInfo, 方法:reset, 该方法用于重置当前版本的p2p模块

调用init函数报错 -2000, 仔细检查init函数入参,一般是入参异常导致的

添加 getModule函数,可以通过p2pModule.getModule(p2pModule.DeviceVersion.Device_2_3) 来获取上步init后的res对象,因此不需要将res对象保存到本地变量, 如果要重置对应版本的p2p模块,可以这样使用:

p2pModule.getModule(p2pModule.DeviceVersion.Device_2_3).reset()
  .then(res => {
    console.log('init res', res);
  })
  .catch(({ errcode, errmsg }) => {
    console.error('init error', errcode, errmsg);
  });

注意:reset方法和init方法返回的res值是一致的结构

移除 resetP2P函数,该函数原用于重新初始化p2p sdk, 现在初始化p2p模块,可以通过保存init后的res对象来操作,也可以通过调用getModule函数来操作

修改 getLocalXp2pInfo函数,获取本地的peername。现在调用该函数需要传入要获取初始化好的p2p模块所对应的版本号,推荐使用getModule来获取本地的peername

修改 startLocalDownload方法入参,该函数用于下载录像文件,原先的调用方式startLocalDownload({ urlParams: '_crypto=off&channel=0&file_name=xxx&offset=0' }),在2.0.4版本的插件中做了调整,将加密参数提取出来,单独作为一个参数offCrypto来进行传递,最新的调用方式如下:

// offCrypto指明是否下载(不)加密的视频
p2pModule.startLocalDownload(ipcId, { urlParams: params, offCrypto: false })

该函数在2.0.4版本的插件中做了调整, 如果从2.0.4版本以上升级到3.0.0则不需要关注该函数,但如果是从2.0.3及以下版本直接升级到3.0.0版本,对该函数的调用需要注意参数的调整

提示

接入3.x.x版本(兼容版本)的注意事项:

兼容版本提供了同时接入不同设备版本的能力。在这个版本中,允许同时存在多个p2p模块(我们定义init函数返回的p2p模块)。即可以调用多次的init函数,以初始化不同版本的p2p模块。在后续与设备的开流过程中,sdk会根据xp2pInfo信息自动选择相应的p2p模块,以进行网络传输

tips:

  • 如果确定只有最新的2.4.x的设备版本,可以只初始化2.4的设备,这样可以享受到快速出图特性
  • 如果是2.3.x,2.4.x的设备都有,可以使用Promise.all一开始就将两个版本的模块都初始化好
  • 如果确定刚进入小程序就连接的是2.4.x的设备版本,后续可能会用到2.3.x的设备,可以先init好2.4版本模块,然后在then方法中再init2.3版本模块以备后用。
  • p2pModule.DeviceVersion当前有如下取值,Device_2_3: 2.3设备, Device_2_4: 2.4设备