视频 sdk 的美颜效果的参数保存方法

你花了半小时调好的美颜参数,下次打开应用居然全没了?——视频sdk美颜参数保存方法详解

相信很多开发者都有过这样的经历:用户辛辛苦苦把磨皮、瘦脸、大眼、美白这些参数调到满意的状态,结果下次打开应用,一切又要从头开始。这种体验说实话挺让人崩溃的。用户心里肯定会想:'这应用也太不智能了吧,我上次调的都白调了?'

作为一个在音视频领域摸爬滚打多年的开发者,我深知美颜参数保存这件事表面简单,实际上涉及到的技术细节还真不少。今天就让我用比较接地气的方式,跟大家聊聊视频sdk中美颜效果参数保存的那些事儿。文章会结合我们声网在服务大量开发者过程中积累的经验,说说怎么把这件事做得更完善。

为什么美颜参数保存是個看似简单但很重要的问题

在说具体实现之前,我们先来想一个问题:用户调一次美颜参数大概需要多长时间?我做过一个不严谨的观察,大多数用户平均需要5到15分钟才能找到让自己满意的效果。这还是熟悉操作的用户,如果是中老年用户,可能需要更久。你想想,用户花了这么多时间调好的东西,结果因为应用卸载、手机换机、或者只是单纯地杀掉后台进程就全部丢失了,这用户体验能好才怪。

从产品角度来说,美颜参数的保存直接关系到用户的留存率和活跃度。根据我们观察到的数据,支持参数记忆的应用,用户第二天打开继续使用的比例比不支持的高出不少。特别是对于一些社交类、直播类的应用,美颜效果是用户决定是否继续使用的关键因素之一。如果每次都要重新调参数,很多用户可能就直接放弃了。

另外,从技术实现角度来看,美颜参数的保存不仅仅是简单的写文件或者存数据库。这里还涉及到跨端同步、版本兼容、隐私安全等一系列问题。处理不好,轻则影响用户体验,重则可能导致应用崩溃或者隐私泄露。所以这个看似细小的功能,其实需要我们认真对待。

美颜参数到底包含哪些东西

在说保存方法之前,我们得先搞清楚美颜参数都包含哪些内容。很多人可能觉得美颜参数就是磨皮、瘦脸、大眼这三个,但实际上现代视频SDK的美颜功能远不止这些。

以我们声网的视频SDK为例,一套完整的美颜参数通常包括基础美颜参数、进阶调节参数和特效参数三大类。下面我用一个表格来详细说明:

参数类别 具体参数 说明
基础美颜参数 磨皮程度 控制皮肤光滑程度,通常0-100可调
美白程度 调节肤色亮度
瘦脸程度 面部轮廓修饰
大眼程度 眼睛放大效果
下巴调节 下巴尖俏程度
额头调节 发际线修饰
进阶调节参数 祛斑祛痘 局部皮肤瑕疵处理
黑眼圈修复 眼周暗沉处理
法令纹淡化 面部纹路修饰
眼神光增强 眼睛神采调节
特效参数 滤镜选择 预置滤镜或自定义滤镜
滤镜强度 滤镜效果叠加程度
贴纸/装饰 动态贴纸位置和开关状态

除了这些视觉参数之外,还有一类参数经常被忽略,那就是技术配置参数。比如美颜算法的版本号、当前使用的美颜模型ID、处理帧率的设置等等。这些参数在某些情况下也需要保存,比如当用户更换了美颜模型包之后,如果还使用旧版本的参数配置,可能会出现效果异常。

了解了参数的具体内容,接下来我们来看看这些参数都有哪些保存方案。

方案一:本地持久化存储,最基础的解决方案

本地存储是最直接的方式,用户的参数就保存在自己的设备上。这种方式最大的好处是不需要网络随时都能用,而且隐私数据不会上传到服务器。缺点也很明显,换了手机或者重装应用,参数就没了。

移动端的本地存储选择

在iOS和Android平台上,我们可以选择存储方式还是蛮多的。

iOS端我建议使用UserDefaults来存储美颜参数。UserDefaults本质上是一个plist文件,适合存储一些配置信息和小量数据。美颜参数通常不会太多,用UserDefaults完全够用。需要注意的是,UserDefaults存储的数据在应用被卸载后会被清除,所以这个方案只能保证在应用重装前参数不丢失。

Android端的选择稍微多一些。如果是存储简单的配置信息,SharedPreferences是个不错的选择。如果参数数据结构比较复杂,或者数据量较大,可以考虑使用SQLite数据库。现在很多应用也使用DataStore,这是Google推荐的替代SharedPreferences的方案,API更现代,也支持异步读写。

这里我要提醒一下,不管用哪种方式,都建议对存储的数据做一下加密处理。虽然美颜参数本身不是什么敏感信息,但万一用户的设备丢失或者被root,存储在明文文件里的数据总归不太安全。特别是有些应用可能在参数里记录了用户的使用习惯,这些信息最好还是保护一下。

Flutter和跨平台框架的特殊处理

如果是使用Flutter或者React Native这样的跨平台框架,处理方式会有所不同。因为跨平台框架往往有自己的数据存储抽象层,比如Flutter的shared_preferences插件或者sqflite插件。这些插件底层也是调用的平台原生存储能力,但在使用的时候要注意平台差异。

举个实际遇到的例子:有开发者反馈说在iOS上用shared_preferences存储的美颜参数,在Android上读不出来。后来排查发现,是因为两个平台使用的key不一致。所以在跨平台开发时,一定要做好平台的适配工作,最好能写一套统一的存储接口来屏蔽这些差异。

方案二:云端同步,让参数跟着用户走

