小程序 SDK 使用

微吼云小程序推流 sdk

当前版本仅对 live-pusher 的方法进行了封装,使用本 sdk 方法详细参数请参考微信文档

目录结构

  • index 为入口文件夹

  • pusher 为推流页面

  • minisdk 为 SDK 文件

  • 其余为微信小程序必要文件

使用方法

import VhallPublisher from '../../minisdk/vhall-mpsdk-publisher-1.0.0'
// 先实例化对象
this.vhallPublisher = new VhallPublisher()
/**
 * 再调用实例化SDK方法,之后所有的方法均应该在createInstance的成功函数后执行
 * @param {Object} opt- 包括 appId、channelId、accountId、token,
 * pusherId(live-pusher的id),
 * singleAudio(选填): 是否为音频直播 0-否(默认) 1-是
 * 特别说明:纯音频直播和音视频直播推流地址和解码所需时间不同,请按需求选择
 * profile(选填): live-pusher清晰度,即mode属性,默认RTC
 * THIS(选填,小程序this,仅用于选中自定义组件中的live-pusher,不在自定义组件中可以不传)
 * @param {function} 成功函数
 * @param {function} 失败函数
 */
this.vhallPublisher.createInstance(
  opt,
  res => {
    // 成功函数,res结构:{url:推流地址}
    this.setData({ url: res.url })
  },
  e => {
    // 实例化失败
    console.log(e)
  }
)

监听回调相关(生效的前提是 按照 statechange 函数的使用方式将 live-pusher 组件暴露的参数传入 sdk)

监听正常播放
/**
 * 开始播放的回调,在 组件状态码第一次为 1002 时触发
 */
this.vhallPublisher.on('connected', () => {
  console.log('connected')
  wx.showToast({ title: '开始推流', icon: 'none' })
})
sdk正在重连时触发
/**
 * sdk正在重连时触发,sdk会在code为-1307、3001、3002、3003、3004、3005时,5s触发一次重连
 */
this.vhallPublisher.on('reconnecting', () => {
  console.log('reconnecting')
  wx.showToast({ title: '网络异常,重连中~', icon: 'none' })
})
sdk重连成功并返回新的推流地址
/**
 * sdk重连取得新的推流地址函数
 * returns {Object} - url : 新的推流地址
 */
this.vhallPublisher.on('reconnectReady', ({ url }) => {
  console.log('reconnectReady')
  this.setData({ url }, () => {
    this.start()
  })
})
sdk重连成功并开始播放时触发
/**
 * 重连成功函数,重连开始后到组件状态码再一次返回1002时触发
 */
this.vhallPublisher.on('reconnected', () => {
  console.log('reconnected')
  wx.showToast({ title: '重连成功', icon: 'none' })
})
sdk重连失败函数
/**
 * 重连失败函数
 * returns {Object} - err : 接口返回的错误信息
 */
this.vhallPublisher.on('reconnectFail', err => {
  wx.showToast({ title: '重连失败', icon: 'none' })
  console.log('reconnectFail', err)
})

销毁

this.vhallPublisher.destroy()

LivePusherContext 方法列表,名称、参数遵循小程序开发文档

开始推流,同时开启摄像头预览
/**
 * 开始推流,同时开启摄像头预览
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.start(params)
停止推流,同时停止摄像头预览
/**
 * 停止推流,同时停止摄像头预览
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.stop(params)
暂停推流
/**
 * 暂停推流
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.pause(params)
恢复推流
/**
 * 恢复推流
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.resume(params)
切换前后摄像头
/**
 * 切换前后摄像头
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.switchCamera(params)
快照
/**
 * 快照
 * @param {String} params- 必填
 * eg:
 * {
 * success:res=>{res.tempImagePath -- 图片路径},
 * fail:()=>{},
 * complete:()=>{}, 成功/失败都会执行
 * }
 */
