1.0.21 • Published 11 days ago

tencentcloud-webar v1.0.21

Weekly downloads
-
License
ISC
Repository
-
Last release
11 days ago

本 SDK 主要功能在于提供给您快速、安全地接入 腾讯云视立方•美颜特效,并使用所有功能。

流程说明

SDK 实现了简洁低侵入性的接口提供接入,接入者只需要初始化实例,将渲染节点添加到自己的页面即可快速实现 Web 美颜特效功能。

流程图

!

  • 用户只能设置通过控制台制作的特效以及平台内置的特效。
  • Web和小程序接入流程略有差异,详见后文。

安装 SDK

SDK 以 npm 包的形式提供 Web 和小程序的兼容支持。

npm install tencentcloud-webar

Web 端接入 SDK

步骤1:引入SDK

import { ArSdk } from 'tencentcloud-webar';// SDK 类

步骤2:初始化实例

接下来初始化一个 SDK 实例用于显示:

// 获取鉴权参数
const authData = {
  licenseKey: 'xxxxxxxxx',
  appId: 'xxx',
  authFunc: authFunc // 详见「License 配置与使用 - 签名方法」
};
// 获取输入流
const stream = await navigator.mediaDevices.getUserMedia({
  audio: true,
  video: { width: 1280, height: 720 }
});
const config = {
  auth: authData, // 鉴权参数
  input: stream, // 输入
  beautify: { // 初始化美颜参数(可选)
    whiten: 0.1,
    dermabrasion: 0.3,
    eye: 0.2,
    chin: 0,
    lift: 0.1,
    shave: 0.2
  }
}
const sdk = new ArSdk(
  // 传入一个 config 对象用于初始化 sdk
  config
)

config中的input参数仅支持传入媒体流MediaStream与图片HTMLImageElement|String(图片url)

如果您需要传入视频或canvas,则可以将加载完成的video或绘制完成的canvas转成MediaStream作为input。

const video = document.createElement('video')
video.oncanplay = () => {
  const inputStream = video.captureStream()
  const sdk = new ArSdk({
    input: inputStream,
    ...
  })
}
video.src = 'xxx'

SDK还内置了摄像头拍摄的实现,如果您没有流的处理需求,只是想快速地实现Web端的拍摄,可以缺省input,使用camera参数配置。

const sdk = new ArSdk({
  auth: authData,
  camera: {
    mirror: true,
    width: 720,
    height: 1280
  }
})

初始化 ArSdk 的 Config 支持以下参数:

步骤3:获取输出

可以使用ArSdk.prototype.getOutput方法获取输出的画面。

const output = await sdk.getOutput()

!

  • 如果传入的input是图片,则返回为string类型的DataURL。
  • 其他场景均返回MediaStream类型,其中的video轨道是ArSdk实时处理的画面轨,如果媒体流有音频则audio轨道保持不变。

拿到输出的MediaStream之后,可以进行推流等后续处理,也可以直接在页面里播放。

// 以直接播放为例
const output = await sdk.getOutput()
const video = document.createElement('video')
video.setAttribute('playsinline', '')
video.crossOrigin = 'anonymous'
video.oncanplay = () => {
  video.play()
}
video.srcObject = output
document.body.appendChild(video)

小程序端接入 SDK

小程序端接入需要自备小程序,详细请参见 微信小程序文档

步骤1:配置域名白名单

SDK 内部会请求后台进行鉴权和资源加载,需要在小程序后台配置域名白名单。

  1. 进入 小程序后台,进入 开发 > 开发管理 > 开发设置 > 服务器域名
  2. 点击修改,配置以下域名并保存。
  • 请求域名:
https://webar.qcloud.com;
https://webar-static.tencent-cloud.com;
https://aegis.qq.com;
以及上述签名接口(get-ar-sign)的地址
  • downloadFile 域名:
https://webar-static.tencent-cloud.com