本地存储有个硬伤——数据只能保存在单一设备上。如果用户换了手机,或者同时在手机和平板上使用应用,本地存储就无能为力了。这时候就需要云端同步方案。

云端存储的技术架构

云端同步的原理其实不复杂:用户每次修改美颜参数,客户端就把参数同步到服务器;用户在新设备登录时,客户端从服务器拉取最新的参数。这种方案需要考虑几个技术点:

  • 数据同步时机:是每次修改都立即同步,还是等用户操作完成后再同步?实时同步会增加服务器压力和网络消耗,但如果不同步万一用户切换设备时拿到旧数据,体验也不好。我的建议是可以采用'延迟同步+手动触发'的策略,平时在本地缓存参数,隔一段时间或者在应用切到后台时同步到服务器,同时给用户提供手动刷新按钮。
  • 增量同步:用户可能只是微调了某一个参数,如果每次都上传全部参数就太浪费了。可以设计成只上传修改了的字段,服务器进行合并。
  • 离线支持:网络不好的时候,本地参数修改后要能正常存储,等网络恢复后再自动同步。这需要设计一套本地的'待同步队列'机制。

数据安全和隐私保护

云端存储美颜参数这件事,用户的隐私是首要考虑的问题。虽然美颜参数看起来不像聊天记录或者照片那样敏感,但毕竟也是用户的使用数据。在我们声网的服务中,会建议开发者在数据传输和存储时都进行加密。

具体来说,参数数据在客户端就要先加密再上传,服务器存储时也应该是加密状态。只有在用户自己的设备上,才能解密看到原始参数。这样即使服务器被攻破,攻击者拿到的也只是一堆无意义的密文。

另外,最好给用户提供数据导出和删除的能力。欧盟的GDPR还有国内的个人信息保护法都有这样的要求,用户应该能把自己的数据带走,也应该能把自己的数据删除。这个功能做起来不复杂,但关键时刻能避免很多法律风险。

方案三:结合声网实时音视频能力的参数同步实践

说到云端同步,正好提一下我们声网在这块的实践。很多开发者可能会问,你们不是做音视频云服务的吗,跟美颜参数保存有什么关系?其实关系还挺大的。

声网的实时音视频服务覆盖了全球超过200个国家和地区,我们有大量现成的基础设施可以用于参数同步。比如利用rtc通道来传输参数数据,利用现有的登录鉴权系统来确认用户身份,利用全球部署的边缘节点来加速数据同步。

具体实现上,我们建议的方案是这样的:

首先,参数数据结构化。先定义一个标准的美颜参数JSON Schema,明确每个参数的名称、类型、取值范围和默认值。这样不管是在哪个端生成的参数,格式都是统一的,方便后续处理和兼容。

然后,利用声网的实时消息通道来实现参数的实时同步。当用户在一台设备上修改了参数,客户端可以通过rtc的MessageChannel把变更推送到服务器,服务器再通过IM消息或者其他方式同步到用户的其他设备。这样做的好处是延迟很低,用户在一个设备上修改,另一个设备很快就能收到更新。

最后,做好版本兼容。美颜SDK本身会迭代升级,新的版本可能会增加新的参数或者调整参数含义。在设计参数存储格式时,一定要带上版本号。当检测到版本不一致时,要能正确地做降级或者升级处理,避免新版本读取旧版本参数时出错。

那些年我们踩过的坑——几个实用的建议

在服务开发者的过程中,我们见过各种各样因为美颜参数保存不当导致的问题。这里总结几条实用的建议,希望对大家有帮助。

默认值和兜底策略

一定要为美颜参数设置合理的默认值,并且处理各种异常情况。比如从服务器拉取参数失败了,本地存储读取失败了,参数格式解析报错了——这些场景下,应用都不能崩溃,而是要能优雅地降级到默认参数。

我的建议是在代码里准备两套默认参数:一套是SDK内置的硬编码默认参数,另一套是服务器下发的动态默认参数。当本地配置损坏时,先试服务器下发,不行再用硬编码。这样既能保证灵活性,又不会完全依赖网络。

参数变更的版本管理

美颜功能会迭代,参数结构也会变。今天只有磨皮美白,明天可能加了祛斑祛痘,后天又加了AI美颜。这时候一定要做好版本管理。

我们推荐的做法是给每个参数配置加上版本号,每次结构有变化就递增版本号。同时保留旧版本参数的解析逻辑,新版本能识别旧版本数据并自动转换。这样即使用户是很久以前保存的参数,现在升级了应用也能正确加载,不会出现效果错乱的问题。

用户操作日志和debug支持

虽然这不直接属于参数保存的范畴,但我强烈建议在应用里加入操作日志功能。记录用户每次修改参数的时间、修改了哪个参数、改成了什么值。这些日志在排查用户反馈的'美颜效果不对'这类问题时非常有用。

另外,给开发者或者测试人员留一个导出参数的入口也很重要。这样可以快速复现用户遇到的问题,提高排查效率。

写在最后

美颜参数保存这个功能,说大不大,说小也不小。做好了,用户觉得应用更智能更贴心;做不好,就会一直有用户抱怨'为什么又要重新调'。

从我个人的经验来看,核心就是要站在用户角度思考:用户希望自己的设置能够被记住,不管是在同一台设备上反复使用,还是换到新设备上,都能继续之前的体验。基于这个目标,再去选择合适的技术方案,就能做出正确的设计决策。

如果你正在开发视频类应用,需要处理美颜参数保存的问题,或者有其他音视频技术方面的疑问,欢迎一起交流探讨。技术在不断进步,解决方案也在持续优化,希望我们能共同为用户创造更好的使用体验。

上一篇rtc sdk 的版本兼容性测试工具
下一篇 rtc sdk的自定义事件开发

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱:

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部