tencent cloud

腾讯特效 SDK

动态与公告
产品动态
关于腾讯特效 SDK V3.5 版本更新公告
关于腾讯特效 SDK V3.0 版本相关接口及素材变更公告
产品简介
产品概述
产品功能
基本概念
产品优势
应用场景
购买指南
价格总览
购买流程
欠费退费说明
新手指引
Demo 体验
免费测试
License 指引
移动端 License 新增与续期
PC 端 License 新增与续期
Web端 License 新增与续期
常见问题
SDK 下载
功能说明
SDK 下载
版本历史
SDK 集成指引(无 UI)
通用集成腾讯特效
原子能力集成指引
SDK 集成指引(含 UI)
通用集成腾讯特效
直播 SDK 集成腾讯特效
TRTC SDK 集成腾讯特效
短视频 SDK 集成腾讯特效
Avatar 虚拟人集成指引
API 文档
iOS
Android
Flutter
Web
功能实践
SDK 包瘦身
SDK 集成问题排查
性能调优
效果调优
素材使用
美颜参数说明
美颜场景推荐参数
短视频企业版迁移指引
第三方推流接入美颜(Flutter)
小程序美颜特效实践
素材制作工具使用
Web 美颜特效
产品概述
快速上手
SDK 接入
API 文档
控制台指南
Demo 体验
内置素材总览
实践教程
常见问题
常见问题
通用类相关
技术类相关
License 相关
旧版文档
美颜场景推荐参数
美颜参数表
一分钟集成 TRTC
一分钟集成直播
TE SDK 政策
隐私协议
数据处理和安全协议
联系我们
文档腾讯特效 SDKWeb 美颜特效实践教程结合快直播及 WebRTC 的推流

结合快直播及 WebRTC 的推流

PDF
聚焦模式
字号
最后更新时间: 2024-09-09 10:28:23

准备工作

请阅读 Web 美颜特效 SDK 接入指南,熟悉 SDK 基本用法。
请阅读云直播 入门文档 以及 WebRTC 推流,了解 WebRTC 推流工具基本用法,并完成直播基础设置。

开始使用

步骤1:Web 美颜特效 SDK 引入

在需要直播推流的页面(PC Web 端)中引入 js 脚本:
<script charset="utf-8" src="https://webar-static.tencent-cloud.com/ar-sdk/resources/latest/webar-sdk.umd.js"></script>
注意:
这里是示例项目,为了方便使用 script 标签方式引入,您也可以参考 接入指南 中的方法,用 npm 包的方式引入。

步骤2:WebRTC 推流资源引入

在需要直播推流的页面(PC Web 端)中引入 js 脚本:
<script src="https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.0.0.min.js" charset="utf-8"></script>
注意:
请在 HTML 的 body 部分引入上述脚本,如果在 head 部分引入会报错。

步骤3:初始化 Web 美颜特效 SDK

示例代码如下:
const { ArSdk } = window.AR;

/** ----- 鉴权配置 ----- */

/**
* 腾讯云账号 APPID
*
* 进入[腾讯云账号中心](https://console.tencentcloud.com/developer) 即可查看 APPID
*/
const APPID = ''; // 此处请填写您自己的参数

/**
* Web LicenseKey
*
* 登录音视频终端 SDK 控制台的[Web License 管理](https://console.tencentcloud.com/vcube/web),创建项目即可获得 LicenseKey
*/
const LICENSE_KEY = ''; // 此处请填写您自己的参数

/**
* 计算签名用的密钥 Token
*
* 注意:此处仅用于 DEMO 调试,正式环境中请将 Token 保管在服务端,签名方法迁移到服务端实现,通过接口提供,前端调用拉取签名,参考
* [签名方法](https://www.tencentcloud.com/document/product/616/71370?from_cn_redirect=1#.E7.AD.BE.E5.90.8D.E6.96.B9.E6.B3.95)
*/
const token = ''; // 此处请填写您自己的参数

/** ----------------------- */

/**
* 定义获取签名方法
*
* 注意:此处方案仅适用于 DEMO 调试,正式环境中签名方法推荐在服务端实现,通过接口提供,前端调用拉取签名
* 如:
* async function () {
* return fetch('http://xxx.com/get-ar-sign').then(res => res.json());
* };
*/
const getSignature = function () {
const timestamp = Math.round(new Date().getTime() / 1000);
const signature = sha256(timestamp + token + APPID + timestamp).toUpperCase();
return { signature, timestamp };
};

let w = 720;
let h = 480;