步骤2:安装并构建 npm

  1. 安装:
npm install tencentcloud-webar
  1. 单击开发者工具菜单 > 工具 > 构建 npm
  2. 在app.json中配置workers路径:
"workers": "miniprogram_npm/tencentcloud-webar/worker"

步骤3:引入文件

import "../../miniprogram_npm/tencentcloud-webar/lib.js";
import { ArSdk } from "../../miniprogram_npm/tencentcloud-webar/index.js";

! 小程序有单文件不超过 500kb 的限制,因此 SDK 分为两个 js 文件提供。

步骤4:初始化实例

// wxml
  //打开相机
  <camera 
    device-position="{{'front'}}" 
    frame-size="large" flash="off" resolution="medium" 
    style="width: 750rpx; height: 134rpx;position:absolute;top:-9999px;" 
  />
  //sdk 将处理完的画面实时输出到此 canvas 上
  <canvas 
    type="webgl"
    canvas-id="main-canvas"
    id="main-canvas"
    style="width: 750rpx; height: 1334rpx;">
  </canvas>
  //拍照将 ImageData 对象绘制到此 canvas 上
  <canvas 
    type="2d" 
    canvas-id="photo-canvas" 
    id="photo-canvas" 
    style="position:absolute;width:720px;height:1280px;top:-9999px;left:-9999px;">
  </canvas>
// js
Component({
  methods: {
    async getCanvasNode(id) {
      return new Promise((resolve) => {
        this.createSelectorQuery()
          .select(`#${id}`)
          .node()
          .exec((res) => {
            const canvasNode = res[0].node;
            resolve(canvasNode);
          });
      });
    },
    
    // 初始化相机类型    
    async initSdkCamera() {
      // 获取在屏的 canvas,sdk 会将处理完的画面实时输出到 canvas 上
      const outputCanvas = await this.getCanvasNode("main-canvas");
      const sdk = new ArSdk({
        camera: {
          width:720,
          height:1280,
        },
        output: outputCanvas,
        loading: {
          enable: false,
        },
        auth: {
          licenseKey: LICENSE_KEY,
          appId: APP_ID,
          authFunc: authFunc
        }
      });
      this.sdk = sdk
    }
  }
})

!

  • 小程序初始化 SDK 前须在控制台配置小程序 APPID.
  • 由于小程序的特性与 Web 不同,因此小程序支持的 input 参数目前只有 string 类型的图片链接。
  • 相机配置与 Web 相同,input 参数不传,直接设置 camera 参数,前提是页面中必须插入 camera 标签。
  • 小程序不支持 getOutput,需要自行传入一个在屏的 WEBGL canvas,SDK 直接输出到此 canvas。

步骤5:拍照和录像

小程序端支持拍照和录像功能。

::: 拍照

SDK 会返回包含宽高和 buffer 数据的对象,用户可以通过自己页面内的 2d canvas 绘制此数据并导出为图片文件。

Component({
  ...
  async takePhoto() {
    const {uint8ArrayData, width, height} = this.sdk.takePhoto(); // takePhoto 方法返回当前画面的 buffer 数据
    const photoCanvasNode = await this.getCanvasNode('photo-canvas');
    photoCanvasNode.width = parseInt(width);
    photoCanvasNode.height = parseInt(height);
    const ctx = photoCanvasNode.getContext('2d');
    // 用 sdk 返回的数据创建 ImageData 对象
    const imageData = photoCanvasNode.createImageData(uint8ArrayData, width, height);
    // 将 ImageData 对象绘制到 canvas 上
    ctx.putImageData(imageData,0,0,0,0,width,height);
    // 将 canvas 保存为本地图片
    wx.canvasToTempFilePath({
      canvas: photoCanvasNode,
      x: 0,
      y: 0,
      width: width,
      height: height,
      destWidth: width,
      destHeight: height,
      success: (res) => {
        // 保存照片到本地
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath
        });
      }
    })
  }
})

