微信小程序官方帐号发布

基础库 3.9.3 开始支持,低版本需做兼容处理。

渲染框架支持情况:WebView

功能描述

贴图组件。

贴图组件为微信小程序开发者提供了在微信小程序里直接发表和消费贴图的能力。 该组件可以帮助开发者实现社区讨论、用户交流的功能,并且让更多人通过贴图发现微信小程序。

话题定制

贴图组件上会展示话题名称,用户从组件发表时也会默认带上对应的#话题。默认使用微信小程序名称作为话题,开发者也可通过topic参数自定义,最多20字。

内容展示

  • 组件里会展示从该组件发表的所有贴图(如果一个微信小程序里有多个同话题名称的组件,其下的贴图也会互通展示)。
  • 通过limit参数控制最多展示的贴图数量,上限10条。
  • 当组件下内容为空时,默认显示“来写下第一条吧”,可通过placeholder参数自定义文案,最多显示一行。

相关内容

修改话题名称后,历史发表内容不会在新话题中展示。为保留历史内容沉淀,在话题组件下方的“相关内容”区域可展示不在此话题下的历史发表内容。该区域默认展示,可通过show-related参数设置不展示。

推荐用户添加指定链接

设置recommend-pathrecommend-title参数,编辑器支持推荐自定义标题的微信小程序链接,用户点击添加后将在正文展示链接卡片。

内容管理

  • 可以前往微信小程序后台对单条贴图进行置顶或拉黑(路径:开发管理 → 接口设置 → 接口权限 → 其它组件 → 贴图)。
  • 同一个话题下最多置顶3条贴图。
  • 微信小程序后台支持查看每个组件下的基础数据。

属性说明

属性 类型 默认值 必填 说明 最低版本
topic string 话题名称,最多20字,默认使用微信小程序名称 3.9.3
limit number 4 微信小程序页面内最多展示的贴图数量,超出后剩余的贴图需要点击「查看更多」前往查看 3.10.3
background-color color #f7f7f7 贴图组件的背景颜色 3.9.3
color-unity boolean false 是否需要色彩统一,话题名称颜色和贴图卡片背景颜色是否对齐 3.9.3
placeholder string 来写下第一条吧 无内容时的占位文案 3.10.2
show-related boolean true 是否展示相关内容 3.16.0
recommend-path string 贴图链接卡片跳转页面 3.16.1
recommend-title string 贴图链接卡片标题 3.16.1
binderror eventhandle 列表拉取失败时触发 3.9.3
bindempty eventhandle 列表拉取为空时触发 3.9.3
bindpublishsuccess eventhandle 发表成功时触发,在e.detail中可获取发表的贴图链接postUrl(只有在真正发表完成后链接才可访问) 3.11.3
bindpublishfail eventhandle 发表失败时触发 3.11.3

Bug & Tip

  1. tip:暂不支持在微信 Windows 版、微信 Mac 版及微信鸿蒙版本的微信小程序上显示发表按钮。
  2. tip:话题名称要求不超过20字,超过将不展示该组件。

示例代码

<official-account-publish topic="和coco一起做好事"></official-account-publish>

ad-custom

基础库 2.10.4 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

原生模板 广告。

属性说明

属性 类型 默认值 必填 说明 最低版本
unit-id string 广告单元id,可在微信小程序管理后台的流量主模块新建 2.10.4
ad-intervals number 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 模板 广告不会自动刷新) 2.10.4
bindload eventhandle 广告加载成功的回调 2.10.4
binderror eventhandle 广告加载失败的回调,event.detail = {errCode: 1002} 2.10.4

错误码信息与解决方案表

错误码是通过binderror回调获取到的错误信息。

代码 异常情况 理由 解决方案
1000 后端错误调用失败 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。
1001 参数错误 使用方法错误 可以前往developers.weixin.qq.com确认具体教程(微信小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。
1002 广告单元无效 可能是拼写错误、或者误用了其他APP的广告ID 请重新前往mp.weixin.qq.com确认广告位ID。
1003 内部错误 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。
1004 无适合的广告 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 属于正常情况,且开发者需要针对这种情况做形态上的兼容。
1005 广告组件审核中 你的广告正在被审核,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1006 广告组件被驳回 你的广告审核失败,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1007 广告组件被驳回 你的广告能力已经被封禁,封禁期间无法展现广告 请前往mp.weixin.qq.com确认微信小程序广告封禁状态。
1008 广告单元已关闭 该广告位的广告能力已经被关闭 请前往mp.weixin.qq.com重新打开对应广告位的展现。

Bug & Tip

  1. tip:在无广告展示时,ad-custom 标签不会占用高度
  2. tipad-custom 组件不支持触发 bindtap 等触摸相关事件
  3. tip:目前可以给 ad-custom 标签设置 wxss 样式调整广告宽度,以使广告与页面更融洽,但请遵循微信小程序流量主应用规范
  4. tip:监听到error回调后,开发者可以针对性的处理,比如隐藏广告组件的父容器,以保证用户体验,但不要移除广告组件,否则将无法收到bindload的回调
  5. tip:不同模板涉及一些不同的使用场景,具体方式请参考模板编辑器

ad

基础库 1.9.94 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

Banner 广告。

通用属性

属性 类型 默认值 必填 说明 最低版本
unit-id string 广告单元id,可在微信小程序管理后台的流量主模块新建 1.9.94
ad-intervals number 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 Banner 广告不会自动刷新) 2.3.1
ad-type string banner 广告类型,默认为展示banner,可通过设置该属性为video展示视频广告, grid为格子广告 2.8.0
ad-theme string white 2.8.0
bindload eventhandle 广告加载成功的回调 2.2.1
binderror eventhandle 广告加载失败的回调,event.detail = {errCode: 1002} 2.2.1
bindclose eventhandle 广告关闭的回调 2.6.5

错误码信息与解决方案表

错误码是通过binderror回调获取到的错误信息。

代码 异常情况 理由 解决方案
1000 后端错误调用失败 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。
1001 参数错误 使用方法错误 可以前往developers.weixin.qq.com确认具体教程(微信小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。
1002 广告单元无效 可能是拼写错误、或者误用了其他APP的广告ID 请重新前往mp.weixin.qq.com确认广告位ID。
1003 内部错误 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。
1004 无适合的广告 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 属于正常情况,且开发者需要针对这种情况做形态上的兼容。
1005 广告组件审核中 你的广告正在被审核,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1006 广告组件被驳回 你的广告审核失败,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1007 广告组件被封禁 你的广告能力已经被封禁,封禁期间无法展现广告 请前往mp.weixin.qq.com确认微信小程序广告封禁状态。
1008 广告单元已关闭 该广告位的广告能力已经被关闭 请前往mp.weixin.qq.com重新打开对应广告位的展现。

Bug & Tip

  1. tip:在无广告展示时,ad 标签不会占用高度
  2. tipad 组件不支持触发 bindtap 等触摸相关事件
  3. tip:目前可以给 ad 标签设置 wxss 样式调整广告宽度,以使广告与页面更融洽,但请遵循微信小程序流量主应用规范
  4. tip:监听到error回调后,开发者可以针对性的处理,比如隐藏广告组件的父容器,以保证用户体验,但不要移除广告组件,否则将无法收到bindload的回调。

canvas

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: 画布指南、Canvas 接口、旧版画布迁移指南

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

画布。从 2.9.0 版本开始支持一套新的 Canvas 2D 接口(需要指定 type 属性),同时支持同层渲染,原有接口不再维护。旧版本可以参考 旧版画布迁移指南 进行迁移。

属性说明

属性 类型 默认值 必填 说明 最低版本
type string 指定 canvas 类型,支持 2d (2.9.0) 和 webgl (2.7.0) 2.7.0
canvas-id string canvas 组件的唯一标识符,如果指定了 type 则不需要再指定该属性 1.0.0
disable-scroll boolean false 当在 canvas 中移动并且有绑定手势事件时,禁止屏幕滚动以及下拉刷新 1.0.0
bindtouchstart eventhandle 手指触摸动作开始 1.0.0
bindtouchmove eventhandle 手指触摸后移动 1.0.0
bindtouchend eventhandle 手指触摸动作结束 1.0.0
bindtouchcancel eventhandle 手指触摸动作被打断,如来电提醒、弹窗 1.0.0
bindlongtap eventhandle 手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动 1.0.0
binderror eventhandle 当发生错误时触发 error 事件,detail = {errMsg} 1.0.0

Bug & Tip

  1. tip:canvas 标签默认宽度为 300px、高度为 150px
  2. tip:同一页面中的 canvas-id 不能重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并且不再正常工作
  3. tip:请注意原生组件使用限制
  4. tip:开发者工具中默认关闭了 GPU 硬件加速,可以在开发者工具的设置中开启“硬件加速”来提高 WebGL 的渲染性能
  5. tip: WebGL 支持通过 getContext(‘webgl’, { alpha: true }) 获取透明背景的画布
  6. tip: WebGL 暂不支持真机调试,建议使用真机预览
  7. tip: Canvas 2D(新接口)需要显式设置画布宽高,默认:300*150,最大:1365*1365
  8. bug: 避免设置过大的宽高,在安卓下会有崩溃的问题
  9. tip: iOS 暂不支持 pointer-events
  10. tip: 在 Mac 或 Windows 微信小程序下,如果当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)
  11. tip: 鸿蒙 OS 下暂不支持外接纹理

