【iOS端】基于Uniapp跨平台接入即构RTC+相芯美颜

news2024/9/21 4:36:51

0 Uniapp平台接入完成iOS端的即构RTC+相芯美颜

Uniapp最大优势是跨平台,前面介绍了如何在android中接入相芯美颜+即构RTC,今天咱们把相同的代码接入到iOS中。按照惯例我们先看最终效果,欢迎大家评论讨论:

在这里插入图片描述

1 开发配置准备

iOS开发因为打包签名等收到限制,因此比较推荐在本地Mac上编译底座。

首先前往以下两个地址

  1. 即构RTC接入相芯美颜插件
  2. ZEGO 即构实时音视频 SDK

点击下载示例项目ZIP:

在这里插入图片描述

接下来前往DCloud官网下载打包底座SDK项目:https://nativesupport.dcloud.net.cn/NativePlugin/course/ios.html,根据官方提示下载到SDK,找到HBuilder-Hello项目。

从下载到的示例项目中分别找到native库:

  • zgrtc_fubeauty.framework
  • ZegoExpressEngine.framework
  • ZegoExpressUniAppSDK.framework

将以上3个库加入到HBuilder-Hello依赖中,注意项目的Build Phases > Embed Frameworks中也要加入以上三个库,确保底座中包含这三个库。

如果读者对环境配置感觉到困难,可以联系作者本人获取完整的源码。

2 代码开发-即构RTC代码

本文基于即构RTC接入相芯美颜插件的示例项目开发,前往即构RTC接入相芯美颜插件官网下载示例项目ZIP

2.1 即构与相芯秘钥配置

打开pages/KeyCenter.js, 填写以下内容:

let appID = ;
let userID =   
let appSign =  
let token = 
let authpack = 

以上各个配置参数通过如下途径获取:

  1. appID:打开即构后台管理<https://console.zego.im/dashboard>,可以得到appID>, 形如123456789。
  2. userID:随意定义的字符串,作为当前登录用户的id
  3. appSign:旧的鉴权方式需要使用,建议参考<https://doc-zh.zego.im/faq/token_upgrade> 切换到最新的鉴权。用户可以从<https://console.zego.im/dashboard> 获取appSign,注意以后不再提供appSign支持。
  4. token:最新的鉴权方案,参考这里<https://doc-zh.zego.im/faq/token_upgrade>
  5. authpack:由相芯对接工作人员提供授权码数组,直接复制过来:
static char authPackage[] = [-61, -114, -2, -31, -43, 62, -112, -87, -120, 81, -93, 78, -55, -25, -20, 44, -29, -100, -98, 35, 112, -
	94, 58, 67, 57, -21, 59, -110, 56, -56, -73, -118, 57, -48, -9, -83, 80, 121, 58, 124, -107, -53, 38, -106, -58,
	-85, 35, -39, 61, 119, -54, 31, 69, -95, 88, -16, 35, -18, 74, 20, -18, 15, 110, 93, -80, -44, 10, -12, 68, -59,
	-108, 110, -83, -13, -34, -80, -67, -105, 55, 74, 105, 14, -36,.................]

2.2 开启相芯美颜

打开pages/index/index.nvue引入如下几个库:

import ZGFUBeautyWrapper from "@/components/Zego-FUBeautyWrapper/lib/ZGFUBeautyWrapper";
import ZegoFU from "@/components/Zego-FUBeautyWrapper/ZegoFU";
import FaceBeautyEnum from "@/components/Zego-FUBeautyWrapper/FaceBeautyEnum";

接下来开启美颜

//初始化美颜相关操作
let self = this;
let authpack = KeyCenter.getAuthPack();
ZegoFU.initZgAndRegisterFu(authpack, function(succ, msg) {
    self.initReady = succ;
    if (!succ) {
        console.log(msg)
    } else {
        console.log("已完成必要的SDK初始化,注意后面释放RTC引擎的同时,也要关闭美颜!!!")
        console.log("一切ready,接下来可以登录房间...")
    }
});

一切ready后,就可以调用相芯美颜了,相芯美颜的调用主要关注3个地方:美颜类型、美颜名称、美颜强度。美颜类型主要有3个:美肤、美肤、滤镜,每个美颜类型下有不同的美颜方法如:瘦脸、美牙等。可以通过如下方式实现:

