You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们
导航

iOS

最近更新时间2023.09.22 16:33:25

首次发布时间2022.08.30 16:59:12

美颜特效是直播场景的基础功能,视频直播 SDK 内置了美颜特效 CV SDK 的相关接口,帮助您完成美颜特效能力的快速接入。在开始对接前,请先联系商务,获取对应版本的 CV SDK(推荐使用 4.4.3 及以上版本)、授权文件 License 和特效资源包。

本章节为您介绍视频直播 SDK 中提供的美颜滤镜等功能相关接口,您可以参考 veVOS Demo 中直播推流部分的实现,完成 CV SDK 的接入。

接入参考

Step 1:(可选)修改编译配置

CV SDK 和 TTSDK 可以按需提供动态库/静态库打包版本。TTSDK SDK 动态库会动态加载 CV SDK 的函数地址,由于链接器在链接过程会优化掉静态库中未被直接依赖的符号和代码,因此

  • 当 CV SDK 采用静态库时,需要参考 Step 1 示例修改编译配置,阻止链接器删掉 CV SDK 中相关符号和代码;
  • 当 CV SDK 采用动态库时,请执行 Step 2
  1. 修改 App 工程配置。依次选择 Build Settings > Deployment > Strip Style

  1. 依次选择 Build Settings > Linking > Other Linker Flags,添加以下符号。
-Wl,-u,_bef_effect_ai_check_license
-Wl,-u,_bef_effect_ai_create
-Wl,-u,_bef_effect_ai_destroy
-Wl,-u,_bef_effect_ai_init
-Wl,-u,_bef_effect_ai_use_pipeline_processor
-Wl,-u,_bef_effect_ai_set_intensity
-Wl,-u,_bef_effect_ai_set_color_filter_v2
-Wl,-u,_bef_effect_ai_set_camera_device_position
-Wl,-u,_bef_effect_ai_composer_set_nodes
-Wl,-u,_bef_effect_ai_algorithm_texture
-Wl,-u,_bef_effect_ai_process_texture
-Wl,-u,_bef_effect_ai_composer_set_mode
-Wl,-u,_bef_effect_ai_set_width_height
-Wl,-u,_bef_effect_ai_composer_update_node		
-Wl,-u,_bef_effect_ai_matting_check_license
-Wl,-u,_bef_effect_ai_portrait_matting_init_model
-Wl,-u,_bef_effect_ai_matting_check_license
-Wl,-u,_bef_effect_ai_portrait_matting_destroy
-Wl,-u,_bef_effect_ai_portrait_matting_set_param
-Wl,-u,_bef_effect_ai_portrait_matting_do_detect
-Wl,-u,_bef_effect_ai_portrait_get_output_shape
-Wl,-u,_bef_effect_ai_portrait_matting_create
-Wl,-u,_bef_effect_ai_matting_check_license
-Wl,-u,_bef_effect_ai_set_orientation		
-Wl,-u,_bef_effect_ai_get_face_detect_result		
-Wl,-u,_bef_effect_ai_get_license_wrapper_instance
-Wl,-u,_bef_effect_ai_check_license
-Wl,-u,_bef_effect_ai_set_render_api
-Wl,-u,_bef_effect_ai_use_builtin_sensor
-Wl,-u,_bef_effect_ai_check_online_license
-Wl,-u,_bef_effect_ai_set_effect
-Wl,-u,_bef_effect_ai_composer_set_nodes_with_tags
-Wl,-u,_bef_effect_ai_composer_append_nodes
-Wl,-u,_bef_effect_ai_composer_append_nodes_with_tags
-Wl,-u,_bef_effect_ai_composer_remove_nodes
-Wl,-u,_bef_effect_ai_load_resource_with_timeout

说明

如配置时出现异常,可参考异常处理操作。

Step 2:初始化 CV SDK License

@interface TTSDKEffectManager : NSObject
/// 初试化美颜
/// 如果美颜整体的资源是放在主工程内,path 可以传 nil, 其它路径下,请传入目录路径
/// 资源的目录里面的文件包含但不限于:ComposeMakeup.bundle, FilterResource.bundle,  ModelResource.bundle, StickerResource.bundle
/// @note  如果使用的是在线/账号模式的 License,需要调用一下 updateLicense 更新 License后方可使用美颜功能
/// @param  dir 美颜资源所有 Bundle 所在目录,如果美颜整体的资源是放在主工程内,path 可以传 nil
/// @param  config 美颜 License 配置
+ (void)setupWithResourcesDir:(nullable NSString *)dir withConfig:(TTSDKEffectConfig *)config;
@end

