You need to enable JavaScript to run this app.
导航
剪同款接入
最近更新时间:2025.05.13 16:17:53首次发布时间:2025.05.13 16:17:53
我的收藏
有用
有用
无用
无用
前提条件
  • 确保申请到有效的License

  • 制作/购买模版素材,并获取素材包

环境配置

环境要求

工程配置

  • 获取SDK后,添加至工程依赖。如果使用Pod,则在Podfile中添加如下配置(版本号改为正确版本)
pod 'EffectOneKit', '1.3.0', :source => 'https://github.com/volcengine/volcengine-spces'
  • 参考:快速开始 - 新建工程、复制代码和资源
接口调用流程

alt

获取模版

获取的数据主要为模版信息(模版标题,模版预览视频等)。主要两个作用,第一提供页面展示信息数据,第二构造后续模版重演流程需要的数据

获取槽位信息

后续素材选择模版重演播放均需要模版槽位信息,模版槽位信息包括素材路径,素材类型

填充模版槽位信息

将可变槽位,填充成为自定义的素材,一般为相册资源

素材合成处理

将模版和自定义资源合成为一个视频,主要进行以下处理:

  • 对素材进行压缩处理,减少素材分辨率,提高重演效率。

  • 根据模版制作规则,按需对素材进行倒放处理。

素材重演播放

指将合成后的视频进行预览播放

接口介绍

初始化&模版准备

配置鉴权和初始化

功能描述

设置鉴权配置,SDK鉴权相关的配置

代码示例

  • 将离线鉴权文件放置到宿主工程目录下
EOAuthorizationConfig *config = [[EOAuthorizationConfig alloc] initWithBlock:^(EOAuthorizationConfigInitializer * _Nonnull initializer) {
    initializer.isOnline = NO;
    // 配置指向鉴权文件路径
    initializer.licensePathForOffline = [[NSBundle mainBundle] pathForResource:@"com.volcengine.effectone.licbag" ofType:nil];
}];
  • 初始化鉴权
