涂图

  • 首页
  • 解决方案
    • 拍照和图片编辑
    • 视频录制和后期编辑
    • 模板视频
    • 人像美颜
    • 人脸特效
    • 滤镜特效
    • 贴纸特效
  • API服务
    • 人像服务
    • 视频融合
    • 人脸云
    • 在线滤镜
  • 客户案例
  • 下载
  • 文档
  • 关于我们
  • 控制台
  • 一、新手上路
  • 控制台入门
    • 控制台使用说明
  • 二、SDK 文档
  • 图像 SDK
    • 产品说明
      • 使用指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 相册组件的使用
      • 照片美化组件的使用
      • 主题包基础使用
      • 自定义滤镜
      • 自定义贴纸
      • 自定义界面
      • 自定义 ProgressHUD 提示框
      • API 文档
      • 致谢
    • Android 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 照片美化组件的使用
      • 头像设置组件的使用
      • 多选相册组件的使用
      • 主题包基础使用
      • 自定义贴纸
      • 自定义滤镜
      • 自定义界面
      • 自定义进度信息提示框
      • 自定义 Activity 打开相机
      • API 文档
      • 致谢
    • iOS 技术问题
      • 「Incorrenct app key」
      • 更换滤镜效果图
      • 导航栏与状态栏
      • 组件中使用部分滤镜
      • Cocoapods 相关问题
      • 图片尺寸变化
      • Photos.framework 相关错误
      • 多包名发布
      • GPUImage 的相关错误
      • TuSDKTSALAsset 转换系统对象
      • 滤镜无法显示名称
      • 获取相机的点击事件
    • Android 技术问题
      • Incorrenct app key
      • 重复引用包
      • Recyclerview 库缺失
      • 方法数超出 65536 限制
      • 传入图片路径
      • 指定裁剪比例
      • 指定相册每行列数
      • 禁用相册自动跳转
      • 如何使用部分滤镜?
      • 代码混淆
      • TuSDK 使用的依赖库
      • 多渠道打包
      • 设置相机输出尺寸
      • 相机横屏设置
      • 自定义照片美化组件各功能模块效果默认参数值
    • 版本更新日志
      • iOS 版本更新日志
      • Android 更新日志
  • 短视频 SDK
    • 产品说明
      • 使用指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • Android 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • iOS 技术问题
      • 常见问题
    • Android 技术问题
      • 常见问题
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 视频融合 SDK
    • 产品说明
      • 使用指南
      • 模板设计规范
      • 支持的 AE 功能
      • 模板管理
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 模版加载器的使用
      • 模板播放器的使用
      • 模板导出器的使用
      • API文档
    • Android 文档
      • 快速开始
      • 安装与更新
      • EVA播放器的使用
      • 模板资源管理器的使用
      • 模板保存器的使用
      • API 文档
    • 模板导出
      • 模板导出插件安装
      • 导出插件使用
      • 模板打包规范
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
      • 导出插件版本更新日志
  • 直播特效 SDK
    • 产品说明
      • 产品介绍
    • iOS 文档
      • TuSDK直播特效接入说明-iOS
    • Android 文档
      • TuSDK直播特效接入说明-Android
  • 三、云服务文档
  • 人像服务
    • 使用文档
      • 快速入门
      • 核心功能
    • API概述
      • API 概述
      • API 文档
    • 常见问题
      • 常见问题
  • 视频融合(云渲染)
    • 使用文档
      • 快速入门
      • 模板设计规范
      • 支持的 AE 功能
      • 模板管理
    • API概述
      • API概述
      • API 文档
    • 模板导出
      • 模板导出插件安装
      • 导出插件使用
      • 模板打包规范
    • 常见问题
    • 版本更新日志
      • 导出插件版本更新日志
  • 人脸云
    • 使用文档
      • 快速入门
      • 核心功能
    • API 概述
      • API 概述
    • 常见问题
      • 常见问题
  • 在线滤镜
    • 使用文档
      • 快速入门
      • 核心功能
      • FILTER API
      • API 错误码表
    • API概述
      • API 概述
    • 常见问题
      • 常见问题
  • 人脸核查服务
    • 使用说明
      • 产品介绍
      • 服务开通
      • 用户数据管理
    • 费用说明
      • 费用说明
    • 客户端说明
      • 操作须知
      • 客户端配置
      • 基本功能操作
      • 统计数据操作
    • 常见问题
      • 常见问题
  • 四、综合
  • 云服务账单说明
  • 应用包名与密钥
  • 遇到问题,怎么办?
  • 如何使用贴纸管理、滤镜管理?
  • 基础服务开发者升级流程
  • 五、常见问题
  • 常见问题

模板播放器的使用

