产品动态
关于腾讯特效 SDK V3.5 版本更新公告
关于腾讯特效 SDK V3.0 版本相关接口及素材变更公告
npm install tencentcloud-webar
import { ArSdk } from 'tencentcloud-webar';
<script charset="utf-8" src="https://webar-static.tencent-cloud.com/ar-sdk/resources/latest/webar-sdk.umd.js"></script><script>// 从 window.AR 上获取 ArSdk 类const { ArSdk } = window.AR;......</script>
// 获取鉴权参数const authData = {licenseKey: 'xxxxxxxxx',appId: 'xxx',authFunc: authFunc // 详见「License 配置与使用 - 签名方法」};// 输入SDK的流const stream = await navigator.mediaDevices.getUserMedia({audio: true,video: { width: w, height: h }})const config = {module: { // 0.2.0版本新增beautify: true, // 是否启用美颜模块,启用后可以使用美颜、美妆、贴纸等功能segmentation: true, // 是否启用人像分割模块,启用后可以使用背景功能segmentationLevel: 0 // 可选值:0 | 1 | 2 ,数值越高,分割效果越好,资源占用越大,对设备硬件要求越高},auth: authData, // 鉴权参数input: stream, // input传输入流beautify: { // 初始化美颜参数(可选)whiten: 0.1,dermabrasion: 0.3,eye: 0.2,chin: 0,lift: 0.1,shave: 0.2,// 更多美颜参数设置请参考「API 文档」},// 更多参数设置请参考「API 文档」}const sdk = new ArSdk(// 传入一个 config 对象用于初始化 sdkconfig)
string|HTMLImageElement 来处理图片, 以及 HTMLVideoElement 处理 video 视频。const config = {auth: authData, // 鉴权参数input: 'https://xxx.png', // input传输入流,也支持 image 及 video 标签}const sdk = new ArSdk(// 传入一个 config 对象用于初始化 sdkconfig)// 在 created 回调中可拉取特效和滤镜列表供页面展示,详见「SDK接入 - 参数与方法」sdk.on('created', () => {// 获取内置美妆sdk.getEffectList({Type: 'Preset',Label: '美妆',}).then(res => {effectList = res});// 获取内置滤镜sdk.getCommonFilter().then(res => {filterList = res})})// 在 ready 回调中调用 setBeautify/setEffect/setFilter 等渲染方法// 详情可参见「SDK接入 - 设置美颜和特效」sdk.on('ready', () => {// 设置美颜sdk.setBeautify({whiten: 0.2});// 设置特效sdk.setEffect({id: effectList[0].EffectId,intensity: 0.7});// 设置滤镜sdk.setFilter(filterList[0].EffectId, 0.5)})
ArSdk.prototype.getOutput 方法获取输出的媒体流。cameraReady 回调中获取并播放输出流,此时 SDK 尚未开始资源加载和检测的初始化,初始仅能展示原始画面,待 SDK 检测初始化完成后,美颜会自动生效。sdk.on('cameraReady', async () => {// 在 cameraReady 回调中可以更早地获取输出画面,此时初始化传入的美颜参数还未生效,同输入画面// 适用于需要尽早地展示画面,但不要求画面一出现就有美颜的场景// 后续美颜生效后无需更新stream,SDK内部已处理const output = await ar.getOutput();// 使用video播放输出的媒体流,预览效果const video = document.createElement('video')video.setAttribute('playsinline', '');video.setAttribute('autoplay', '');video.srcObject = outputdocument.body.appendChild(video)video.play()})
sdk.on('ready', async () => {// 在 ready 回调中获取输出画面,此时初始化传入的美颜参数已生效,获取的 output stream 已带美颜效果// 区别上述 cameraReady 中获取 output,此回调执行时机稍晚一些,适用于画面一展示就要有美颜的场景,但不要求尽早地展示画面的场景const output = await ar.getOutput();// 使用video播放输出的媒体流,预览效果const video = document.createElement('video')video.setAttribute('playsinline', '');video.setAttribute('autoplay', '');video.srcObject = outputdocument.body.appendChild(video)video.play()})
MediaStream 之后,可以结合第三方 SDK(如 TRTC Web SDK,快直播 Web SDK)进行推流等后续处理。const output = await sdk.getOutput()
Mediastream;其他他输入场景均返回 MediaStream 类型。video 轨道是 ArSdk 实时处理的,如有 audio 轨道则保持不变。sdk.updateInputStream切换输入流。
下述以切换电脑默认摄像头及外置摄像头为例,介绍 updateInputStream 的用法:async function getVideoDeviceList(){const devices = await navigator.mediaDevices.enumerateDevices()const videoDevices = []devices.forEach((device)=>{if(device.kind === 'videoinput'){videoDevices.push({label: device.label,id: device.deviceId})}})return videoDevices}async function initDom(){const videoDeviceList = await getVideoDeviceList()let dom = ''videoDeviceList.forEach(device=>{dom = `${dom}<button id=${device.id} onclick='toggleVideo("${device.id}")'>${device.label}<nbutton>`})const div = document.createElement('div');div.id = 'container';div.innerHTML = dom;document.body.appendChild(div);}async function toggleVideo(deviceId){const stream = await navigator.mediaDevices.getUserMedia({video: {deviceId,width: 1280,height: 720,}})// 使用sdk提供的更新输入流接口// 输入流更新后无需再次调用 getOutput ,SDK内部已处理sdk.updateInputStream(stream, true) // 第二个参数默认为 true,表示旧的 mediaTrack 会被 stop 掉;若业务侧需保留,可设置为 false。}initDom()
<button id="disable">停止检测</button><button id="enable">启动检测</button>
// 停止检测,输出原始画面disableButton.onClick = () => {sdk.disable()}// 启动检测,输出美颜等特效生效后的画面enableButton.onClick = () => {sdk.enable()}
<button id="stop">暂停</button><button id="resume">恢复</button>
// 画面暂停stopButton.onClick = () => {sdk.stop()}// 恢复播放resumeButton.onClick = () => {sdk.resume()}
文档反馈