美摄SDK For iOS
3.14.0
|
模板是美摄SDK的重要技术之一,生成模板是使用模板技术的第一步,生成过程分两步:
调用StreamingContext的exportTemplateInfo 接口生成一个timeline对应的模板信息,三个参数由外部传入。
函数原型如下:
// 输出模板包的信息,返回是否成功。
// 参数1:模板资源包ID
// 参数2:时间线对象
// 参数3:所需模板画幅比例,一般和timeline的画幅比例一致。请参见[模板资源包图幅比例](@ref ASSET_PACKAGE_ASPECT_RATIO)
- (BOOL) exportTemplateInfo: (NSString *) templateUuid
timeline: (NvsTimeline *) timeline
requestedAspectRatio: (int) requestedAspectRatio
如果需要模板支持多画幅,可以多次调用该接口,只要保证timeline和aspectRatio是需要的画幅,templateUuid相同即可。
调用这个接口之前,需要对timeline做一些前提操作,指定生成模板信息所需的一些额外信息。这些信息的指定均通过object上的setTemplateAttachment接口设定。
函数原型如下:
- (void) setAttachment: (NSObject *) value
forKey: (NSString *) key
目前可以设定的信息(key值)包括:
#define TEMPLATE_ASSET_KEY_REPLACE_ID “MSTemplate-ReplaceId”
#define TEMPLATE_ASSET_KEY_FOOTAGE_CAN_REPLACE “MSTemplate-FootageCanReplace”
#define TEMPLATE_ASSET_KEY_FOOTAGE_ID “MSTemplate-FootageId”
#define TEMPLATE_ASSET_KEY_FOOTAGE_NAME “MSTemplate-FootageName”
#define TEMPLATE_ASSET_KEY_FOOTAGE_TAGS “MSTemplate-FootageTags”
#define TEMPLATE_ASSET_KEY_FOOTAGE_TYPE “MSTemplate-FootageType”
#define TEMPLATE_ASSET_KEY_FOOTAGE_NEED_REVERSE “MSTemplate-FootageNeedReverse”
key值为 "MSTemplate-FootageId",value值为任一string。例如“footage0”。
模板在使用时是以footage为单位进行素材替换,多个clip可以对应同一个footage,一个clip也可以是一个footage。同一个footage意思是:footageId是相同的。对应于同一个footage的clip应保证以下条件:
A、trim时长一样,也就是trimOut - trimIn是一样的;
B、tag信息一致,footage可以携带tag信息,比如风景、动物等等属性,用于分类;
C、是否可替换;
D、是否需要倒放。
key值为"MSTemplate-FootageCanReplace",value值为“true”或者“false”。
footage可以设定为是否可以被替换,如果可以被替换,用户在使用模板时可以传入素材进行替换,实现想要的效果。
key值为"MSTemplate-FootageName",value值为该clip使用的素材名称。例如“XXXX.jpg”。
不可替换footage是作为模板的一个内置资源存在的。对于内置的视频、音频素材,为减小模板包的size,应该转码出一个对应时长的文件。
比如一个十分钟的视频要内置,实际使用的trim段是它的第5至第20秒,那么应该转码出一个此trim段的视频,然后footageName设定为这个转码后的文件名。
key值为"MSTemplate-FootageTags",value值为tag的组合,例如“风景,动物”,以逗号隔开。
key值为"MSTemplate-FootageType",value值可为:
A:“video”;
B:“image”;
C:“videoImage”;
D:“audio”。
根据需要进行选择。
以此指定footage的类型,用户使用模板时可以据此传入相应类型的素材。
key值为"MSTemplate-FootageNeedReverse",value值为“true”或者“false”。
表示这个footage是否需要倒放。对于需要倒放的footage,用户在使用模板时需要对传入的素材进行倒放。该设置仅对video类型的footage有效。
除了footage信息必须指定,还有一项非必要信息的指定:
对于timeline上使用的各种效果,包括贴纸、字幕、滤镜等等各种效果都可以进行替换,方法是设置replaceId(key值为"MSTemplate-ReplaceId",value值为任一string,比如“caption0”。对于同类效果,value不可重复)。
通过以上设置,即可完成对模板所需信息的标定。
调用StreamingContext上的generateTemplatePackage接口,生成.templagte 的模板文件。函数原型如下:
//生成模板包,返回是否成功
//参数1:模板资源包ID
//参数2:模板内部资源文件夹路径
//参数3:模板资源包输出路径
- (BOOL) generateTemplatePackage: (NSString *) templateUuid
innerAssetDir: (NSString *) innerAssetDir
templateOutputDir: (NSString *) templateOutputDir
三个参数均由外部指定。其中:
templateUuid :必须和exportTemplateInfo 接口使用的uuid一致;
innerAssetDir :timeline所用到的各种资源包的一个文件夹目录;
templateOutputDir:是生成的模板文件的文件夹路径。
最终该接口在templateOutputDir路径下生成一个名称为templateUuid指定的uuid,后缀名为template的文件。
innerAssetDir所指定的文件夹是该接口的重点,也是调用这个接口前需要做的准备工作。
文件夹目录结构如图:
包含一个info.json文件和一些文件夹。
这个文件是对模板的一个描述,需要客户端生成出来,其结构如下:
Timeline用到的package类型的资源包需要分类放置在这个文件夹下,分类标准是资源包的后缀名,分类文件夹名称和资源包的后缀名保持一致,如上图示。
每个分类不是必须的,有使用这个类别的资源包就放一个这个类别的文件夹,不用新建一个空文件夹。
某个类别的文件夹结构图如下:
innerAssetDir文件夹准备好后,调用StreamingContext的generateTemplatePackage接口完成模板文件生成。