::: ::: 录像

! 当小程序切换后台或检测到手机锁屏时,需要调用 stopRecord 停止录像,否则可能出错。

Component({
  methods: {
    // 开始录像
    startRecord() {
      this.sdk.startRecord()
    }
    // 结束录像
    async stopRecord() {
      const res = await this.sdk.stopRecord();
      // 保存录像到本地
      wx.saveVideoToPhotosAlbum({
        filePath: res.tempFilePath
      })
    }
  }
})

:::

接入美颜和特效

SDK 内置提供以下几类效果:美颜、滤镜、特效。

美颜

除了初始化时可以传入美颜参数,也可以通过ArSdk的setBeautify方法设置美颜。

  • SDK 目前支持的美颜效果有:
type BeautifyOptions = {
  whiten?: number, // 美白 0-1
  dermabrasion?: number // 磨皮0-1
  lift?: number // 瘦脸0-1
  shave?: number // 削脸0-1
  eye?: number // 大眼0-1
  chin?: number // 下巴0-1
}
  • 调用 SDK 实例的 setBeautify 方法设置美颜参数:
sdk.setBeautify({
  whiten: 0.2,
  dermabrasion: 0,
  lift: 0.3,
  shave:0.1,
  eye: 0.9,
  chin: 0
})

滤镜

由于制作滤镜图的成本较高,我们提供了一些内置滤镜供您直接使用。 1. 获取内置滤镜列表:

const filterList = await sdk.getCommonFilter()
  1. 设置滤镜:
sdk.setFilter(filterList[0].EffectId, 0.5)

特效

您可以直接在 SDK 中设置您在 控制台 上制作的特效,也可以使用我们提供的内置效果。相关教程请参见 素材制作基础

// 获取内置特效
const presetEffectList = await sdk.getEffectList({
  Type: 'Preset'
})

// 获取自制特效
const customEffectList = await sdk.getEffectList({
  Type: 'Custom'
})

// 传入列表请求参数
const lipList = await sdk.getEffectList({
  PageNumber: 0,
  PageSize: 10,
  Name: '',
  Label: '唇妆', // 用特效的标签筛选
  Type: 'Custom'
})
const eyeList = await sdk.getEffectList({
  PageNumber: 0,
  PageSize: 10,
  Name: '',
  Label: '眼妆', // 用特效的标签筛选
  Type: 'Custom'
})
// 设置特效
sdk.setEffect([lipList[0].EffectId, eyeList[0].EffectId])

