短视频SDK提供了视频拼接接口AliyunIMixComposer。该接口实现离线多画面合并成一个视频的功能,例如画中画、九宫格、左右分屏、上下分屏等视频效果,支持添加多轨道视频。本文为您介绍iOS端短视频SDK视频拼接的流程以及示例代码。

版本支持

版本 是否支持
专业版 支持
标准版 支持
基础版 不支持

相关类功能

类名 功能
AliyunMixComposer 拼接功能核心类,提供了对多个视频进行拼接的能力,属于底层实现类,能够实现多视频同画面效果,比如前后拼接、左右分屏、画中画、九宫格等效果。
AliyunMixTrack 视频合并轨道,由AliyunMixComposer创建,可添加视频流。
AliyunMixStream 视频流,具体用来合成拼接的视频,并加入到视频轨道中。
AliyunPureColorBorderInfo 轨道流边框信息。

拼接结构图

拼接结构

拼接流程

阶段 流程 说明 示例代码
基础 1 创建拼接实例,设置代理回调。 初始化
2 创建多个轨道,创建视频流,再将视频流分别添加到各轨道上。 创建轨道
3 配置视频拼接后的输出路径、视频宽高等参数。 配置输出参数
4 设置回调,开始拼接。 开始拼接
进阶 5 取消、暂停、继续拼接,按需设置。 拼接控制

初始化

创建拼接实例,设置代理回调。代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

//创建mixComposer
AliyunMixComposer *mixComposer = [[AliyunMixComposer alloc] init];

//设置代理回调
mixComposer.delegate = self;

创建轨道

创建多个轨道,创建视频流,再将视频流分别添加到各轨道上。代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

添加轨道
//添加一个在左边的轨道
AliyunMixTrack *recordTrack = [mixComposer createTrack:CGRectMake(0,0,360,720)];

//添加一个在右边的轨道
AliyunMixTrack *playerTrack = [mixComposer createTrack:CGRectMake(360,0,360,720)];

//设置轨道参数
//指定音频输出的轨道
recordTrack.outputAudioReferenceTrack = YES;
//指定音频输出占比
recordTrack.outputAudioWeight = 100;

//指定轨道作为输出视频的时长
recordTrack.outputDurationReferenceTrack = YES;

//设置轨道边框
AliyunPureColorBorderInfo *info = [[AliyunPureColorBorderInfo alloc] init];
info.width = 10.f;
info.cornerRadius = 10.f;
info.color = [UIColor redColor];
recordTrack.borderInfo = info;
                
说明 可以通过设置每个轨道的outputAudioReferenceTrack及outputAudioWeight指定输出视频的音频使用。视频的时长的设置,如果轨道都设置了outputDurationReferenceTrack = YES,以轨道的创建先后为准,后创建的会覆盖前一个。
给轨道添加视频流
//添加视频流到左边轨道
AliyunMixStream *recordStream = [[AliyunMixStream alloc] init];
recordStream.filePath = videoPath;
recordStream.mode = AlivcContentModeScaleAspectFit;
[recordTrack addStream:recordStream];

//添加视频流到右边轨道
AliyunMixStream *playerStream = [[AliyunMixStream alloc] init];
playerStream.filePath = mixVideoFilePath;
playerStream.mode = AlivcContentModeScaleAspectFit;
[playerTrack addStream:playerStream];

配置输出参数

配置视频拼接后的输出路径、视频宽高等参数。代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

/输出路径
mixComposer.outputPath = self.outputPath;

//输出分辨率
mixComposer.outputSize = CGSizeMake(720,720);

//输出帧率
mixComposer.fps = 30;

//关键帧间隔
mixComposer.gop = 90;

//视频质量
mixComposer.videoQuality = AliyunVideoQualityHight;

开始拼接

开始拼接视频,并代理回调。代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

//开始拼接
[mixComposer start];


//代理回调
//拼接进度
- (void)mixComposerOnProgress:(float)progress {
}

//拼接完成
- (void)mixComposerDidComplete {
}

//拼接出错
- (void)mixComposerDidError:(int)error {
}

拼接控制

按需设置取消、暂停、继续拼接。代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

//暂停拼接
[mixComposer pause];

//继续拼接
[mixComposer resume];

//取消拼接
[mixComposer cancel];