//切换美肤、美型、滤镜tab
onClkFuTab(idx) { 
    this.fuSelIdx = idx;
    if (idx == 0) {
        this.curFuList = FaceBeautyEnum.skinList;
        this.fuIsFilter = false;
    } else if (idx == 1) {
        this.curFuList = FaceBeautyEnum.shapeList;
        this.fuIsFilter = false;
    } else {
        this.curFuList = FaceBeautyEnum.filterList;
        this.fuIsFilter = true;
    }
}
//设置美颜名称 
setFuParam(fuEnName, fuCnName) { 
    this.fuSelCnName = fuCnName;
    this.fuSelEnName = fuEnName; 
}
//拖拉条设置美颜强度
sliderChange(e) {
    let v = e.detail.value / 100.0; 
    if (v >= 0 && v <= 1)
        ZegoFU.setFUParam(this.fuSelEnName, v, this.fuIsFilter).then(function(c) {
            console.log(this.fuSelEnName, v, c, this.fuIsFilter ? "setFilter" : "updateParamIntensity")
        })
    else {
        console.log("无效值,过滤" + c);
    }
}

2.3 关闭美颜

最后记得,在不使用美颜的时候要记得关闭美颜。防止出现绑定美颜异常。尤其是在即构RTC引擎被destroy时:

// 销毁引擎
destroyEngine() {
    this.appendActionInfo("Destroy Engine");
    this.logoutRoom(this.roomID);
    ZegoExpressEngine.destroyEngine();
    this.engine = null
    /**
     * 记得要关闭美颜引擎
     **/
    ZGFUBeautyWrapper.closeBeauty().then(function(code) {
        console.log("closeBeauty " + code)
    })
},

3 Native层相芯美颜接入即构RTC的基本原理

美颜可以看成是一种自定义的图像处理算法,即构RTC接入自定义图像处理流程如下:
在这里插入图片描述

具体来说,使用即构RTC的setCustomVideoProcessHandler函数,传入实现了ZegoCustomVideoProcessHandler协议的对象,该对象里面onCapturedUnprocessedCVPixelBuffer:函数自定义图像处理,并且通过ZegoExpressEngine对象的sendCustomVideoProcessedCVPixelBuffer函数将处理后的结果告知ZegoExpressEngine。参考示例如下:

-(void) onCapturedUnprocessedCVPixelBuffer:(CVPixelBufferRef)buffer timestamp:(CMTime)timestamp channel:(ZegoPublishChannel)channel{
    
    if(_handler!=nil){
        buffer= [_handler onVideoFrame:buffer];
    }
    [[ZegoExpressEngine sharedEngine] sendCustomVideoProcessedCVPixelBuffer:buffer timestamp:timestamp channel:channel];
}

启用/关闭自定义图像处理:

-(void) enableCustomVideoProc {
    ZegoCustomVideoProcessConfig *processConfig = [[ZegoCustomVideoProcessConfig alloc] init];
    processConfig.bufferType = ZegoVideoBufferTypeCVPixelBuffer;
    [[ZegoExpressEngine sharedEngine] enableCustomVideoProcessing:YES config:processConfig];
    [[ZegoExpressEngine sharedEngine] setCustomVideoProcessHandler:self];
//    [[ZegoExpressEngine sharedEngine] useFrontCamera:NO];
}
-(void) disableCustomVideoProc{
    
    [[ZegoExpressEngine sharedEngine] enableCustomVideoProcessing:NO config:nil];
}

可以看到,即构RTC的自定义图像处理非常简单。本文以相芯美颜作为示例接入即构RTC,除此之外,像一些开源的图像处理算法都可以通过这种方式接入到即构RTC,给自己的App增加更多趣味性。

4 即构RTC+相芯美颜 Demo 相关开发文档

本文基于XCode编译HBuilder底座,将自定义代码(即构RTC+相芯美颜)打包到基座中。使得在界面渲染层中的js代码可以调用相关功能。另外,主要参考了DCloud中即构RTC接入相芯美颜插件的示例工程,里面提供了调用细节代码,读者可以多多挖掘,尤其是components/Zego-FUBeautyWrapper里的Uniapp调用封装,可以拿来借鉴相关思路扩展到其他类似项目中。

