类名 | 功能说明 |
---|---|
TuSDKEvaPlayer | EVA 模板播放器 |
资源加载完后,进行视频播放预览,播放器类 TuSDKEvaPlayer
的初始化,只需要将上一步执行完后获取的 TuSDKEvaTemplate
对象传入即可。
/**
初始化
@param evaTemplate AE 模板
@return TuSDKEvaPlayer
@since v1.0.0
*/
- (instancetype)initWithEvaTemplate:(TuSDKEvaTemplate *)evaTemplate inHolderView:(UIView *)holderView;
TuSDKEvaPlayerLoadDelegate
/**
EvaPlayer 加载资源事件委托
@since v1.0.0
*/
@property (nonatomic,weak) id<TuSDKEvaPlayerLoadDelegate> _Nullable loadDelegate;
/**
加载播放器
@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;
@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
如果模板资源被替换了,想要预览,或者模板资源被替换后又重置回初始状态,那这个 API 就很有用。
/**
重新加载模板.
如果替换了模板内容需要调用 reloadTemplate 重新加载模板内容
@since v1.0.0
*/
- (void)reloadTemplate;
具体的使用可以查看 Demo 中对 API 的调用,更多其他功能,可以查看 SDK 中头文件中暴露的 API。
建议在控制器的 dealloc
方法中进行播放器的停止播放与释放:
if (_evaPlayer) {
[_evaPlayer stop];
[_evaPlayer destory];
self.evaPlayer = nil;
}
前面模板加载的时候有提到 TuSDKEvaTemplate
类,这个类管理了模板的所有资源,所以资源替换也是通过它来实现的。
资源替换的步骤大致是三步:1. 查看可替换的资源;2. 选择替换的资源;3. 生效替换的资源。具体使用如下:
可替换的资源分为四类:文字资源
、图片资源
、视频资源
以及音频资源
;
在 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]];
}];
通过上一步我们已经知道了可以被替换的资源,那么在选择替换资源上,选择要被替换资源的类型:文字、图片、视频或者音频(可参考 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;
资源替换后的预览播放,调用下面的 API 即可:
// _evaTemplate 是重新创建的,里面的资源也被替换过的
[_evaPlayer reloadTemplate];
/**
重置模板占位资源
@since v1.0.0
*/
- (void)resetTemplate;
TuSDKEvaTextAssetManager
、TuSDKEvaImageAssetManager
、TuSDKEvaAudioAssetManager
中,API 如下:/**
还原占位资源,放弃修改项
@since v1.0.0
*/
- (void)resetPlaceholderAssets;
可以通过 template
中的 imageAssetManager
、textAssetManager
、audioAssetManager
进行对应资源的重置。
兼容 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视频文件");
}
}
©2019-2020 TUTUCLOUD. All Rights Reserved. 杭州微禾迅科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号