类名 功能说明
TuSDKEvaPlayer EVA 模板播放器

1.模板播放器的使用

1.1 模板播放器初始化

资源加载完后,进行视频播放预览,播放器类 TuSDKEvaPlayer 的初始化,只需要将上一步执行完后获取的 TuSDKEvaTemplate 对象传入即可。


/**
初始化

@param evaTemplate AE 模板
@return TuSDKEvaPlayer
@since v1.0.0
*/
- (instancetype)initWithEvaTemplate:(TuSDKEvaTemplate *)evaTemplate inHolderView:(UIView *)holderView;

1.2 遵守模板播放器代理 TuSDKEvaPlayerLoadDelegate


/**
EvaPlayer 加载资源事件委托
@since     v1.0.0
*/
@property (nonatomic,weak) id<TuSDKEvaPlayerLoadDelegate> _Nullable loadDelegate;

1.3 模板播放器状态控制


/**
加载播放器
@since  v3.0
*/
- (void)load; // 需要在初始化播放器后进行调研

/**
* 开始播放
* @since  v3.0
*/
- (void)play;

/**
* 暂停播放
* @since  v3.0
*/
- (void)pause;

/**
* 停止播放
* @since  v3.0
*/
- (void)stop;

/**
* 将当前回放时间设置为指定的时间
* @since  v3.0
*/
- (void)seekToTime:(CMTime)outputTime;

1.4 实现模板播放器回调(监听播放的进度和状态)


@protocol TuSDKEvaPlayerLoadDelegate <NSObject>

/**
进度改变事件

@param player 当前播放器
@param percent (0 - 1)
@since v1.0.0
*/
- (void)evaPlayer:(TuSDKEvaPlayer *_Nonnull)player loadProgressChanged:(CGFloat)percent;

/**
播放器状态改变事件

@param player 当前播放器
@param status 当前播放器状态
@since      v1.0.0
*/
- (void)evaPlayer:(TuSDKEvaPlayer *_Nonnull)player loadStatusChanged:(TuSDKMediaPlayerLoadStatus)status;

@end

1.5 重新加载模板

如果模板资源被替换了,想要预览,或者模板资源被替换后又重置回初始状态,那这个 API 就很有用。


/**
重新加载模板.
如果替换了模板内容需要调用 reloadTemplate 重新加载模板内容
@since  v1.0.0
*/
- (void)reloadTemplate;

具体的使用可以查看 Demo 中对 API 的调用,更多其他功能,可以查看 SDK 中头文件中暴露的 API。

1.6 模板播放器释放

建议在控制器的 dealloc 方法中进行播放器的停止播放与释放:

if (_evaPlayer) {
    [_evaPlayer stop];
    [_evaPlayer destory];
    self.evaPlayer = nil;
}

2.模板播放器中资源替换(重点)

前面模板加载的时候有提到 TuSDKEvaTemplate 类,这个类管理了模板的所有资源,所以资源替换也是通过它来实现的。 资源替换的步骤大致是三步:1. 查看可替换的资源;2. 选择替换的资源;3. 生效替换的资源。具体使用如下:

2.1 查看可替换的资源

可替换的资源分为四类:文字资源、图片资源、视频资源以及音频资源; 在 TuSDKEvaTemplate 中分别通过三个管理器进行资源管理:textAssetManager、imageAssetManager、audioAssetManager,其中 imageAssetManager 是用来管理图片和视频。在 EVAPreviewViewController 中获取示例:


// 文字资源
texts = [NSMutableArray arrayWithArray:evaTemplate.textAssetManager.placeholderAssets];
// 图片/视频资源
medias = [NSMutableArray arrayWithArray:evaTemplate.imageAssetManager.placeholderAssets];
// 背景音乐资源
audios = [NSMutableArray arrayWithArray:evaTemplate.audioAssetManager.placeholderAssets];

在 EditViewController 中,我们将 文字资源 、 图片/视频资源 放在了 _orgResources 数组中,并根据帧时间进行排序:

// 资源排序
_orgResources = [NSMutableArray array];
[_orgResources addObjectsFromArray:_evaTemplate.textAssetManager.placeholderAssets];
[_orgResources addObjectsFromArray:_evaTemplate.imageAssetManager.placeholderAssets];
[_orgResources sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSInteger start1 = 0.0, start2 = 0.0;
    if ([obj1 isKindOfClass:[TuSDKEvaImageAsset class]]) {
        TuSDKEvaImageAsset *image = (TuSDKEvaImageAsset *)obj1;
        start1 = image.inputEvaImageAssetPtr->startFrame;
    } else if ([obj1 isKindOfClass:[TuSDKEvaTextAsset class]]) {
        TuSDKEvaTextAsset *text = (TuSDKEvaTextAsset *)obj1;
        start1 = text.inputEvaTextAssetPtr->startFrame;
    }
    if ([obj2 isKindOfClass:[TuSDKEvaImageAsset class]]) {
        TuSDKEvaImageAsset *image = (TuSDKEvaImageAsset *)obj2;
        start2 = image.inputEvaImageAssetPtr->startFrame;
    } else if ([obj2 isKindOfClass:[TuSDKEvaTextAsset class]]) {
        TuSDKEvaTextAsset *text = (TuSDKEvaTextAsset *)obj2;
        start2 = text.inputEvaTextAssetPtr->startFrame;
    }
    return [[NSNumber numberWithInteger:start1] compare:[NSNumber numberWithInteger:start2]];
}];

