短视频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];