Canvas 2D 示例代码

在开发者工具中预览效果

  <!-- canvas.wxml -->
  <canvas type="2d" id="myCanvas"></canvas>
// canvas.js
Page({
  onReady() {
    const query = wx.createSelectorQuery()
    query.select('#myCanvas')
      .fields({ node: true, size: true })
      .exec((res) => {
        const canvas = res[0].node
        const ctx = canvas.getContext('2d')

        const dpr = wx.getSystemInfoSync().pixelRatio
        canvas.width = res[0].width * dpr
        canvas.height = res[0].height * dpr
        ctx.scale(dpr, dpr)

        ctx.fillRect(0, 0, 100, 100)
      })
  }
})

WebGL 示例代码

在开发者工具中预览效果

  <!-- canvas.wxml -->
  <canvas type="webgl" id="myCanvas"></canvas>
// canvas.js
Page({
  onReady() {
    const query = wx.createSelectorQuery()
    query.select('#myCanvas').node().exec((res) => {
      const canvas = res[0].node
      const gl = canvas.getContext('webgl')
      gl.clearColor(1, 0, 1, 1)
      gl.clear(gl.COLOR_BUFFER_BIT)
    })
  }
})

示例代码(旧的接口)

在开发者工具中预览效果 下载

<!-- canvas.wxml -->
<canvas style="width: 300px; height: 200px;" canvas-id="firstCanvas"></canvas>
<!-- 当使用绝对定位时,文档流后边的 canvas 的显示层级高于前边的 canvas -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas"></canvas>
<!-- 因为 canvas-id 与前一个 canvas 重复,该 canvas 不会显示,并会发送一个错误事件到 AppService -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas" binderror="canvasIdErrorCallback"></canvas>
Page({
  canvasIdErrorCallback: function (e) {
    console.error(e.detail.errMsg)
  },
  onReady: function (e) {
    // 使用 wx.createContext 获取绘图上下文 context
    var context = wx.createCanvasContext('firstCanvas')

    context.setStrokeStyle("#00ff00")
    context.setLineWidth(5)
    context.rect(0, 0, 200, 200)
    context.stroke()
    context.setStrokeStyle("#ff0000")
    context.setLineWidth(2)
    context.moveTo(160, 100)
    context.arc(100, 100, 60, 0, 2 * Math.PI, true)
    context.moveTo(140, 100)
    context.arc(100, 100, 40, 0, Math.PI, false)
    context.moveTo(85, 80)
    context.arc(80, 80, 5, 0, 2 * Math.PI, true)
    context.moveTo(125, 80)
    context.arc(120, 80, 5, 0, 2 * Math.PI, true)
    context.stroke()
    context.draw()
  }
})

map

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: wx.createMapContext

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

地图 v2.7.0 起支持同层渲染。

map组件提供了地图展示、交互、叠加点线面及文字等功能,同时支持个性化地图样式,可结合地图服务 API 实现更丰富功能。

为了更好的提供地图服务,请在调用 map 组件之前,先前往腾讯位置服务官网注册一个专属 KEY,在地图开发过程中,可以将这个专属 KEY 通过 subkey 参数传入;后续如遇到地图开发问题也可以在腾讯位置服务官网工单系统提交工单反馈解决;

地图个性化样式组件

地图个性化样式组件是腾讯位置服务为开发者提供的地图高级能力,开发者可以在法律允许的范围内定制地图风格,支持定制背景面、背景线、道路、POI等地图元素颜色、显示层级等内容;支持按照类型精细化管理POI的显示、隐藏;灵活地设计贴合业务场景的心仪地图。

购买该能力后,您可以在 MP平台「管理->付费管理->概览->地图个性化样式->去使用」中创建配置您的地图个性化样式,您可以选择我们提供的基础及高级模版,也可以通过在线编辑平台,对多种地图元素的样式进行自定义设置,以满足在不同场景下的个性化需求。

image-20221216093905347

注意:

  1. 自2023年6月29日0点起,该能力需要先购买再使用。若未购买,届时将无法使用该能力。具体购买方式见 付费管理。
  2. 自2023年6月29日0时起,个性化地图配置界面的入口统一为微信公众平台-付费管理,请从此入口进入,腾讯位置服务官网入口不再使用。已经在微信小程序生效的个性化样式配置,将于2023年6月29日0时变更为默认样式,如有个性化样式配置需求,请于6月29日0时前,前往微信公众平台-付费管理进行相关能力的开通和配置。

地图服务API

地图服务API 与map组件基于同一套数据体系,无缝贴合,叠加使用可实现更丰富的功能。 提供:地点搜索、关键词输入提示、正/逆地址解析(经纬度与地址互转)驾车与步行路线规划等功能。

image-20221216091852465

详情见:地图服务API在微信小程序中的使用方法

若开发者使用通过LBS开放平台自行申请的服务账号,在微信小程序连接并调用位置服务产品用于商业行为(政府公共事务及公益组织事务除外),腾讯位置服务有权收取商业授权费,详细内容可以查看或咨询腾讯微位置服务官网

深入控制地图

通过微信小程序API中wx.createMapContext方法,创建 map 上下文 MapContext 对象,通过其实现更细粒度的地图交互和功能,包括:控制地图视野、获取地图位置与视角等信息、marker移动(轨迹回放)、动态创建个性化图层、拉起地图APP选择导航等

微信小程序插件

现成插件简单接入,提供:路线规划、地图选点、城市选择器、地铁图 常用功能。

详情见:微信小程序地图插件使用指南

开源示例中心

包含Map组件、服务API、插件等功能使用方法,全面了解微信小程序下的所有地图能力。示例内容源码开放,降低各位开发者接入成本。

地图基础属性

属性说明