2.2 选择替换的资源

通过上一步我们已经知道了可以被替换的资源,那么在选择替换资源上,选择要被替换资源的类型:文字、图片、视频或者音频(可参考 Demo 中的步骤);准备好要替换的资源后,进入下一步。

  • 资源替换,并生效

无论是文字、图片、视频还是音频资源,其对象中都有对应的 API 进行替换,详情请参考编辑类 EditViewController 。

  • 替换背景音乐

// 从 TuSDKEvaTemplate 中拿到背景音乐资源对象,替换掉里面的路径即可
TuSDKEvaAudioAsset *audio = _evaTemplate.audioAssetManager.placeholderAssets.firstObject;
//替换背景音乐
audio.assetURL = [NSURL fileURLWithPath:self.selectedMusicPath];
  • 替换文字

// 从_orgResources中获取当前选择的textAsset
TuSDKEvaTextAsset *textAsset = _orgResources[_index];
// 替换文字
textAsset.text = textField.text;
  • 替换图片或视频
// 从_orgResources中获取当前选择的textAsset
TuSDKEvaImageAsset *asset = _orgResources[_index];
// 替换图片或视频
asset.assetURL = outputUrl;

2.3 生效替换的资源(替换后效果预览)

资源替换后的预览播放,调用下面的 API 即可:

// _evaTemplate 是重新创建的,里面的资源也被替换过的
[_evaPlayer reloadTemplate];

2.4 替换后重置

  • 替换资源后,如需重置为初始化状态,将所有占位资源重置回原始状态, API 调用如下:
/**
重置模板占位资源
@since v1.0.0
*/
- (void)resetTemplate;
  • 将对应资源重置回原始状态,分别在 TuSDKEvaTextAssetManager、TuSDKEvaImageAssetManager、TuSDKEvaAudioAssetManager 中,API 如下:
/**
还原占位资源,放弃修改项
@since v1.0.0
*/
- (void)resetPlaceholderAssets;

可以通过 template 中的 imageAssetManager、textAssetManager、audioAssetManager 进行对应资源的重置。

3.模板支持替换带Alpha通道的视频(补充功能)

兼容 Alpha 通道视频(即 Mask 视频特效),该类Aplha通道视频的替换方式和替换图片/视频是一样的,注意:一定要在模板对象创建后,播放前进行替换,详情查看 EVAPreviewViewController。

1、查看模板是否支持Alpha通道视频的替换:

// 添加mask视频,视频文件名称和模板名称对应
TuSDKEvaImageAsset *asset;
for (TuSDKEvaImageAsset *item in _medias) {
    // 判断模板是否支持通道视频的替换,返回YES表示支持
    if ([item isPlaceholderMaskVideoAsset]) {
        asset = item;
        break;
    }
}

2、替换带 Alpha 通道的视频:

// 这里预览目前只能替换第一个
if (asset) {
    NSString *file = [[NSBundle mainBundle] pathForResource:[_fileName componentsSeparatedByString:@"."].firstObject ofType:@"mp4"];
    if ([[NSFileManager defaultManager] fileExistsAtPath:file]) {
        NSURL *url = [NSURL fileURLWithPath:file];
        // 替换带 Alpha 通道的视频
        asset.assetURL = url;
    } else {
        NSLog(@"没找到mask视频文件");
    }
}

  • 1.模板播放器的使用
  • 2.模板播放器中资源替换(重点)
  • 3.模板支持替换带Alpha通道的视频(补充功能)
  • 在线技术支持
  • 专业售前售后团队
  • 版本定期更新
  • 全方位解决方案

商务合作

  • 177-6716-7529
  • 2969573855
  • sales@tusdk.com
  • 浙江省 杭州市 西湖区 西斗门9号 福地创业园1号楼3楼301室

关注我们

qrcode

©2019-2020 TUTUCLOUD. All Rights Reserved. 杭州微禾迅科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号

  • 177-6716-7529
  • sales@tusdk.com
  • 2969573855