扫一扫咨询方案
首页
登录/注册

{user.username}

ID: {user.id}

模板 SDK 文档

  • 云渲染

    • Demo下载
    • SDK
    • 开发指南
    • AI API 文档
    • 开发者 API 文档
    • 控制台指南
    • 快速入门
    • 产品简介
  • 模板SDK

    • 用户常见问题
    • Demo 下载
    • 开发指南
    • 服务端 SDK
    • iOS SDK
    • 安卓端 SDK
    • 产品简介
  • 剪辑SDK

    • Demo下载
    • SDK
    • 开发指南
    • 产品简介
  • 模板制作教程

    • 模板制作进阶教程
    • 测试模板素材案例下载
    • 常见模板制作案例
    • 模板制作教程
    • 模板制作工具下载
    • 入门指南
  • 剪辑制作教程

    • 剪辑特效导出教程
    • 剪辑特效测试素材
    • 剪辑特效制作工具下载
    • 入门指南
产品简介
安卓端 SDK
iOS SDK
服务端 SDK
开发指南
Demo 下载
用户常见问题
首页 > iOS SDK > 动态模板接入 > 渲染

渲染

更新时间 : 2021-11-16 11:01:14

渲染模板流程

  1. 调用SXTemplate类的构造函数,并传入模板路径和SXTemplateUsageRender作为参数构建一个SXTemplate实例对象
  2. 调用SXTemplate对象的setReplaceableFilePaths方法传入用户自定义素材
  3. 调用SXTemplateRender类的initWithTemplate构造函数,并传入SXTemplate对象、背景音乐路径
  4. 调用commit创建渲染对象
  5. (可选) 利用UI Key等自定义逻辑对模板渲染对象进行精细修改调节
  6. (可选) 设置SXTemplateRender对象的outputPath参数来设置输出文件路径,输出文件路径要以mp4为文件拓展名
  7. 设置SXTemplateRender对象的delegate参数来设置渲染状态监听委托对象
  8. 调用SXTemplateRender对象的start方法开始渲染
  9. 渲染结束后将SXTemplateRender对象的置空

代码示例

  SXTemplate *sxTemplate = [[SXTemplate alloc] init:_templatePath type:SXTemplateUsageRender];
    //默认不开启素材预加载,需要开启请先查看内存使用情况,确保内存空间可用
    //    [sxTemplate setNeedSourcePrepare:YES];


  SXTemplateRender *render = [[SXTemplateRender alloc] initWithTemplate:sxTemplate audioPath:_musicPath];

   render.outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"output.mp4"];
   render.delegate = self;
   [sxTemplate commit];
   [render start];

代理方法


//渲染成功返回视频地址
- (void)templateRenderFinished:(NSURL *) tempUrl {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];


}



//渲染失败
- (void)templateRenderFailed:(NSError *)error {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];


}


//开始渲染
- (void)templateRenderStarted {
    //防止app进入后台代码 注:切换app,锁屏或退出到后台会导致渲染失败
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

    NSString *configPath = [_templatePath stringByAppendingPathComponent:@"config.json"];
    NSData *data = [NSData dataWithContentsOfFile:configPath];
    NSError *error;
    NSDictionary *configDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

    if ([configDic.allKeys containsObject:@"size"]) {
        //导出视频大小
        NSArray<NSNumber *> *size = configDic[@"size"];
         CGSizeMake(size.firstObject.doubleValue, size[1].doubleValue);
    }

}


//渲染取消 [render cancel];
- (void)templateRenderCancelled {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    NSLog(@"%@", NSStringFromSelector(_cmd));
}



//渲染进度回调
- (void)templateRenderProgress:(float)progress {
    视频渲染进度
}


//素材添加,并替换字幕
- (void)prepareRender {
    NSString *configPath = [_templatePath stringByAppendingPathComponent:@"config.json"];
    SXConfigUtils *util = [[SXConfigUtils alloc] initWithPath:configPath fileCount:_resourceArr.count];
    NSMutableArray *resourcePath = [NSMutableArray array];
    for (int i = 0; i<_resourceArr.count; i++) {


        BlockbusterResourceModel *model = _resourceArr[I];
        NSMutableDictionary *mainDic = [NSMutableDictionary new];
        //动态模板添加素材
        [mainDic setObject:model.resourcPath forKey:@"main_file"];
        NSMutableArray *textarr = [NSMutableArray new];
        NSArray<SXTemplateAsset *> *assets = [util getRelatedAssetForFile:i];


        for (SXTemplateAsset *asset in assets) {
            if (asset.replaceType == 3 || asset.replaceType == 4) {


                //字幕替换
                if ([_textDic objectForKey:[NSString stringWithFormat:@"%d",i]]) {
                    NSDictionary *itemTextDic = @{@"type":@(asset.replaceType),@"attr":@{@"text":[_textDic objectForKey:[NSString stringWithFormat:@"%d",i]]}};
                    [textarr addObject:itemTextDic];
                }
            }

        }
        [mainDic setObject:textarr forKey:@"replaces"];

        [resourcePath addObject:mainDic];
    }
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:resourcePath options:0 error:&error];
    NSString *string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [_sxTemplate setReplaceableJson:string];


}
首页 > iOS SDK > 动态模板接入 > 渲染
渲染
更新时间 : 2021-11-16 11:01:14
  • 云渲染
    • Demo下载
    • SDK
    • 开发指南
    • AI API 文档
    • 开发者 API 文档
    • 控制台指南
    • 快速入门
    • 产品简介
  • 模板SDK
    • 用户常见问题
    • Demo 下载
    • 开发指南
    • 服务端 SDK
    • iOS SDK
    • 安卓端 SDK
    • 产品简介
  • 剪辑SDK
    • Demo下载
    • SDK
    • 开发指南
    • 产品简介
  • 模板制作教程
    • 模板制作进阶教程
    • 测试模板素材案例下载
    • 常见模板制作案例
    • 模板制作教程
    • 模板制作工具下载
    • 入门指南
  • 剪辑制作教程
    • 剪辑特效导出教程
    • 剪辑特效测试素材
    • 剪辑特效制作工具下载
    • 入门指南