属性 类型 默认值 必填 说明 最低版本
longitude number 中心经度 1.0.0
latitude number 中心纬度 1.0.0
scale number 16 缩放级别,取值范围为3-20 1.0.0
min-scale number 3 最小缩放级别 2.13.0
max-scale number 20 最大缩放级别 2.13.0
markers Array.<marker> 标记点 1.0.0
covers Array.<cover> 即将移除,请使用 markers 1.0.0
polyline Array.<polyline> 路线 1.0.0
circles Array.<circle> 1.0.0
controls Array.<control> 控件(即将废弃,建议使用 cover-view 代替) 1.0.0
include-points Array.<point> 缩放视野以包含所有给定的坐标点 1.0.0
show-location boolean false 显示带有方向的当前定位点,3.10.0起需要用户位置授权。3.13.2起如果开发者没有手动申请,则会自动申请 1.0.0
polygons Array.<polygon> 多边形 2.3.0
subkey string 地图能力【个性化地图】使用的key,不支持动态修改 2.3.0
layer-style number 1 地图能力【个性化地图】配置的 style
rotate number 0 旋转角度,范围 0 ~ 360, 地图正北和设备 y 轴角度的夹角 2.5.0
skew number 0 倾斜角度,范围 0 ~ 40 , 关于 z 轴的倾角 2.5.0
enable-3D boolean false 展示3D楼块 2.3.0
show-compass boolean false 显示指南针 2.3.0
show-scale boolean false 显示比例尺,工具暂不支持 2.8.0
enable-overlooking boolean false 开启俯视 2.3.0
enable-auto-max-overlooking boolean false 开启最大俯视角,俯视角度从 45 度拓展到 75 度 2.26.0
enable-zoom boolean true 是否支持缩放 2.3.0
enable-scroll boolean true 是否支持拖动 2.3.0
enable-rotate boolean false 是否支持旋转 2.3.0
enable-satellite boolean false 是否开启卫星图 2.7.0
enable-traffic boolean false 是否开启实时路况 2.7.0
enable-poi boolean true 是否展示 POI 点 2.14.0
enable-building boolean 是否展示建筑物 2.14.0
setting object 配置项 2.8.2
bindtap eventhandle 点击地图时触发,从2.9.0版本开始会返回经纬度信息 1.0.0
bindmarkertap eventhandle 点击标记点时触发,e.detail = {markerId} 1.0.0
bindlabeltap eventhandle 点击标签时触发,e.detail = {markerId} 2.9.0
bindcontroltap eventhandle 点击控件时触发,e.detail = {controlId} 1.0.0
bindcallouttap eventhandle 点击标记点对应的气泡时触发e.detail = {markerId} 1.2.0
bindupdated eventhandle 在地图渲染更新完成时触发 1.6.0
bindregionchange eventhandle 视野发生变化时触发 2.3.0
bindpoitap eventhandle 点击地图上的兴趣点(POI)时触发,e.detail = {name, longitude, latitude} 2.3.0
bindpolylinetap eventhandle 点击地图路线时触发,e.detail = {longitude, latitude} 3.1.0
bindabilitysuccess eventhandle 地图能力生效时触发,e.detail = {ability, errCode, errMsg}
bindabilityfail eventhandle 地图能力失败时触发,e.detail = {ability, errCode, errMsg}
bindauthsuccess eventhandle 地图鉴权成功时触发,e.detail = {errCode, errMsg}
bindinterpolatepoint eventhandle MapContext.moveAlong 插值动画时触发。e.detail = {markerId, longitude, latitude, animationStatus: "interpolating" | "complete"} 3.1.0
binderror eventhandle 组件出错时触发,例如创建或鉴权失败,e.detail = {longitude, latitude}

regionchange 返回值

视野改变时,regionchange 会触发两次,返回的 type 值分别为 begin 和 end。

从2.8.0版本开始,begin 阶段会返回 causedBy,有效值为 gesture(手势触发)和 update(接口触发)。

从2.3.0版本开始,end 阶段会返回 causedBy,有效值为 drag(拖动导致)、scale(缩放导致)、update(调用更新接口导致)。

e = {causedBy, type, detail: {rotate, skew, scale, centerLocation, region}}

setting

提供 setting 对象来统一设置地图配置。同时,对于一些动画属性如 rotateskew,如果通过 setData 分开设置,它们无法同时生效,需要通过 setting 来统一修改。

// 默认值
const setting = {
  skew: 0,
  rotate: 0,
  showLocation: false,
  showScale: false,
  subKey: '',
  layerStyle: 1,
  enableZoom: true,
  enableScroll: true,
  enableRotate: false,
  showCompass: false,
  enable3D: false,
  enableOverlooking: false,
  enableSatellite: false,
  enableTraffic: false,
}

this.setData({
  // 只有设置的属性会生效,其他属性不受影响
  setting: {
    enable3D: true,
    enableTraffic: true
  }
})

marker

标记点用于在地图上显示标记的位置。

注意:可以结合地图服务API – 地点搜索 来实现地图搜索功能。

image-20221202072248626
属性 说明 类型 必填 备注 最低版本
id 标记点 id number marker 点击事件回调会返回这个 id。
clusterId 聚合簇的 id Number 自定义点聚合簇效果时使用
joinCluster 是否参与点聚合 Boolean 默认不参与点聚合
latitude 纬度 number 浮点数,范围 -90 到 90
longitude 经度 number 浮点数,范围 -180 到 180
title 标注点名 string 点击时显示,如果存在 callout 则会被忽略
zIndex 显示层级 number 2.3.0
iconPath 显示的图标 string 项目目录下的图片路径,支持网络路径、本地路径、代码包路径(从2.3.0版本开始)
rotate 旋转角度 number 顺时针旋转的角度,范围 0 到 360,默认为 0
alpha 标注的透明度 number 默认 1,表示不透明,范围 0 到 1
width 标注图标宽度 number/string 默认为图片实际宽度
height 标注图标高度 number/string 默认为图片实际高度
callout 标记点上方的气泡窗口 Object 支持的属性见下表,可以识别换行符。 1.2.0
customCallout 自定义气泡窗口 Object 支持的属性见下表
label 为标记点旁边增加标签 Object 支持的属性见下表,可以识别换行符。 1.2.0
anchor 经纬度在标注图标上的锚点,默认是底边中点 Object {x, y},x 表示横向(0-1),y 表示竖向(0-1)。{x: .5, y: 1} 表示底边中点 1.2.0
aria-label 无障碍访问,(属性)元素的额外描述 string 2.5.0
collisionRelation 碰撞关系 string 详见下表碰撞关系 3.4.3
collision 碰撞类型 string 详见下表碰撞关系 3.4.3

marker 碰撞关系

在一定范围内绘制多个 Marker 时,经常会出现 Marker 互相压盖的情况,从3.4.3版本开始支持设置碰撞关系。

碰撞目标

默认情况下,Marker 不参与碰撞。collision 用于设置是否参与碰撞,支持枚举值 poimarker,多种类型时用逗号 “,” 分隔。 poi: 和 poi 点碰撞后会隐藏 poi marker: 和 marker 碰撞后会隐藏自己或被碰撞的 marker

发生碰撞时,按照 zIndex 来区分优先级,优先级低的将会被隐藏。

例如 collision 设置为 poi,marker,表示与 poimarker 均会参与碰撞。

整体碰撞或区域碰撞

微信小程序中 Marker 的各个部分,包括 iconPathcalloutlabel 等,可以作为一个整体参与碰撞,也可独立开来。

collisionRelation 属性支持 alonetogether 两种值。 together: 作为整体参与碰撞后隐藏,此时忽略各部件 calloutlabelcollision 属性。 alone:独立参与碰撞后隐藏,此时各部件 calloutlabel 可单独设置 collision 属性,未填写时则与主 Marker 保持一致。

marker 上的气泡 callout

属性 说明 类型 最低版本
content 文本 string 1.2.0
color 文本颜色 string 1.2.0
fontSize 文字大小 number 1.2.0
borderRadius 边框圆角 number 1.2.0
borderWidth 边框宽度 number 2.3.0
borderColor 边框颜色 string 2.3.0
bgColor 背景色 string 1.2.0
padding 文本边缘留白 number 1.2.0
display ‘BYCLICK’:点击显示; ‘ALWAYS’:常显 string 1.2.0
textAlign 文本对齐方式。有效值: left, right, center string 1.6.0
anchorX 横向偏移量,向右为正数 number 2.11.0
anchorY 纵向偏移量,向下为正数 number 2.11.0
collision 碰撞类型 string 3.4.3

marker 上的自定义气泡 customCallout

customCallout 存在时将忽略 callouttitle 属性。自定义气泡采用 cover-view 定制,灵活度更高。

属性 说明 类型 最低版本
display ‘BYCLICK’:点击显示; ‘ALWAYS’:常显 string 2.12.0
anchorX 横向偏移量,向右为正数 number 2.12.0
anchorY 纵向偏移量,向下为正数 number 2.12.0