/// 初试化美颜 SDK
/// License 必须放在 MainBundle 内的 LicenseBag.bundle 内
[TTSDKEffectManager setupWithResourcesDir:nil licenseName:@"xxx"];

/// 可以自定义 License 路径
TTSDKEffectOfflineConfig *config = [[TTSDKEffectOfflineConfig alloc] init];
config.path = nil; /// license 的绝对路径

/// @param  config 美颜 License 配置
[TTSDKEffectManager setupWithResourcesDir:nil withConfig:config];

/// 在线 License 验证
TTSDKEffectOnlineConfig *cfg = [[TTSDKEffectOnlineConfig alloc] initWithName:@"xxx"];
cfg.key = @"";
cfg.secret = @"";
[TTSDKEffectManager setupWithResourcesDir:resourcePath withConfig:cfg];
/// 配置完成后需要更新下 License,防止上次本地缓存的 License 过期
[TTSDKEffectManager updateLicenseWithConfig:nil async:YES completion:^(BOOL success, NSError * _Nullable error, NSString * _Nullable licensePath) {
     dispatch_async_on_main_queue(^{
        if (error != nil) {
            /// 在线 License 更新失败
        } else {
            /// 在线License 更新成功
        }
     });
}];

/// 检查是否初始化特效资源成功,true为 成功,false 为失败
if ([TTSDKEffectManager isValid]) {
    /// License 可用
}

Step 3:配置美颜特效

/// 设置特效素材
/// @param  nodes  特效素材相对 ComposeMakeup.bundle/ComposeMakeup 的路径,或者绝对路径
+ (void)updateComposerNodes:(NSArray<NSString *> *)nodes;

/// 设置美颜效果
/// 如果想移除某个美颜效果,把 intensity 置为 0 即可
/// @param  path 美颜或者美型节点,绝对路径或者相对 ComposeMakeup.bundle 的相对路径
/// @param  key 特效Key
/// @param  intensity 特效强度
+ (void)setBeauty:(NSString *)path key:(NSString *)key intensity:(float)intensity;


/// 设置特效素材
/// 设置 ComposeMakeup.bundle 下的所有功能,包含美颜、美形、美体、美妆等
/// @param  nodes 特效素材相对 ComposeMakeup.bundle/ComposeMakeup 的路径,或者绝对路径
/// @param  tags 每一个特效素材对应一个 tag,tag 会传递给 SDK 素材的的一些配置
+ (void)updateComposerNodes:(NSArray<NSString *> *)nodes withTags:(NSArray<NSString *> *)tags;


/// 设置美颜效果
/// 如果想移除某个美颜效果,把 intensity 置为 0 即可
/// @param  path 美颜或者美型节点,绝对路径或者相对 ComposeMakeup.bundle 的相对路径
/// @param  tag 每一个特效素材对应一个 tag,tag 会传递给 SDK 素材的的一些配置
/// @param  key 特效 Key
/// @param  intensity 特效强度
+ (void)setBeauty:(NSString *)path tag:(nullable NSString *)tag key:(NSString *)key intensity:(float)intensity;

/// 清除美颜、美型特效
+ (void)clearBeauty;

/// 设置滤镜
/// @param  path 滤镜节点, 绝对路径或者相对 FilterResource.bundle 的相对路径
/// @param  intensity 特效强度
+ (void)setFilter:(NSString *)path intensity:(float)intensity;

/// 设置当前滤镜特效强度
+ (void)setFilterIntensity:(float)intensity;

/// 设置贴纸
/// @param  path 贴纸节点,绝对路径或者相对 StickerResource.bundle 的相对路径
+ (void)setSticker:(NSString *)path;

/// 销毁特效实例,如果执行了改方法,下次调用前,必须重新执行 setup 方法
+ (void)destroy;

异常处理

在执行修改编译配置时报错怎么办?

  • 如果 pod install 报错,情检查 -Wl 前面是否有空格,以及结尾的 EOF 符号前面是否有空格。
  • 如果执行 pod install 报警 target overrides the STRIP_STYLE,表示 podspec 中的 STRIP_STYLE 配置不生效,可参考手动配置中的说明修改。
  • 如果执行 pod install 报警 target overrides the OTHER_LDFLAGS,表示 podspec 中的 OTHER_LDFLAGS 配置不生效,可参考手动配置中的说明修改。
  • 如果编译 App 提示 _bef_xxx 符号不存在,请检查 CV SDK 静态库是否集成以及版本号是否正确。目前 TTSDK 最低支持 CV SDK 4.2.3 版本。