最后附上本文参考的相关资料:

  • 即构RTC接入相芯美颜插件: https://ext.dcloud.net.cn/plugin?id=18718
  • ZEGO 即构实时音视频 SDK:https://ext.dcloud.net.cn/plugin?id=3617
  • 即构RTC接入美颜:<https://doc-zh.zego.im/article/11257>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8目标检测部署RK3588全过程,附代码pt->onnx->rknn,附【详细代码】

目录 一、训练yolov8模型&#xff0c;得到最佳权重文件best.pt 二、pt转onnx,即best.pt->best11.onnx 1、对下载的YOLOv8代码修改 2、加入模型导出功能&#xff0c; 3、导出指令采用如下代码 三、ONNX转RKNN 四、RK3588部署 1、拷贝rknn文件到rk3588板子内 2、执行…

.NET6 多环境 在Windows IIS部署的应用场景

前言&#xff1a; 通常情况下 我们部署Web站点 需要用到 测试环境 和 正式环境 2个环境 Staging环境 或者其他环境 视 团队所处阶段、团队规模、质量要求、风险控制要求、第3方协议而定 1.我们把上一讲 IX.MultiEnvironment 这个项目发布到IIS中 2.IIS配置3个环境 我们重点…

MathType2025最新破解版补丁包+永久免费安装包win+mac系统

有一类笔记特别受欢迎&#xff0c;那就是“数学公式的排版”。这些笔记通常以图文并茂的方式&#xff0c;展示了如何使用各种工具来排版数学公式。其中&#xff0c;MathType 7 是最受欢迎的工具之一&#xff0c;它不仅功能强大、使用方便&#xff0c;还能让你轻松地制作出精美的…

Tailor:免费开源 AI 视频神器,创作者必备利器

目录 引言一、创新特性&#xff0c;引领视频编辑新潮流1. 智能人脸剪辑2. 精准语音剪辑3. 自动化口播生成4. 多样化字幕生成5. 一键式色彩生成 二、简单易用&#xff0c;新手也能快速上手1. 下载和安装2. 功能选择3. 操作流程 三、广泛应用&#xff0c;满足不同创作需求四、代码…

别让语法拖后腿:ChatGPT助你告别改稿噩梦!【建议收藏】

学术论文的撰写是研究成果传播的关键。清晰、准确、逻辑严密的表达对于学术论文的质量至关重要。人工智能技术的快速发展&#xff0c;尤其是ChatGPT 4.0的推出&#xff0c;为学术写作提供了新的辅助工具。本文将探讨如何有效利用ChatGPT 4.0进行论文润色。 ChatGPT&#xff1a…

线性代数:如何由AB=E 推出 BA=AB?

最近在二刷线性代数&#xff0c;在看逆矩阵定义的时候发现了这个问题。于是决定写一写&#xff0c;给出一种证明方式。 一、由逆矩阵的定义出发 这是我在mooc-山东大学-线性代数&#xff08;秦静老师&#xff09;第一章第十讲的ppt上截取的定义。 看到这个定义我就在想&#xf…

如何在Java中使用protobuf

写在前面 本文看下在Java中如何使用protofbuf。 1&#xff1a;介绍 1.1&#xff1a;什么是protobuf 是一种数据格式&#xff0c;同json&#xff0c;xml&#xff0c;等。但是一种二进制数据格式。 1.2&#xff1a;强在哪里&#xff1f;为啥要用&#xff1f; 小&#xff0c…

图新说-调整标绘线面的压盖顺序的两种方法

0.序 图新说作为一个三维可视化汇报工具&#xff0c;在公安消防领域常用于做态势标绘&#xff0c;应急救援方案&#xff0c;安保预案等。 如果撤离路线&#xff0c;或者行进路线【线对象】经过了水源地、危险区等【面对象】。如何确保线对象显示在面对象的上面&#xff0c;不被…

MyBatis中的占位符解析机制