[[EOAuthorization sharedInstance] makeAuthWithConfig:config completionHandler:^(BOOL success, NSString * _Nonnull errMsg) {
    [CSIFCutSameSDK setupWithCompletion:^(CSIFCutSameStatus status) {
    if (status == CSIFCutSameStatusReady) {
        // 剪同款鉴权成功
    }
}];

SDK初始化

功能描述

鉴权初始化成功以后,初始化剪同款SDK相关的配置

代码示例

// EffectOne 全局初始化
[EOSDK initSDK:^{

}];

获取模版列表(可选)

功能描述

如果使用素材SDK进行模版列表拉取,则可通过如下接口获取模版。如果自行拉取模版素材,则跳过这一步

代码示例

[EOInjectContainer.shared.resourceLoaderSharedImpl loadConfigByPanelKey:EOPanelKeyCutSame localOnly:NO completion:^(NSString * _Nonnull panelKey, NSArray<id<EOResourceProtocol>> * _Nullable tabs, NSError * _Nullable error) {

}];

注意事项

剪同款模板素材如何使用素材SDK进行管理,参考 SDK功能详解

模版重演

创建模版资源管理对象

功能描述

创建CSIFCutSameSource对象,用来对资源进行管理

接口定义

+ (CSIFCutSameSource * _Nonnull)createSourceFromTemplatePath:(NSString * _Nonnull)path

代码示例

// 传入模版路径
CSIFCutSameSource *source = [CSIFCutSameSDK createSourceFromTemplatePath:@"xxx"];

解析模版信息

功能描述

解析模板,获取模板的槽位信息

接口定义

- (void)prepareTemplateWithProgress:(nullable void(^)(CGFloat))progress
                         completion:(nullable void(^)(NLEModel_OC * _Nullable, CSIFCutSameTemplateModel * _Nullable, NSError * _Nullable, NSString * _Nullable))completion;

代码示例

[self.cutsameSource prepareTemplateWithProgress:^(CGFloat progress) {
       
} completion:^(NLEModel_OC * _Nullable nleModel, CSIFCutSameTemplateModel * _Nullable templateModel, NSError * _Nullable error, NSString * _Nullable errorMsg) {

}];

素材合成处理

功能描述

选择素材后,对选择的素材进行压缩、倒放等处理

接口定义

- (void)prepareSourceWithProgress:(void(^ _Nullable)(CGFloat))progress
                       completion:(void(^ _Nullable)(NSArray<CSIFCutSameMaterialAssetModel *> *_Nullable materialAssetModels, NSError *_Nullable error))completion;

代码示例

[self.cutsameSource prepareSourceWithProgress:^(CGFloat progress) {
     
} completion:^(NSArray<CSIFCutSameMaterialAssetModel *> * _Nullable materialAssetModels, NSError * _Nullable error) {

}];

创建播放对象

功能描述

创建CSIFCutSamePlayer对象,此对象提供视频预览、槽位编辑、文本编辑、视频导出等能力

接口定义

+ (CSIFCutSamePlayer * _Nonnull)createPlayerWithContainerView:(UIView * _Nonnull)containerView 
                                                       source:(CSIFCutSameSource * _Nonnull)source;

代码示例

[CSIFCutSameSDK createPlayerWithContainerView:self.playerContainer source:self.cutsameSource];

注意事项

  • CSIFCutSamePlayer的创建依赖于CSIFCutSameSource对象

  • CSIFCutSamePlayer对象使用完成后,使用 destoryPlayer 方法进行销毁

播放重演

功能描述

使用 CSIFCutSamePlayer 对象,进行模版重演和播放控制

接口定义

更多对象方法,参见 CSIFCutSamePlayer 类定义

@interface CSIFCutSamePlayer : NSObject

/// 释放播放器
- (void)destoryPlayer;
/// 设置播放器
- (void)resetPlayer;

// 控制播放
/// 播放
- (void)play;
/// 暂停
- (void)pause;

/// 跳转到时间播放
/// @param time 时间点
/// @param completion 跳转后回调
- (void)seekToTime:(CMTime)time completion:(nullable dispatch_block_t)completion;

/// 跳转到时间播放
/// @param time 时间点
/// @param seekMode seek模式 0:smooth 1:Accurate
/// @param completion 跳转后回调
- (void)seekToTime:(CMTime)time seekMode:(int)seekMode completion:(nullable dispatch_block_t)completion;

@end

代码示例

[self.cutsamePlayer play];

操作模板对象

获取模板媒体素材

功能描述

获取模板的媒体素材,即模板的可变槽位信息

接口定义

@interface CSIFCutSameTemplateModel : CSIFBaseModel
@property (nonatomic, copy, nullable) NSArray<CSIFCutSameFragmentModel *> *fragments;
@end

代码示例

[self.cutsameSource prepareTemplateWithProgress:^(CGFloat progress) {

} completion:^(NLEModel_OC * _Nullable nleModel, CSIFCutSameTemplateModel * _Nullable templateModel, NSError * _Nullable error, NSString * _Nullable errorMsg) {
    // 可在回调用获取
    self.fragments = templateModel.fragments;
}];

更新媒体素材

功能描述

支持替换媒体素材功能,即替换槽位素材

接口定义

// CSIFCutSameSource
- (void)replaceAsset:(CSIFAssetModel *)originAsset
           withAsset:(CSIFAssetModel *)newAsset
            progress:(void (^)(CGFloat))progress
          completion:(void (^)(CSIFCutSameMaterialAssetModel *model, NSError *error))completion;
       
// CSIFCutSamePlayer
- (BOOL)replaceFragmentWithAsset:(CSIFCutSameMaterialAssetModel *)asset 
                   withPayloadID:(NSString *)payloadId;

代码示例

[self.cutsameSource replaceAsset:originAsset withAsset:newAsset progress:^(CGFloat progress) {

} completion:^(CSIFCutSameMaterialAssetModel *martrialAsset, NSError *error) {
    [self.cutSamePlayer replaceFragmentWithAsset:martrialAsset withPayloadID:fragment.payloadID];
}];

获取播放文本素材

功能描述

获取模版文本素材

接口定义

@interface CSIFCutSamePlayer (EditText)
@property (nonatomic, copy, readonly) NSArray<CSIFTemplateTextFragment *> *_Nullable canReplaceTextFragments;
@end

代码示例

NSArray<CSIFTemplateTextFragment *> *textFragments = player.canReplaceTextFragments;

更新模版文本素材

功能描述

支持编辑模版文本功能

接口定义

- (BOOL)updateTextFragment:(nonnull CSIFTemplateTextFragment *)fragment withText:(nonnull NSString *)text;

代码示例

[cutSamePlayer updateTextFragment:textFragment withText:@"new text"];

播放控制

功能描述

支持控制播放,如开始、暂停、以及Seek到指定时间

接口定义

@interface CSIFCutSamePlayer : NSObject

/// 释放播放器
- (void)destoryPlayer;
/// 设置播放器
- (void)resetPlayer;

// 控制播放
/// 播放
- (void)play;
/// 暂停
- (void)pause;

/// 跳转到时间播放
/// @param time 时间点
/// @param completion 跳转后回调
- (void)seekToTime:(CMTime)time completion:(nullable dispatch_block_t)completion;

/// 跳转到时间播放
/// @param time 时间点
/// @param seekMode seek模式 0:smooth 1:Accurate
/// @param completion 跳转后回调
- (void)seekToTime:(CMTime)time seekMode:(int)seekMode completion:(nullable dispatch_block_t)completion;

@end

代码示例

[self.cutsamePlayer play];

设置某个片段的音量

接口定义

- (BOOL)modifyFragmentWithInfo:(NSDictionary *)info payloadID:(NSString *)payloadId

代码示例

[cutSamePlayer modifyFragmentWithInfo:@{CSIFCutSamePlayerInfoKeyVolume: @(volume)} payloadID:fragment.payloadID];

获取某个片段的音量

接口定义

- (NSDictionary *)metaInfoForVideoFragment:(CSIFTemplateVideoEditFragment *)fragment

代码示例

NSNumber *volumeValue = [self.cutSamePlayer metaInfoForVideoFragment:self.displayFragments[self.curEditIndex]][CSIFCutSamePlayerInfoKeyVolume];

导出

导出视频到本地

功能描述

将重演后的视频导出到本地

接口定义

- (void)exportVideoWithConfig:(CSIFVideoExportConfig * _Nonnull)config progress:(void (^ _Nullable)(CGFloat))progress completion:(void (^ _Nullable)(NSURL * _Nullable videoURL, NSError * _Nullable error))completion

代码示例

[self.cutsamePlayer exportVideoWithConfig:config progress:^(CGFloat progress) {

} completion:^(NSURL * _Nullable videoURL, NSError * _Nullable error) {

}];

视频抽帧

功能描述

获取某个时间点的截图

接口定义

- (void)getVideoFrameWithTime:(CMTime)time completion:(void(^ _Nonnull)(UIImage * _Nullable, NSError * _Nullable))completion;

代码示例

[self.cutSamePlayer getVideoFrameWithTime:CMTimeMake(1, 10) completion:^(UIImage *image, NSError *error) {

}];

清除草稿资源

// 将清除在编辑过程中产生的中间文件
// 使用完剪同款功能功能时可用
[CSIFCutSameSDK clearDrafts];