美摄SDK For iOS  3.14.0
模板生成技术文档

美摄sdk模板生成说明

模板是美摄SDK的重要技术之一,生成模板是使用模板技术的第一步,生成过程分两步:

1、生成模板信息。

调用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”

1.1、footageId信息(必须)

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、是否需要倒放。

1.2、footage是否可替换(非必须,默认是true)

key值为"MSTemplate-FootageCanReplace",value值为“true”或者“false”。

footage可以设定为是否可以被替换,如果可以被替换,用户在使用模板时可以传入素材进行替换,实现想要的效果。

1.3、footage名称(仅对不可替换footage需指定此项)

key值为"MSTemplate-FootageName",value值为该clip使用的素材名称。例如“XXXX.jpg”。

不可替换footage是作为模板的一个内置资源存在的。对于内置的视频、音频素材,为减小模板包的size,应该转码出一个对应时长的文件。

比如一个十分钟的视频要内置,实际使用的trim段是它的第5至第20秒,那么应该转码出一个此trim段的视频,然后footageName设定为这个转码后的文件名。

1.4、footage的属性(非必须,默认空字符串)

key值为"MSTemplate-FootageTags",value值为tag的组合,例如“风景,动物”,以逗号隔开。

1.5、footage的类型(必须)

key值为"MSTemplate-FootageType",value值可为:

A:“video”;

B:“image”;

C:“videoImage”;

D:“audio”。

根据需要进行选择。

以此指定footage的类型,用户使用模板时可以据此传入相应类型的素材。

1.6、footage是否需要倒放(非必须,默认false)

key值为"MSTemplate-FootageNeedReverse",value值为“true”或者“false”。

表示这个footage是否需要倒放。对于需要倒放的footage,用户在使用模板时需要对传入的素材进行倒放。该设置仅对video类型的footage有效。

1.7、replaceId设定

除了footage信息必须指定,还有一项非必要信息的指定:

对于timeline上使用的各种效果,包括贴纸、字幕、滤镜等等各种效果都可以进行替换,方法是设置replaceId(key值为"MSTemplate-ReplaceId",value值为任一string,比如“caption0”。对于同类效果,value不可重复)。

通过以上设置,即可完成对模板所需信息的标定。

生成模板文件

2.1、函数说明

调用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文件和一些文件夹。

2.2、文件和文件夹解释

2.2.1、info.json文件

这个文件是对模板的一个描述,需要客户端生成出来,其结构如下:

  1. cover:模板的封面,非必须;
  2. minSdkVersion:模板支持的最低sdk版本,值必须是2.19.0以上;
  3. name:模板的名称;
  4. supportedAspectRatio:模板支持的画幅比例,之前调用exportTemplateInfo 接口生成了一个什么比例的模板信息,这里就需要加一个什么比例;
  5. defaultAspectRatio:默认的画幅比例;
  6. translation:中英文翻译;
  7. uuid:模板的uuid,必须和调用接口传入的uuid一致;
  8. version:模板的版本号;
  9. innerAssetTotalCount:该模板用到的资源包的数量;
  10. footageCount:可替换的footage数量;
  11. duration:模板的时长;
  12. creator:创作者;
  13. description:模板的描述。

2.2.2、其它文件夹

Timeline用到的package类型的资源包需要分类放置在这个文件夹下,分类标准是资源包的后缀名,分类文件夹名称和资源包的后缀名保持一致,如上图示。

每个分类不是必须的,有使用这个类别的资源包就放一个这个类别的文件夹,不用新建一个空文件夹。

某个类别的文件夹结构图如下:

innerAssetDir文件夹准备好后,调用StreamingContext的generateTemplatePackage接口完成模板文件生成。