使用方式如下,map 组件下添加名为 calloutslot 节点,其内部的 cover-view 通过 marker-id 属性与 marker 绑定。当 marker 创建时,该 cover-view 显示的内容将作为 callout 显示在标记点上方。

<map>
  <cover-view slot="callout">
    <cover-view marker-id="1"></cover-view>
    <cover-view marker-id="2"></cover-view>
  </cover-view>
</map>

示例DEMO: https://developers.weixin.qq.com/s/cZWIojm47pjN

marker 上的气泡 label

属性 说明 类型 最低版本
content 文本 string 1.2.0
color 文本颜色 string 1.2.0
fontSize 文字大小 number 1.2.0
x label的坐标(废弃) number 1.2.0
y label的坐标(废弃) number 1.2.0
anchorX label的坐标,原点是 marker 对应的经纬度 number 2.1.0
anchorY label的坐标,原点是 marker 对应的经纬度 number 2.1.0
borderWidth 边框宽度 number 1.6.0
borderColor 边框颜色 string 1.6.0
borderRadius 边框圆角 number 1.6.0
bgColor 背景色 string 1.6.0
padding 文本边缘留白 number 1.6.0
textAlign 文本对齐方式。有效值: left, right, center string 1.6.0
collision 碰撞类型 string 3.4.3

点聚合

当地图上需要展示的标记点 marker 过多时,可能会导致界面上 marker 出现压盖,展示不全,并导致整体性能变差。针对此类问题,推出点聚合能力。

使用流程如下:

  1. MapContext.initMarkerCluster 对聚合点进行初始化配置(可选);
  2. MapContext.addMarkers 指定参与聚合的 marker;
  3. MapContext.on('markerClusterCreate', callback) 触发时,通过 MapContext.addMarkers 更新聚合簇的样式 (可选);
  4. MapContext.removeMarkers 移除参与聚合的 marker;

示例代码

在开发者工具中预览效果

需注意的是:

  1. 地图上的 marker 分为普通的 marker 与参与聚合的 marker,参与聚合时需指定属性 joinCluster 为 true;
  2. 自定义聚合簇样式时,同样通过 MapContext.addMarkers 进行绘制,此时需携带 clusterId。

polyline

指定一系列坐标点,从数组第一项连线至最后一项。绘制彩虹线时,需指定不同分段的颜色,如 points 包含 5 个点,则 colorList 应传入 4 个颜色值;若 colorList 长度小于 points.length – 1,则剩下的分段颜色与最后一项保持一致。

注:可结合 地图服务API – 驾车路线规划,实现路线计算与展示。

image-20221202072403128
属性 说明 类型 必填 备注 最低版本
points 经纬度数组 array [{latitude: 0, longitude: 0}]
color 线的颜色 string 十六进制
colorList 彩虹线 array 存在时忽略 color 值 2.13.0
width 线的宽度 number
dottedLine 是否虚线 boolean 默认 false
arrowLine 带箭头的线 boolean 默认 false,开发者工具暂不支持该属性 1.2.0
arrowIconPath 更换箭头图标 string 在 arrowLine 为 true 时生效 1.6.0
borderColor 线的边框颜色 string 1.2.0
borderWidth 线的厚度 number 1.2.0
level 压盖关系 string 默认为 abovelabels 2.14.0
textStyle 文字样式 TextStyle 折线上文本样式 2.22.0
segmentTexts 分段文本 Array<SegmentText> 折线上文本内容和位置 2.22.0

注:textStylesegmentTexts 结合可在折线线段上面绘制文字,用来显示路名。

SegmentText

属性 说明 类型 默认值
name 名称 string
startIndex 起点 number
endIndex 终点 number

TextStyle

属性 说明 类型 默认值
textColor 文本颜色 string #000000
strokeColor 描边颜色 string #ffffff
fontSize 文本大小 number 14

level 字段表示与其它地图元素的压盖关系,可选值如下:

说明 最低版本
abovelabels 显示在所有 POI 之上 2.14.0
abovebuildings 显示在楼块之上 POI 之下 2.14.0
aboveroads 显示在道路之上楼块之下 2.14.0

polygon

指定一系列坐标点,根据 points 坐标数据生成闭合多边形

image-20221202072441958
属性 说明 类型 必填 备注 最低版本
dashArray 边线虚线 Array<number> 默认值 [0, 0] 为实线,[10, 10]表示十个像素的实线和十个像素的空白(如此反复)组成的虚线 2.22.0
points 经纬度数组 array [{latitude: 0, longitude: 0}] 2.3.0
strokeWidth 描边的宽度 number 2.3.0
strokeColor 描边的颜色 string 十六进制 2.3.0
fillColor 填充颜色 string 十六进制
zIndex 设置多边形 Z 轴数值 number 2.3.0
level 压盖关系 string 默认为 abovelabels 2.14.0

circle

在地图上显示圆

image-20221202072613341
属性 说明 类型 必填 备注
latitude 纬度 number 浮点数,范围 -90 ~ 90
longitude 经度 number 浮点数,范围 -180 ~ 180
color 描边的颜色 string 十六进制
fillColor 填充颜色 string 十六进制
radius 半径 number
strokeWidth 描边的宽度 number
level 压盖关系 string 默认为 abovelabels

control

在地图上显示控件,控件不随着地图移动。即将废弃,请使用 cover-view

属性 说明 类型 必填 备注
id 控件id number 在控件点击事件回调会返回此id
position 控件在地图的位置 object 控件相对地图位置
iconPath 显示的图标 string 项目目录下的图片路径,支持本地路径、代码包路径
clickable 是否可点击 boolean 默认不可点击

position

属性 说明 类型 必填 备注
left 距离地图的左边界多远 number 默认为0
top 距离地图的上边界多远 number 默认为0
width 控件宽度 number 默认为图片宽度
height 控件高度 number 默认为图片高度

bindregionchange 返回值

属性 说明 类型 备注
type 视野变化开始、结束时触发 string 视野变化开始为begin,结束为end
causedBy 导致视野变化的原因 string 拖动地图导致(drag)、缩放导致(scale)、调用接口导致(update)

比例尺

scale 3 4 5 6 7 8 9 10 11
比例 1000km 500km 200km 100km 50km 25km 20km 10km 5km
scale 12 13 14 15 16 17 18 19 20
比例 2km 1km 500m 200m 100m 50m 20m 10m 5m

bindabilitysuccess、bindabilityfail 和 binderror 的返回值

bindabilitysuccess 和 bindabilityfail 事件会额外返回一个 ability 参数,用来指示是哪种地图能力,可能的取值有:layer-style

它们共有的参数 errCode 的定义如下:

errCode 说明 |
地图创建失败 |
0 成功 |
[-100, -500] | 服务器鉴权错误
1000 | 网络链路错误
1001 | 内部错误
1400001 | 欠费

示例代码

在开发者工具中预览效果

Bug & Tip

  1. tip:个性化地图暂不支持在工具中调试。请先使用微信客户端进行测试。
  2. tip:地图中的颜色值color/borderColor/bgColor等需使用6位(8位)十六进制表示,8位时后两位表示alpha值,如:#000000AA
  3. tip:地图组件的经纬度必填,如果不填经纬度则默认值是北京的经纬度。
  4. tip: map 组件使用的经纬度是火星坐标系,调用 wx.getLocation 接口需要指定 typegcj02
  5. tip:从 2.8.0 起 map 支持同层渲染,更多请参考原生组件使用限制
  6. tip:请注意原生组件使用限制。
  7. tip: 如果当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)

voip-room

基础库 2.11.0 开始支持,低版本需做兼容处理。

微信 鸿蒙 OS 版:支持

相关文档: wx.joinVoIPChat

渲染框架支持情况:WebView

功能描述

多人音视频对话。需用户授权 scope.camerascope.record

申请开通

暂只针对国内主体如下类目的微信小程序开放,需要先通过类目审核,再在微信小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。