// 设置特效+强度
sdk.setEffect([
{
  id: lipList[0].EffectId,
  intensity: 0.5
}, 
{
  id: eyeList[0].EffectId,
  intensity: 0.7
})

API 说明

SDK 支持的回调事件:

let effectList = [];
let filterList = [];
// sdk 的回调用法
sdk.on('created', () => {
  // 在 created 回调中拉取特效和滤镜列表供页面展示
  sdk.getEffectList({
    Label: 'xxx'
  }).then(res => {
    effectList = res
  });
  sdk.getCommonFilter().then(res => {
    filterList = res
  })
})
sdk.on('ready', () => {
  // 在 ready 回调中调用 setBeautify/setEffect/setFilter 等渲染方法
  sdk.setBeautify({
    whiten: 0.3
  });
  sdk.setEffect({
    id: effectList[0].EffectId,
    intensity: 0.7
  });
  sdk.setFilter(filterList[0].EffectId, 0.5)
})
sdk.on('error', (error) => {
  // 在 error 回调中处理错误
  const {code, message} = error
  ...
})
事件说明回调参数
createdSDK 鉴权完成并成功创建实例时触发-
readySDK 初始化完成,画面开始渲染时触发-
errorSDK 发生错误时触发error 对象

错误码及对应的错误详情如下:

错误码含义备注
10000001当前浏览器环境不兼容建议用户使用Chrome/Firefox/Safari/微信
10000005输入源解析错误-
10001101设置特效出错-
10001102设置滤镜出错-
10001201调起用户摄像头失败-
10001202摄像头中断-
20001001鉴权失败请确认是否创建 License;请确认签名是否正确
20001002接口请求失败回调会回传接口返回的数据,具体信息可以参考「接口错误码」
30000001小程序 startRecord 失败-
30000002小程序 stopRecord 失败-

兼容性: | 浏览器 | 支持平台 | | ----- | --- | | Chrome | 桌面端/Android/iOS | | Safari | 桌面端/Android/iOS | | FireFox | 桌面端/Android/iOS | | QQ webview | Android | | 微信webview | Android/iOS 微信8.0.16以上| | 微信小程序 | Android/iOS 微信8.0.16以上|

SDK 提供以下方法:

代码示例

请参见 快速上手

1.0.22-31

11 days ago

1.0.22-30

15 days ago

1.0.22-29

1 month ago

1.0.22-28

2 months ago

1.0.22-23

2 months ago

1.0.22-22

2 months ago

1.0.22-21

2 months ago

1.0.22-20

3 months ago

1.0.22-19

3 months ago

1.0.22-18

3 months ago

1.0.22-17

3 months ago

1.0.22-15

3 months ago

1.0.22-16

3 months ago

1.0.22-14

3 months ago

1.0.22-13

4 months ago

1.0.22-12

4 months ago

1.0.22-11

4 months ago

1.0.22-10

4 months ago

1.0.22-9

4 months ago

1.0.22-8

4 months ago

1.0.22-7

4 months ago

1.0.22-6

4 months ago

1.0.22-dev.8

4 months ago

1.0.22-5

4 months ago

1.0.22-4

4 months ago

1.0.22-3

5 months ago

1.0.22-2

5 months ago

1.0.22-1

5 months ago

1.0.22-0

5 months ago

1.0.19-11

5 months ago

1.0.21

5 months ago

1.0.19-10

5 months ago

1.0.19

5 months ago

1.0.19-9

5 months ago

1.0.19-8

5 months ago

1.0.19-7

5 months ago

1.0.19-6

5 months ago

1.0.19-5

5 months ago

1.0.19-4

5 months ago

1.0.19-1

5 months ago

1.0.19-0

5 months ago

1.0.16-23

5 months ago

1.0.16-20

5 months ago

1.0.16-21

5 months ago

1.0.16-22

5 months ago

1.0.16-17

6 months ago

1.0.16-18

6 months ago

1.0.16-19

6 months ago

1.0.18

5 months ago

1.0.16-16

7 months ago

1.0.16-14

7 months ago

1.0.16-15

7 months ago

1.0.16-12

7 months ago

1.0.16-13

7 months ago

1.0.16-11

7 months ago

1.0.16

7 months ago

1.0.16-9

8 months ago

1.0.16-8

8 months ago

1.0.16-7

8 months ago

1.0.16-6

8 months ago

1.0.16-5

8 months ago

1.0.16-4

8 months ago

1.0.16-3

8 months ago

1.0.16-2

9 months ago

1.0.16-1

9 months ago

1.0.16-0

9 months ago

1.0.9-4

10 months ago

1.0.9-3

10 months ago

1.0.9-6

10 months ago

1.0.9-5

10 months ago

1.0.9-2

10 months ago

1.0.11-3

10 months ago

1.0.11-2

10 months ago

1.0.7-22

11 months ago

1.0.7-21

11 months ago

1.0.7-20

11 months ago

1.0.12-1

10 months ago

1.0.7-19

11 months ago

1.0.7-18

11 months ago

1.0.7-15

11 months ago

1.0.7-14

11 months ago

1.0.7-17

11 months ago

1.0.7-16

11 months ago

1.0.7-11

11 months ago

1.0.7-10

11 months ago

1.0.7-13

11 months ago

1.0.7-12

11 months ago

1.0.16-10

8 months ago

1.0.13-dev.15

10 months ago

1.0.13-dev.16

9 months ago

1.0.13-dev.17

9 months ago

1.0.12-dev.4

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

11 months ago

1.0.8-5

10 months ago

1.0.8-4

10 months ago

1.0.8-6

10 months ago

1.0.8-1

11 months ago

1.0.8-3

10 months ago

1.0.8-2

10 months ago

1.0.7-6

12 months ago

1.0.7-5

12 months ago

1.0.7-8

12 months ago

1.0.7-7

12 months ago

1.0.15-5

8 months ago

1.0.15-4

8 months ago

1.0.15-3

8 months ago

1.0.15-2

8 months ago

1.0.7-9

12 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.15

9 months ago

1.0.14

10 months ago

1.0.13

10 months ago

1.0.12

10 months ago

1.0.2-1

1 year ago

1.0.2-0

1 year ago

0.3.3-33

1 year ago

0.3.3-35

1 year ago

0.3.3-34

1 year ago

0.3.3-37

1 year ago

0.3.3-36

1 year ago

1.0.1-3

1 year ago

1.0.1-2

1 year ago

1.0.1-1

1 year ago

1.0.3-2

1 year ago

1.0.3-1

1 year ago

1.0.3-0

1 year ago

1.0.6-7

1 year ago

1.0.6-6

1 year ago

1.0.6-9

1 year ago

1.0.6-8

1 year ago

1.0.6-3

1 year ago

1.0.6-2

1 year ago

1.0.6-5

1 year ago

1.0.6-4

1 year ago

1.0.1-27

1 year ago

1.0.1-26

1 year ago

1.0.1-25

1 year ago

1.0.1-24

1 year ago

1.0.1-23

1 year ago

1.0.1-22

1 year ago

1.0.1-21

1 year ago

1.0.1-20

1 year ago

1.0.1-19

1 year ago

1.0.1-18

1 year ago

1.0.1-17

1 year ago

1.0.1-16

1 year ago

1.0.1-15

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.0-1

1 year ago

1.0.0-2

1 year ago

1.0.7-2

12 months ago

1.0.7-1

1 year ago

1.0.7-4

12 months ago

1.0.7-3

12 months ago

0.3.0-7

2 years ago

0.3.0-6

2 years ago

0.3.0-9

2 years ago

0.3.0-8

2 years ago

0.3.0-1

2 years ago

0.3.0-3

2 years ago

0.3.0-2

2 years ago

0.3.0-5

2 years ago

0.3.0-4

2 years ago

0.3.0

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.3.3-31

1 year ago

0.3.1-6

2 years ago

0.3.3-30

1 year ago

0.3.1-5

2 years ago

0.3.1-8

2 years ago

0.3.3-32

1 year ago

0.3.1-7

2 years ago

0.3.1-0

2 years ago

0.3.1-2

2 years ago

0.3.1-1

2 years ago

0.3.1-4

2 years ago

0.3.1-3

2 years ago

0.3.3-11

1 year ago

0.3.3-10

1 year ago

0.3.3-13

1 year ago

0.3.3-12

1 year ago

0.3.3-15

1 year ago

0.3.3-14

1 year ago

0.3.3-17

1 year ago

0.3.3-16

1 year ago

0.3.3-19

1 year ago

0.3.3-18

1 year ago

0.3.2-1

1 year ago

0.3.2-3

1 year ago

0.3.2-2

1 year ago

0.3.3-20

1 year ago

0.3.3-22

1 year ago

0.3.3-21

1 year ago

0.3.3-24

1 year ago

0.3.3-23

1 year ago

0.3.3-26

1 year ago

0.3.3-25

1 year ago

0.3.3-28

1 year ago

0.3.3-27

1 year ago

0.3.3-29

1 year ago

0.3.3-4

1 year ago

0.3.3-3

2 years ago

0.3.3-6

1 year ago

0.3.3-5

1 year ago

0.3.3-8

1 year ago

0.3.3-7

1 year ago

0.3.3-9

1 year ago

0.2.9-4

2 years ago

0.3.3-0

2 years ago

0.3.3-2

2 years ago

0.3.3-1

2 years ago

0.2.8-3

2 years ago

0.2.8-2

2 years ago

0.2.8-1

2 years ago

0.2.9-3

2 years ago

0.2.9-2

2 years ago

0.2.9-1

2 years ago

0.2.9-0

2 years ago

0.2.8

2 years ago

0.2.2-0

2 years ago

0.1.17-15

2 years ago

0.1.17-16

2 years ago

0.1.17-17

2 years ago

0.1.17-18

2 years ago

0.1.17-19

2 years ago

0.1.17-10

2 years ago

0.1.17-11

2 years ago

0.1.17-12

2 years ago

0.1.17-13

2 years ago

0.1.17-14

2 years ago

0.1.17-8

2 years ago

0.1.17-9

2 years ago

0.1.17-4

2 years ago

0.1.17-5

2 years ago

0.1.17-6

2 years ago

0.1.17-7

2 years ago

0.1.17-2

2 years ago

0.1.17-3

2 years ago

0.2.1-23

2 years ago

0.2.1-22

2 years ago

0.2.3-1

2 years ago

0.2.1-21

2 years ago

0.2.1-20

2 years ago

0.2.1-27

2 years ago

0.2.1-26

2 years ago

0.2.1-25

2 years ago

0.2.1-24

2 years ago

0.1.16

2 years ago

0.1.17

2 years ago

0.1.18

2 years ago

0.1.19

2 years ago

0.2.1-12

2 years ago

0.2.1-11

2 years ago

0.2.1-10

2 years ago

0.1.13

2 years ago

0.1.14

2 years ago

0.1.15

2 years ago

0.2.1-19

2 years ago

0.2.1-18

2 years ago

0.2.1-17

2 years ago

0.2.1-16

2 years ago

0.2.1-15

2 years ago

0.2.1-14

2 years ago

0.2.1-13

2 years ago

0.2.0-9

2 years ago

0.2.8-0

2 years ago

0.2.0-8

2 years ago

0.2.0-7

2 years ago

0.2.0-6

2 years ago

0.2.4-1

2 years ago

0.2.0-5

2 years ago

0.2.4-0

2 years ago

0.2.0-4

2 years ago

0.2.0-3

2 years ago

0.2.0-2

2 years ago

0.2.0-1

2 years ago

0.2.0-22

2 years ago

0.1.19-6

2 years ago

0.2.0-21

2 years ago

0.1.19-7

2 years ago

0.2.0-20

2 years ago

0.1.19-8

2 years ago

0.1.19-3

2 years ago

0.1.19-4

2 years ago

0.1.19-5

2 years ago

0.1.19-0

2 years ago

0.1.19-1

2 years ago

0.2.0-26

2 years ago

0.2.0-25

2 years ago

0.2.0-24

2 years ago

0.2.0-23

2 years ago

0.1.17-20

2 years ago

0.1.17-21

2 years ago

0.2.1-9

2 years ago

0.2.1-8

2 years ago

0.2.1-7

2 years ago

0.2.1-6

2 years ago

0.2.1-5

2 years ago

0.2.0-11

2 years ago

0.2.1-4

2 years ago

0.2.0-10

2 years ago

0.2.1-3

2 years ago

0.2.1-2

2 years ago

0.2.1-1

2 years ago

0.2.1-0

2 years ago

0.2.0-19

2 years ago

0.2.0-18

2 years ago

0.2.0-17

2 years ago

0.2.0-15

2 years ago

0.2.0-13

2 years ago

0.2.0-12

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.3

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.1.10

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.9

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.1.0-beta.0

2 years ago