this.vhallPublisher.snapshot(params)
切换手电筒
/**
 * 切换手电筒
 * @param {Object} params - 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.toggleTorch(params)
播放背景音
/**
 * 播放背景音
 * @param {Object} params- 必填
 * eg:
 * {
 * url:string - 音频资源地址
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.playBGM(params)
暂停背景音
/**
 * 暂停背景音
 * @param {Object} params- 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.pauseBGM(params)
恢复背景音
/**
 * 恢复背景音
 * @param {Object} params- 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.resumeBGM(params)
停止背景音
/**
 * 停止背景音
 * @param {Object} params- 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.stopBGM(params)
设置背景音音量
/**
 * 设置背景音音量
 * @param {Object} params
 * eg:
 * {
 * volume : string 音量,范围(0-1)
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.setBGMVolume(params)
设置麦克风音量
/**
 * 设置麦克风音量
 * @param {Object} params
 * eg:
 * {
 * volume : number 音量,范围(0.0-1.0)
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.setMICVolume(params)
开启摄像头预览
/**
 * 开启摄像头预览
 * @param {Object} params- 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.startPreview(params)
关闭摄像头预览
/**
 * 关闭摄像头预览
 * @param {Object} params- 选填
 * eg:
 * {
 * success:()=>{},
 * fail:()=>{},
 * complete:()=>{},
 * }
 */
this.vhallPublisher.stopPreview(params)

live-pusher 组件监听方法列表,名称、参数遵循小程序开发文档

  /**
   * 状态变化事件,
   * @param {Object} params- detail = {code} 同微信文档
   */
  this.vhallPublisher.statechange(e)

  /**
   * 网络状态通知,
   * @param {Object} params- detail = {info} 同微信文档
   */
  this.vhallPublisher.netstatuschange(e)

  /**
   * 渲染错误事件,
   * @param {Object} params- detail = {errMsg, errCode} 同微信文档
   */
  this.vhallPublisher.pusherror(e)

  /**
   * 背景音开始播放时触发
   * @param {Object} params- 同微信文档
   */
  this.vhallPublisher.bgmstart(e)

  /**
   * 背景音进度变化时触发,
   * @param {Object} params- detail = {progress, duration} 同微信文档
   */
  this.vhallPublisher.bgmprogress(e)

  /**
   * 背景音播放完成时触发
   * @param {Object} params- 参考微信文档
   */
  this.vhallPublisher.bgmcomplete(e) {}

微信错误码摘录

代码 说明
10001 用户禁止使用摄像头
10002 用户禁止使用录音
10003 背景音资源(BGM)加载失败
10004 等待画面资源(waiting-image)加载失败

状态码(code)

代码 说明
1001 已经连接推流服务器
1002 已经与服务器握手完毕,开始推流
1003 打开摄像头成功
1004 录屏启动成功
1005 推流动态调整分辨率
1006 推流动态调整码率
1007 首帧画面采集完成
1008 编码器启动
-1301 打开摄像头失败
-1302 打开麦克风失败
-1303 视频编码失败
-1304 音频编码失败
-1305 不支持的视频分辨率
-1306 不支持的音频采样率
-1307 网络断连,且经多次重连抢救无效,更多重试请自行重启推流
-1308 开始录屏失败,可能是被用户拒绝
-1309 录屏失败,不支持的Android系统版本,需要5.0以上的系统
-1310 录屏被其他应用打断了
-1311 Android Mic打开成功,但是录不到音频数据
-1312 录屏动态切横竖屏失败
1101 网络状况不佳:上行带宽太小,上传数据受阻
1102 网络断连, 已启动自动重连
1103 硬编码启动失败,采用软编码
1104 视频编码失败
1105 新美颜软编码启动失败,采用老的软编码
1106 新美颜软编码启动失败,采用老的软编码
3001 RTMP -DNS解析失败
3002 RTMP服务器连接失败
3003 RTMP服务器握手失败
3004 RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期
3005 RTMP 读/写失败

网络状态数据(info)

键名 说明
videoBitrate 当前视频编/码器输出的比特率,单位 kbps
audioBitrate 当前音频编/码器输出的比特率,单位 kbps
videoFPS 当前视频帧率
videoGOP 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s
netSpeed 当前的发送/接收速度
netJitter 网络抖动情况,抖动越大,网络越不稳定
videoWidth 视频画面的宽度
videoHeight 视频画面的高度