一级类目/主体类型 二级类目 微信小程序内容场景
教育 在线视频课程 网课、在线培训、讲座等教育类直播
医疗 互联网医院,公立医院 问诊、大型健康讲座等直播
医疗 私立医疗机构 /
金融 银行、信托、基金、证券/期货、证券、期货投资咨询、保险、征信业务、新三板信息服务平台、股票信息服务平台(港股/美股)、消费金融 金融产品视频客服理赔、金融产品推广直播等
汽车 汽车预售服务 汽车预售、推广直播
政府主体账号 / 政府相关工作推广直播、领导讲话直播等
IT 科技 多方通信 在线会议
快递业与邮政 寄件/收件 视频客服

开通该组件权限后,开发者可在 joinVoIPChat 成功后,获取房间成员的 openid,传递给 voip-room 组件,以显示成员画面。

通用属性

属性 类型 默认值 必填 说明 最低版本
openid string 进入房间用户的 openid 2.11.0
mode string camera 对话窗口类型 2.11.0
合法值 说明
camera 自身传入 camera
video 其他用户传入 video
device-position string front 摄像头方向,仅在 mode 为 camera 时有效 2.11.0
合法值 说明
front 前置
back 后置
object-fit string fill 画面与容器比例不一致时,画面的表现形式 2.29.0
合法值 说明
fill 填充
contain 包含
cover 覆盖,安卓暂未支持,iOS 生效
binderror eventhandle 创建对话窗口失败时触发 2.11.0

Bug & Tip

  1. tip:开发者工具上暂不支持
  2. tip:请注意原生组件使用限制

示例代码

<block wx:for="{{openIdList}}" wx:key="*this">
  <voip-room
    openid="{{item}}"
    mode="{{selfOpenId === item ? 'camera' : 'video'}}">
  </voip-room>
</block>

video

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: wx.createVideoContext

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

视频(v2.4.0 起支持同层渲染)。

通用属性

属性 类型 默认值 必填 说明 最低版本
src string 要播放视频的资源地址,支持网络路径、本地临时路径、云文件ID(2.3.0) 1.0.0
duration number 指定视频时长 1.1.0
controls boolean true 是否显示默认播放控件(播放/暂停按钮、播放进度、时间) 1.0.0
danmu-list Array.<object> 弹幕列表 1.0.0
danmu-btn boolean false 是否显示弹幕按钮,只在初始化时有效,不能动态变更 1.0.0
enable-danmu boolean false 是否展示弹幕,只在初始化时有效,不能动态变更 1.0.0
autoplay boolean false 是否自动播放 1.0.0
loop boolean false 是否循环播放 1.4.0
muted boolean false 是否静音播放 1.4.0
initial-time number 0 指定视频初始播放位置 1.6.0
page-gesture boolean false 在非全屏模式下,是否开启亮度与音量调节手势(废弃,见 vslide-gesture) 1.6.0
direction number 设置全屏时视频的方向,不指定则根据宽高比自动判断 1.7.0
合法值 说明
0 正常竖向
90 屏幕逆时针90度
-90 屏幕顺时针90度
show-progress boolean true 若不设置,宽度大于240时才会显示 1.9.0
show-fullscreen-btn boolean true 是否显示全屏按钮 1.9.0
show-play-btn boolean true 是否显示视频底部控制栏的播放按钮 1.9.0
show-center-play-btn boolean true 是否显示视频中间的播放按钮 1.9.0
enable-progress-gesture boolean true 是否开启控制进度的手势 1.9.0
object-fit string contain 当视频大小与 video 容器大小不一致时,视频的表现形式 1.0.0
合法值 说明
contain 包含
fill 填充
cover 覆盖
poster string 视频封面的图片网络资源地址或云文件ID(2.3.0)。若 controls 属性值为 false 则设置 poster 无效 1.0.0
show-mute-btn boolean false 是否显示静音按钮 2.4.0
title string 视频的标题,全屏时在顶部展示 2.4.0
play-btn-position string bottom 播放按钮的位置 2.4.0
合法值 说明
bottom controls bar上
center 视频中间
enable-play-gesture boolean false 是否开启播放手势,即双击切换播放/暂停 2.4.0
auto-pause-if-navigate boolean true 当跳转到本微信小程序的其他页面时,是否自动暂停本页面的视频播放 2.5.0
auto-pause-if-open-native boolean true 当跳转到其它微信原生页面时,是否自动暂停本页面的视频 2.5.0
vslide-gesture boolean false 在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture) 2.6.2
vslide-gesture-in-fullscreen boolean true 在全屏模式下,是否开启亮度与音量调节手势 2.6.2
show-bottom-progress boolean true 是否展示底部进度条 2.8.0
ad-unit-id string 视频前贴广告单元ID,更多详情可参考开放能力视频前贴广告 2.8.1
poster-for-crawler string 用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址
show-casting-button boolean false 显示投屏按钮。安卓在同层渲染下生效,支持 DLNA 协议;iOS 支持 AirPlay 和 DLNA 协议;鸿蒙 OS 暂不支持。可以通过VideoContext的相关方法进行操作。 2.10.2
picture-in-picture-mode string/Array 设置小窗模式: push, pop,空字符串或通过数组形式设置多种模式(如: [“push”, “pop”])。鸿蒙 OS 暂不支持 2.11.0
合法值 说明
[] 取消小窗
push 路由 push 时触发小窗
pop 路由 pop 时触发小窗
picture-in-picture-show-progress boolean false 是否在小窗模式下显示播放进度 2.11.0
picture-in-picture-init-position string 小窗模式下小窗的初始显示位置,格式为 (alignment, y),其中 alignment 表示小窗吸附屏幕左侧还是右侧,可选值为 left、right,y 代表小窗最顶部所在的屏幕高度百分比 3.3.0
enable-system-pip boolean true 是否支持 iOS 系统画中画,默认支持 3.15.1
enable-auto-rotation boolean false 是否开启手机横屏时自动全屏,当系统设置开启自动旋转时生效 2.11.0
show-screen-lock-button boolean false 是否显示锁屏按钮,仅在全屏时显示,锁屏后控制栏的操作 2.11.0
show-snapshot-button boolean false 是否显示截屏按钮,仅在全屏时显示 2.13.0
show-background-playback-button boolean true 是否展示后台小窗播放按钮。鸿蒙 OS 暂不支持。基础库 3.6.0 开始默认值为 true。 2.14.3
background-poster string 进入后台小窗播放后的通知栏图标(Android 独有) 2.14.3
referrer-policy string no-referrer 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为微信小程序的 appid,{version} 为微信小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; 2.13.0
合法值 说明
origin 发送完整的referrer
no-referrer 不发送
is-drm boolean 是否为 DRM 视频源 2.19.3
is-live boolean 是否为直播源 2.28.1
provision-url string DRM 设备身份认证 url,仅 is-drm 为 true 时生效 (Android) 2.19.3
certificate-url string DRM 设备身份认证 url,仅 is-drm 为 true 时生效 (iOS) 2.19.3
license-url string DRM 获取加密信息 url,仅 is-drm 为 true 时生效 2.19.3
preferred-peak-bit-rate number 指定码率上界,单位为比特每秒 2.26.0
bindplay eventhandle 当开始/继续播放时触发play事件 1.0.0
bindpause eventhandle 当暂停播放时触发 pause 事件 1.0.0
bindended eventhandle 当播放到末尾时触发 ended 事件 1.0.0
bindtimeupdate eventhandle 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次 1.0.0
bindfullscreenchange eventhandle 视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal 1.4.0
bindwaiting eventhandle 视频出现缓冲时触发 1.7.0
binderror eventhandle 视频播放出错时触发 1.7.0
bindprogress eventhandle 加载进度变化时触发,只支持一段加载。event.detail = {buffered},百分比 2.4.0
bindloadedmetadata eventhandle 视频元数据加载完成时触发。event.detail = {width, height, duration} 2.7.0
bindcontrolstoggle eventhandle 切换 controls 显示隐藏时触发。event.detail = {show} 2.9.5
bindenterpictureinpicture eventhandler 播放器进入小窗 2.11.0
bindleavepictureinpicture eventhandler 播放器退出小窗 2.11.0
bindseekcomplete eventhandler seek 完成时触发 (position iOS 单位 s, Android 单位 ms) 2.12.0
bindcastinguserselect eventhandler 用户选择投屏设备时触发 detail = { state: “success”/”fail” }。鸿蒙 OS 暂不支持 2.32.0
bindcastingstatechange eventhandler 投屏成功/失败时触发 detail = { type, state: “success”/”fail” }。鸿蒙 OS 暂不支持 2.32.0
bindcastinginterrupt eventhandler 投屏被中断时触发。鸿蒙 OS 暂不支持 2.32.0