渲染模板流程

  1. 调用SXTemplate类的构造函数,并传入模板路径和SXTemplateUsageRender作为参数构建一个SXTemplate实例对象
  2. 调用SXTemplate对象的setReplaceableFilePaths方法传入用户自定义素材
  3. 调用SXTemplateRender类的initWithTemplate构造函数,并传入SXTemplate对象、背景音乐路径
  4. 调用commit创建渲染对象
  5. (可选) 利用UI Key等自定义逻辑对模板渲染对象进行精细修改调节
  6. (可选) 设置SXTemplateRender对象的outputPath参数来设置输出文件路径,输出文件路径要以mp4为文件拓展名
  7. 设置SXTemplateRender对象的delegate参数来设置渲染状态监听委托对象
  8. 调用SXTemplateRender对象的start方法开始渲染
  9. 渲染结束后将SXTemplateRender对象的置空

代码示例

  SXTemplate *sxTemplate = [[SXTemplate alloc] init:_templatePath type:SXTemplateUsageRender];
    //默认不开启素材预加载,需要开启请先查看内存使用情况,确保内存空间可用
    //    [sxTemplate setNeedSourcePrepare:YES];


  SXTemplateRender *render = [[SXTemplateRender alloc] initWithTemplate:sxTemplate audioPath:_musicPath];

   render.outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"output.mp4"];
   render.delegate = self;
   [sxTemplate commit];
   [render start];

代理方法


//渲染成功返回视频地址
- (void)templateRenderFinished:(NSURL *) tempUrl {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];


}



//渲染失败
- (void)templateRenderFailed:(NSError *)error {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];


}


//开始渲染
- (void)templateRenderStarted {
    //防止app进入后台代码 注:切换app,锁屏或退出到后台会导致渲染失败
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

    NSString *configPath = [_templatePath stringByAppendingPathComponent:@"config.json"];
    NSData *data = [NSData dataWithContentsOfFile:configPath];
    NSError *error;
    NSDictionary *configDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

    if ([configDic.allKeys containsObject:@"size"]) {
        //导出视频大小
        NSArray<NSNumber *> *size = configDic[@"size"];
         CGSizeMake(size.firstObject.doubleValue, size[1].doubleValue);
    }

}


//渲染取消 [render cancel];
- (void)templateRenderCancelled {
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    NSLog(@"%@", NSStringFromSelector(_cmd));
}



//渲染进度回调
- (void)templateRenderProgress:(float)progress {
    视频渲染进度
}


//素材添加,并替换字幕
- (void)prepareRender {
    NSString *configPath = [_templatePath stringByAppendingPathComponent:@"config.json"];
    SXConfigUtils *util = [[SXConfigUtils alloc] initWithPath:configPath fileCount:_resourceArr.count];
    NSMutableArray *resourcePath = [NSMutableArray array];
    for (int i = 0; i<_resourceArr.count; i++) {


        BlockbusterResourceModel *model = _resourceArr[I];
        NSMutableDictionary *mainDic = [NSMutableDictionary new];
        //动态模板添加素材
        [mainDic setObject:model.resourcPath forKey:@"main_file"];
        NSMutableArray *textarr = [NSMutableArray new];
        NSArray<SXTemplateAsset *> *assets = [util getRelatedAssetForFile:i];


        for (SXTemplateAsset *asset in assets) {
            if (asset.replaceType == 3 || asset.replaceType == 4) {


                //字幕替换
                if ([_textDic objectForKey:[NSString stringWithFormat:@"%d",i]]) {
                    NSDictionary *itemTextDic = @{@"type":@(asset.replaceType),@"attr":@{@"text":[_textDic objectForKey:[NSString stringWithFormat:@"%d",i]]}};
                    [textarr addObject:itemTextDic];
                }
            }

        }
        [mainDic setObject:textarr forKey:@"replaces"];

        [resourcePath addObject:mainDic];
    }
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:resourcePath options:0 error:&error];
    NSString *string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [_sxTemplate setReplaceableJson:string];


}