// 获取输入流
const stream = await navigator.mediaDevices.getUserMedia({
audio: true,
video: { width: w, height: h }
})

// ar sdk 基础配置参数
const config = {
input: stream,
auth: {
licenseKey: LICENSE_KEY,
appId: APPID,
authFunc: getSignature
},
// 初始美颜效果(可选参数)
beautify: {
whiten: 0.1, // 美白 0-1
dermabrasion: 0.5, // 磨皮 0-1
lift: 0.3, // 瘦脸 0-1
shave: 0, // 削脸 0-1
eye: 0, // 大眼 0-1
chin: 0, // 下巴 0-1
}
}

// config 传入 ar sdk
const ar = new ArSdk(config);

// created回调里可以获取内置特效与滤镜列表进行界面展示
ar.on('created', () => {
// 获取内置美妆、贴纸
ar.getEffectList({
Type: 'Preset'
}).then((res) => {
const list = res.map(item => ({
name: item.Name,
id: item.EffectId,
cover: item.CoverUrl,
url: item.Url,
label: item.Label,
type: item.PresetType,
}));

const makeupList = list.filter(item=>item.label.indexOf('美妆')>=0)
const stickerList = list.filter(item=>item.label.indexOf('贴纸')>=0)
// 渲染美妆、贴纸列表视图
renderMakeupList(makeupList);
renderStickerList(stickerList);

}).catch((e) => {
console.log(e);
});
// 内置滤镜
ar.getCommonFilter().then((res) => {
const list = res.map(item => ({
name: item.Name,
id: item.EffectId,
cover: item.CoverUrl,
url: item.Url,
label: item.Label,
type: item.PresetType,
}));

// 渲染滤镜列表视图
renderFilterList(list);

}).catch((e) => {
console.log(e);
});
});

ar.on('ready', async (e) => {

// 在 ready 回调里及该事件之后,可使用三种方法来设置美颜特效:setBeautify/setEffect/setFilter

// 例如使用range input(滑动控件)设置美颜效果
$('#dermabrasion_range_input').change((e) => {
ar.setBeautify({
dermabrasion: e.target.value, // 磨皮 0-1
});
});

// 通过created回调中创建的美妆、贴纸列表交互设置效果(setEffect的输入参数支持三种格式,详见SDK接入指南)
$('#makeup_list li').click(() => {
ar.setEffect([{id: effect.id, intensity: 1}]);
});
$('#sticker_list li').click(() => {
ar.setEffect([{id: effect.id, intensity: 1}]);
});

// 通过created回调中创建的滤镜列表交互设置滤镜效果(setFilter第二个参数1表示强度,详见SDK接入指南)
ar.setFilter(filterList[0].id, 1);
$('#filter_list li').click(() => {
ar.setFilter(filter.id, 1);
});

// 获取ar sdk 输出的流在下一步中进行 WebRTC 推流
const arStream = await ar.getOutput();

});

ar.on('error', (e) => {
console.log(e);
});

更细致的 UI 控制用法您可以通过下载文末提供的代码包来进一步查看。

步骤4:开始推流

完成上一步之后,在 SDK ready 回调中获取输出流即可进行 WebRTC 推流,示例代码如下:
let livePusher = new TXLivePusher()
// 设置直播推流基础参数 begin
let DOMAIN = '您的推流域名'
let AppName = '您的appName'
let StreamName = '您的streamName'
let txSecret = '您的txSecret'
let txTime = '您的txTime'
// 设置直播推流基础参数 end

let pushUrl = `webrtc://${DOMAIN}/${AppName}/${StreamName}?txSecret=${txSecret}&txTime=${txTime}`;

// 可选:设置预览界面元素
livePusher.setRenderView('id_local_video');
// 捕获流内容
livePusher.startCustomCapture(arStream).then(()=>{
// 立刻开始推流,您也可以通过其他函数来控制推流时机
livePusher.startPush(pushUrl);
})
其中 txSecret 和 txTime 都需要计算,为了方便您也可以通过 直播控制台地址生成器 快速生成这些参数和推流 URL,具体请参见 地址生成器。 推流(startPush)成功后,您应该就能看到应用了美颜特效的直播流的效果了。

步骤5:查看效果

注意:
示例项目需您自行启动本机 Web 服务,并保证通过端口号可访问到 HTML 文件。
若您有一个已备案成功的播放域名,可参考 直播播放 查看实际的播放效果。
若您无播放域名,可在直播控制台流管理 中预览当前流的画面。

代码示例

您可以下载 示例代码 解压后查看 AR_LEB_WEB 代码目录。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