Bug & Tip

  1. tip:`video 默认宽度 300px、高度 225px,可通过 wxss 设置宽高。
  2. tip:从 2.4.0 起 video 支持同层渲染,更多请参考原生组件使用限制
  3. tip: 若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)

支持的格式

格式 iOS Android
mp4
mov x
m4v x
3gp
avi x
m3u8
webm x

支持的编码格式

格式 iOS Android
H.264
HEVC
MPEG-4
VP9 x

小窗特性说明

video 小窗支持以下三种触发模式(在组件上设置 picture-in-picture-mode 属性):

  1. push 模式,即从当前页跳转至下一页时出现小窗(页面栈push)

  2. pop 模式,即离开当前页面时触发(页面栈pop)

  3. 以上两种路由行为均触发小窗

此外,小窗还支持以下特性:

  • 小窗容器尺寸会根据原组件尺寸自动判断

  • 点击小窗,用户会被导航回小窗对应的播放器页面

  • 小窗出现后,用户可点击小窗右上角的关闭按钮或调用 context.exitPictureInPicture() 接口关闭小窗

当播放器进入小窗模式后,播放器所在页面处于 hide 状态(触发 onHide 生命周期),该页面不会被销毁。当小窗被关闭时,播放器所在页面会被 unload (触发 onUnload 生命周期)。

DRM 加密播放

  1. 微信小程序开发者获取到 DRM 加密的 视频地址、身份认证 url、license url
  2. 使用 video 标签将以上几个参数填入
  3. 微信小程序确认该 video 为 DRM 视频源,进行 DRM 设备身份认证并且获取播放许可证
  4. 设备身份认证通过并获取播放许可证之后,由 DRM 底层进行解密播放

Q&A

Q:为什么设备身份认证 url 要区分 Android 和 iOS ?

A:由于 Android 和 iOS 是基于不同的 DRM 协议,Android:widevine;iOS:fairplay,所以身份认证这块有所不同,需要分别提供身份认证 url。

Q:license url 的格式是什么样的?

A:目前 license url 需要支持标准 license 回包,即裸 license

示例代码

在开发者工具中预览效果

live-pusher

基础库 1.7.0 开始支持,低版本需做兼容处理。

微信小程序插件:支持,需要微信小程序基础库版本不低于 2.3.0

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: wx.createLivePusherContext

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

实时音视频录制(v2.9.1 起支持同层渲染)。需要用户授权 scope.camerascope.record

申请开通

暂只针对以下类目的微信小程序开放,需要先通过类目审核,再在微信小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。

一级类目/主体类型 二级类目 微信小程序内容场景
社交 直播 涉及非表演类在线直播(如电商类、教育类等)等。选择该类目后首次提交代码审核,需经当地互联网主管机关审核确认,预计审核时长 7 天左右
社交 直播表演 适用于提供表演类在线直播(如游戏直播、娱乐秀场类、线上演唱会、剧目直播、演艺直播等)。选择该类目后首次提交代码审核,需经当地互联网主管机关审核确认,预计审核时长 7 天左右
教育 在线视频课程 网课、在线培训、讲座等教育类直播
医疗 互联网医院,公立医疗机构,三级私立医疗机构,其他私立医疗机构 问诊、大型健康讲座等直播
金融 银行、信托、公募基金、私募基金、证券/期货、证券、期货投资咨询、保险、企业征信、新三板信息服务平台、股票信息服务平台、股票信息服务平台(港股/美股)、消费金融、融资担保、汽车金融/融资租赁 金融产品视频客服理赔、金融产品推广直播等
汽车 汽车预售 汽车预售、推广直播
政府主体账号 / 政府相关工作推广直播、领导讲话直播等
IT科技 多方通信;音视频设备 为多方提供电话会议/视频会议等服务;智能家居场景下控制摄像头
房地产服务 房地产营销 房地产营销直播服务、在线音视频带看等
商业服务 公证 在线业务办理等
公共服务 交通运输 仅适用于港澳特区政府主体提供当地的交通管理相关政务服务(如道路运输、车辆管理等)

通用属性

属性 类型 默认值 必填 说明 最低版本
url string 推流地址。目前仅支持 rtmp 格式 1.7.0
mode string RTC 模式 1.7.0
合法值 说明 最低版本
QVGA Quarter VGA 3.5.0
HVGA Half-size VGA 3.5.0
SD 标清 1.7.0
HD 高清 1.7.0
FHD 超清 1.7.0
RTC 实时通话 1.7.0
autopush boolean false 自动推流 1.7.0
enableVideoCustomRender boolean false 自定义渲染,允许开发者自行处理所采集的视频帧,详见LivePusherContext 2.29.0
muted boolean false 是否静音。即将废弃,可用 enable-mic 替代 1.7.0
enable-camera boolean true 开启摄像头 1.7.0
auto-focus boolean true 自动聚集 1.7.0
orientation string vertical 画面方向 1.7.0
合法值 说明
vertical 竖直
horizontal 水平
beauty number 0 美颜,取值范围 0-9 ,0 表示关闭。鸿蒙 OS 暂不支持 1.7.0
whiteness number 0 美白,取值范围 0-9 ,0 表示关闭 1.7.0
aspect string 9:16 宽高比,可选值有 3:4, 9:16 1.7.0
min-bitrate number 200 最小码率 1.7.0
max-bitrate number 1000 最大码率 1.7.0
audio-quality string high 高音质(48KHz)或低音质(16KHz),值为high, low 1.7.0
waiting-image string 进入后台时推流的等待画面 1.7.0
waiting-image-hash string 等待画面资源的MD5值 1.7.0
zoom boolean false 调整焦距 2.1.0
device-position string front 前置或后置,值为front, back 2.3.0
background-mute boolean false 进入后台时是否静音(已废弃,默认退后台静音) 1.7.0
mirror boolean false 设置推流画面是否镜像,产生的效果会在 live-player 中体现 2.7.0
remote-mirror boolean false 与 mirror 属性功能相同,后续 mirror 属性将被废弃 2.10.0
local-mirror string auto 控制本地预览画面是否镜像 2.10.0
合法值 说明
auto 前置摄像头镜像,后置摄像头不镜像
enable 前后置摄像头均镜像
disable 前后置摄像头均不镜像
audio-reverb-type number 0 音频混响类型 2.10.0
合法值 说明
0 关闭
1 KTV
2 小房间
3 大会堂
4 低沉
5 洪亮
6 金属声
7 磁性
enable-mic boolean true 开启或关闭麦克风 2.10.0
enable-agc boolean false 是否开启音频自动增益 2.10.0
enable-ans boolean false 是否开启音频噪声抑制 2.10.0
audio-volume-type string auto 音量类型 2.10.0
合法值 说明
auto 自动
media 媒体音量
voicecall 通话音量
video-width number 360 上推的视频流的分辨率宽度 2.10.0
video-height number 640 上推的视频流的分辨率高度 2.10.0
beauty-style string smooth 设置美颜类型。鸿蒙 OS 暂不支持 2.12.0
合法值 说明
smooth 光滑美颜
nature 自然美颜
filter string standard 设置色彩滤镜 2.12.0
合法值 说明
standard 标准
pink 粉嫩
nostalgia 怀旧
blues 蓝调
romantic 浪漫
cool 清凉
fresher 清新
solor 日系
aestheticism 唯美
whitening 美白
cerisered 樱红
picture-in-picture-mode string/Array 设置小窗模式: push, pop,空字符串或通过数组形式设置多种模式(如: [“push”, “pop”]) 2.25.0
合法值 说明
[] 取消小窗
push 路由 push 时触发小窗
pop 路由 pop 时触发小窗
voice-changer-type number 0 0:关闭变声;1:熊孩子;2:萝莉;3:大叔;4:重金属;6:外国人;7:困兽;8:死肥仔;9:强电流;10:重机械;11:空灵 2.31.0
custom-effect boolean false 是否启动自定义特效,设定后不能更改 2.29.1
skin-whiteness number 0 自定义特效美白效果,取值 0~1。需要开启 custom-effect 2.29.1
skin-smoothness number 0 自定义特效磨皮效果,取值 0~1。需要开启 custom-effect 2.29.1
face-thinness number 0 自定义特效瘦脸效果,取值 0~1。需要开启 custom-effect 2.29.1
eye-bigness number 0 自定义特效大眼效果,取值 0~1。需要开启 custom-effect 2.29.1
fps number 15 帧率,有效值为 1~30 2.31.0
mute-on-audio-conflict boolean false 音频冲突时是否静音 3.16.2
bindstatechange eventhandle 状态变化事件,detail = {code} 1.7.0
bindnetstatus eventhandle 网络状态通知,detail = {info} 1.9.0
binderror eventhandle 渲染错误事件,detail = {errMsg, errCode} 1.7.4
bindbgmstart eventhandle 背景音开始播放时触发 2.4.0
bindbgmprogress eventhandle 背景音进度变化时触发,detail = {progress, duration} 2.4.0
bindbgmcomplete eventhandle 背景音播放完成时触发 2.4.0
bindaudiovolumenotify eventhandle 返回麦克风采集的音量大小 2.12.0
bindenterpictureinpicture eventhandler 进入小窗 2.25.0
bindleavepictureinpicture eventhandler 退出小窗 2.25.0

Bug & Tip

  1. tip:开发者工具上暂不支持。
  2. tip:live-pusher 默认宽度为100%、无默认高度,请通过wxss设置宽高。
  3. tipwaiting-image 属性在 2.3.0 起完整支持网络路径、临时文件和包内路径。
  4. tip:请注意原生组件使用限制。
  5. tip: 相关介绍和原理可参考此文章

错误码(errCode)

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

状态码(code)

代码 说明
1001 推流:已经连接推流服务器
1002 推流:已经与服务器握手完毕,开始推流
1003 推流:打开摄像头成功
1004 推流:录屏启动成功
1005 推流:推流动态调整分辨率
1006 推流:推流动态调整码率
1007 推流:首帧画面采集完成
1008 推流:编码器启动
1009 推流:发送视频首帧
1018 推流:进房成功(ROOM协议特有)
1019 推流:退房成功(ROOM协议特有)
1020 推流:远端主播列表变化(ROOM协议特有)
1021 推流:网络变更时重进房,WiFi 切换到4G 会触发断线重连(ROOM协议特有)
1022 推流:进入房间失败(ROOM协议特有)
1031 推流:远端主播进房通知(ROOM协议特有)
1032 推流:远端主播退房通知(ROOM协议特有)
1033 推流:远端主播视频状态位变化(ROOM协议特有)
1034 推流:远端主播音频状态位变化(ROOM协议特有)
1101 推流:网络状况不佳:上行带宽太小,上传数据受阻
1102 推流:网络断连, 已启动自动重连
1103 推流:硬编码启动失败,内部会尝试切换软编码器(Android特有)
1104 推流:编码器类型发生变化
1109 推流:软编码启动失败, 内部会尝试切换硬编码器(Android特有)
2027 推流:麦克风启动成功
3001 推流:RTMP DNS解析失败
3002 推流:RTMP服务器连接失败
3003 推流:RTMP服务器握手失败
3004 推流:RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期
3005 推流:RTMP 读/写失败
-1301 推流:打开摄像头失败
-1302 推流:打开麦克风失败
-1303 推流:视频编码失败
-1304 推流:音频编码失败
-1305 推流:不支持的视频分辨率
-1306 推流:不支持的音频采样率
-1307 推流:网络断连,且经多次重连抢救无效,请自行重启推流
-1308 推流:开始录屏失败,可能是被用户拒绝
-1309 推流:录屏失败,不支持的Android系统版本,需要5.0以上的系统
-1310 推流:录屏被其他应用打断了
-1311 推流:Android Mic打开成功,但是录不到音频数据
-1312 推流:录屏动态切横竖屏失败
-1318 推流:麦克风设置参数失败,当前设备不支持设置的参数
10001 用户禁止使用摄像头
10002 用户禁止使用录音
10003 背景音资源(BGM)加载失败
10004 等待画面资源(waiting-image)加载失败
4998 Mic状态切换的时候,enable-mic触发(iOS特有)
4999 mute状态切换的时候,muted 触发(iOS特有)
5000 推流:被挂起,微信小程序或微信被退后台时挂起推流
5001 系统电话打断或者微信音视频电话打断
0 无错误

网络状态数据(info)

键名 说明
videoBitrate 当前视频编/码器输出的比特率,单位 kbps
audioBitrate 当前音频编/码器输出的比特率,单位 kbps
videoFPS 当前视频帧率
videoGOP 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s
netSpeed 当前的发送/接收速度
netJitter 网络抖动情况,抖动越大,网络越不稳定
netQualityLevel 网络质量:0:未定义 1:最好 2:好 3:一般 4:差 5:很差 6:不可用
videoWidth 视频画面的宽度
videoHeight 视频画面的高度
videoCache 主播端堆积的视频帧数
audioCache 主播端堆积的音频帧数

示例代码

在开发者工具中预览效果

  <live-pusher url="https://domain/push_stream" mode="RTC" autopush bindstatechange="statechange" style="width: 300px; height: 225px;" />
Page({
  statechange(e) {
    console.log('live-pusher code:', e.detail.code)
  }
})

live-player

基础库 1.7.0 开始支持,低版本需做兼容处理。

微信小程序插件:支持,需要微信小程序基础库版本不低于 2.3.0

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: wx.createLivePlayerContext

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

实时音视频播放(v2.9.1 起支持同层渲染)。

申请开通

暂只针对以下类目的微信小程序开放,需要先通过类目审核,再在微信小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。

一级类目/主体类型 二级类目 微信小程序内容场景
社交 直播 涉及非表演类在线直播(如电商类、教育类等)等。选择该类目后首次提交代码审核,需经当地互联网主管机关审核确认,预计审核时长 7 天左右
社交 直播表演 适用于提供表演类在线直播(如游戏直播、娱乐秀场类、线上演唱会、剧目直播、演艺直播等)。选择该类目后首次提交代码审核,需经当地互联网主管机关审核确认,预计审核时长 7 天左右
教育 在线视频课程 网课、在线培训、讲座等教育类直播
医疗 互联网医院,公立医疗机构,三级私立医疗机构,其他私立医疗机构 问诊、大型健康讲座等直播
金融 银行、信托、公募基金、私募基金、证券/期货、证券、期货投资咨询、保险、企业征信、新三板信息服务平台、股票信息服务平台、股票信息服务平台(港股/美股)、消费金融、融资担保、汽车金融/融资租赁 金融产品视频客服理赔、金融产品推广直播等
汽车 汽车预售 汽车预售、推广直播
政府主体账号 / 政府相关工作推广直播、领导讲话直播等
IT科技 多方通信;音视频设备 为多方提供电话会议/视频会议等服务;智能家居场景下控制摄像头
房地产服务 房地产营销 房地产营销直播服务、在线音视频带看等
商业服务 公证 在线业务办理等
公共服务 交通运输 仅适用于港澳特区政府主体提供当地的交通管理相关政务服务(如道路运输、车辆管理等)

通用属性

属性 类型 默认值 必填 说明 最低版本
src string 音视频地址。目前仅支持 flv, rtmp 格式 1.7.0
mode string live 模式 1.7.0
合法值 说明
live 直播
RTC 实时通话,该模式时延更低
autoplay boolean false 自动播放 1.7.0
muted boolean false 是否静音 1.7.0
orientation string vertical 画面方向 1.7.0
合法值 说明
vertical 竖直
horizontal 水平
object-fit string contain 填充模式,可选值有 containfillCrop 1.7.0
合法值 说明
contain 图像长边填满屏幕,短边区域会被填充⿊⾊
fillCrop 图像铺满屏幕,超出显示区域的部分将被截掉
background-mute boolean false 进入后台时是否静音(已废弃,默认退后台静音) 1.7.0
min-cache number 1 最小缓冲区,单位s(RTC 模式推荐 0.2s) 1.7.0
max-cache number 3 最大缓冲区,单位s(RTC 模式推荐 0.8s)。缓冲区用来抵抗网络波动,缓冲数据越多,网络抗性越好,但时延越大。 1.7.0
sound-mode string speaker 声音输出方式 1.9.90
合法值 说明
speaker 扬声器
ear 听筒
auto-pause-if-navigate boolean true 当跳转到本微信小程序的其他页面时,是否自动暂停本页面的实时音视频播放 2.5.0
auto-pause-if-open-native boolean true 当跳转到其它微信原生页面时,是否自动暂停本页面的实时音视频播放 2.5.0
picture-in-picture-mode string/Array 设置小窗模式: push, pop,空字符串或通过数组形式设置多种模式(如: [“push”, “pop”]) 2.10.3
合法值 说明
[] 取消小窗
push 路由 push 时触发小窗
pop 路由 pop 时触发小窗
picture-in-picture-init-position string 小窗模式下小窗的初始显示位置,格式为 (alignment, y),其中 alignment 表示小窗吸附屏幕左侧还是右侧,可选值为 left、right,y 代表小窗最顶部所在的屏幕高度百分比 3.3.0
enable-system-pip boolean true 是否支持 iOS 系统画中画,默认支持 3.14.1
enable-auto-rotation boolean false 是否开启手机横屏时自动全屏,当系统设置开启自动旋转时生效 2.11.0
referrer-policy string no-referrer 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为微信小程序的 appid,{version} 为微信小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; 2.13.0
合法值 说明
origin 发送完整的 referrer
no-referrer 不发送
enable-casting boolean false 是否支持投屏。开启后,可以通过 LivePlayerContext 上相关方法进行操作。 2.32.0
mute-on-audio-conflict boolean false 音频冲突时是否静音 3.16.2
bindstatechange eventhandle 播放状态变化事件,detail = {code} 1.7.0
bindfullscreenchange eventhandle 全屏变化事件,detail = {direction, fullScreen} 1.7.0
bindnetstatus eventhandle 网络状态通知,detail = {info} 1.9.0
bindaudiovolumenotify eventhandler 播放音量大小通知,detail = {} 2.10.0
bindenterpictureinpicture eventhandler 播放器进入小窗 2.11.0
bindleavepictureinpicture eventhandler 播放器退出小窗 2.11.0
bindcastinguserselect eventhandler 用户选择投屏设备时触发 detail = { state: “success”/”fail” } 2.32.0
bindcastingstatechange eventhandler 投屏成功/失败时触发 detail = { type, state: “success”/”fail” } 2.32.0
bindcastinginterrupt eventhandler 投屏被中断时触发 2.32.0

状态码

代码 说明
2001 拉流:已经连接服务器
2002 拉流:已经连接服务器,开始拉流
2003 拉流:视频首帧渲染事件
2004 拉流:视频播放开始
2007 拉流:视频播放 Loading
2008 拉流:视频解码器启动
2009 拉流:视频分辨率改变
2026 拉流:音频播放首帧事件
2030 音频设备发生改变,即当前的输入输出设备发生改变,比如耳机被拔出
2032 拉流:Audio Session 被其他 App 中断(iOS 平台特有)
2033 拉流:渲染 view 窗口变化后首帧渲染事件(比如分辨率发生变化)flv,rtmp 标准协议特有,如果期望监听视频首帧渲染事件,建议用 2003
2034 拉流:接收首帧视频
2035 拉流:解码首帧视频
2036 拉流:视频时间戳发生回退
2101 拉流:当前视频帧解码失败
2102 拉流:当前音频帧解码失败
2103 拉流:网络连不上,自动重连事件,重连最多尝试 3 次,自动重连连续失败超过三次会放弃,返回 -2301
2104 拉流:网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
2105 拉流:当前视频播放出现卡顿
2106 拉流:硬解启动失败,采用软解
2107 拉流:当前视频帧不连续,可能丢帧
2108 拉流:当前流硬解第一个 I 帧失败,SDK 自动切软解
3001 拉流:RTMP-DNS 解析失败
3002 拉流:RTMP 服务器连接失败
3003 拉流:RTMP 服务器握手失败
3005 拉流:RTMP 读/写失败,之后会发起网络重试
-2301 拉流:网络断连,且经多次重连无效,请自行重启拉流
-2302 拉流:获取拉流地址失败
0 无错误
6000 拉流:被挂起,微信小程序或微信被退后台时挂起拉流

网络状态数据

键名 说明
videoBitrate 当前视频编/码器输出的比特率,单位 kbps
audioBitrate 当前音频编/码器输出的比特率,单位 kbps
videoFPS 当前视频帧率
videoGOP 当前视频 GOP,也就是每两个关键帧(I 帧)间隔时长,单位 s
netSpeed 当前的发送/接收速度
netJitter 网络抖动情况,为 0 时表示没有任何抖动,值越大表明网络抖动越大,网络越不稳定
netQualityLevel 网络质量:0:未定义 1:最好 2:好 3:一般 4:差 5:很差 6:不可用
videoWidth 视频画面的宽度
videoHeight 视频画面的高度
videoCache 缓冲的视频总时长,单位毫秒
audioCache 缓冲的音频总时长,单位毫秒
vDecCacheSize 解码器中缓存的视频帧数(Android 端硬解码时存在)
vSumCacheSize 缓冲的总视频帧数,该数值越大,播放延迟越高
avPlayInterval 音画同步错位时间(播放),单位 ms,此数值越小,音画同步越好
avRecvInterval 音画同步错位时间(网络),单位 ms,此数值越小,音画同步越好
audioCacheThreshold 音频缓冲时长阈值,缓冲超过该阈值后,播放器会开始调控延时

小窗特性说明

live-player 小窗支持以下三种触发模式(在组件上设置 picture-in-picture-mode 属性):

  1. push 模式,即从当前页跳转至下一页时出现小窗(页面栈 push)

  2. pop 模式,即离开当前页面时触发(页面栈pop)

  3. 以上两种路由行为均触发小窗

此外,小窗还支持以下特性:

  • 小窗容器尺寸会根据原组件尺寸自动判断

  • 点击小窗,用户会被导航回小窗对应的播放器页面

  • 小窗出现后,用户可点击小窗右上角的关闭按钮或调用 context.exitPictureInPicture() 接口关闭小窗

当播放器进入小窗模式后,播放器所在页面处于 hide 状态(触发 onHide 生命周期),该页面不会被销毁。当小窗被关闭时,播放器所在页面会被 unload (触发 onUnload 生命周期)。

Bug & Tip

  1. tip:live-player 默认宽度300px、高度225px,可通过wxss设置宽高。
  2. tip:开发者工具上暂不支持。
  3. tip: 相关介绍和原理可参考此文章

示例代码

在开发者工具中预览效果

<live-player src="https://domain/pull_stream" mode="RTC" autoplay bindstatechange="statechange" binderror="error" style="width: 300px; height: 225px;" />
Page({
  statechange(e) {
    console.log('live-player code:', e.detail.code)
  },
  error(e) {
    console.error('live-player error:', e.detail.errMsg)
  }
})