深入理解 MyBatis 中的 #{} 占位符解析机制 在使用 MyBatis 进行数据库操作时&#xff0c;#{} 占位符是我们非常常用的一个特性。它能够将 Java 对象的属性值与 SQL 语句中的参数进行映射。在实际使用中&#xff0c;MyBatis 如何解析 #{} 占位符并获取对应的属性值呢&#xff…

如何实现低成本降噪?风扇噪声流体仿真解决方案

本文将说明工程师如何能够使用气动解决方案来模拟和降低一款小型发电机柜冷却风扇的噪音。ultraFluidX 的模拟结果将设备内部的流场和声场可视化&#xff0c;研究风扇和机柜内其他部件的相互作用&#xff0c;确认噪声源来自何处&#xff08;协助工程师采取有效的降噪措施&#…

Mybatis中的缓存

一&#xff0c;为什么要使用缓存 1&#xff0c;缓存的作用 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。 缓存实现的原理是 从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#…

zipkin启动发生报错 : Failed to start bean ‘armeriaServerGracefulShutdownLifecycle‘;

报错详情 : 在windows下启动zipkin的时候发生报错 : Failed to start bean ‘armeriaServerGracefulShutdownLifecycle’;nested exception is java.util.concurrent.CompletionException: java.lang.IllegalStateException: Armeria server failed to start解决 : 由于z…

SSM网上书店--附源码96453

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上书店当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上书店&#xff0c;它彻底改变了过去传统的管理方式…

安装cvxpy时遇到“subprocess-exited-with-error”的解决方式

尝试联邦学习时&#xff0c;遇到了这个问题&#xff0c;但实际上仔细看报错就能找到源头 ①更新cmake版本到3.17 参考此文即可更新 https://blog.csdn.net/why1249777255/article/details/138505546 【报错点中“Found CMake:…………”这一行&#xff0c;在不满足要求时会说…

信息学奥赛一本通编程启蒙(不断更新ing~)

可以作为c初学者的练习题&#xff0c;我会挑选有部分有代表意义的题目作为学生的课后作业&#xff0c;后面会在专栏中陆续更新题目解析&#xff0c;并附在这一篇文章的链接中 信息学奥赛一本通-编程启蒙&#xff08;C版&#xff09;在线评测系统 https://bas.ssoier.cn/index…

安全升级,智启未来!广东工业安全生产数智化转型闭门分享会圆满举办

8月26日&#xff0c;由华为技术有限公司&#xff08;以下简称“华为”&#xff09;与广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;联合主办&#xff0c;广东省应急产业协会为支持单位的“广东工业安全生产数智化转型闭门分享会”在广州圆满举行。本次…

整合优化方案即将批复,您准备好了吗?

在自然保护地管理的新时代&#xff0c;规划编制的复杂性和高要求常常让各级管理者和规划者面临重重挑战。整合优化方案即将批复&#xff0c;规划任务将十分繁重&#xff01;为了应对这些难题&#xff0c;“自然保护地总体规划智能编制系统”应运而生&#xff0c;旨在为规划编制…

iPhone短信误删如何恢复,四种方法找回短信

在日常使用手机的过程中&#xff0c;我们可能会因为误操作或其他原因不小心删除了重要的短信。这些短信可能包含了工作沟通、家人关怀或朋友间的温馨对话&#xff0c;一旦丢失&#xff0c;难免让人感到焦虑和不安。不过&#xff0c;别担心&#xff0c;针对iPhone短信误删的问题…

Java开发者的专业显示器推荐-明基RD280U

哈喽&#xff0c;小伙伴们好呀&#xff0c;我混编程界已经好几年了&#xff0c;搞了这么多年的Java&#xff0c;换了好几家公司&#xff0c;有的公司发电脑&#xff0c;有的公司发笔记本&#xff0c;有的还发主机&#xff0c;不过你们有没有注意到一个普遍的问题&#xff0c;公…

金融工程--基于akshare的数据获取

背景 在进行金融工程和量化交易的时候&#xff0c;如何获取准确的数据来为我们模型和后期的判断提供支撑和依据成为了比较关键的一个点。对这个问题有几个方面的要求。第一&#xff0c;获取的数据的准确性&#xff0c;第二&#xff0c;大批量数据获取的接口稳定程度&#xff0…