本文为您介绍iOS端视频合并需要使用的类以及使用说明。

相关类介绍

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

初始化及参数设置

AliyunMixComposer对象解析如下所示。
/**
 合成的回调delegate
*/
@property(nonatomic, weak) id<AlivcMixComposerDelegate> delegate;

/**
 视频最终导出分辨率 必须设置
 */
@property(nonatomic, assign) CGSize outputSize;

/**
 视频最终导出路径 必须设置
 */
@property(nonatomic, copy) NSString *outputPath;

/**
 码率 bps 
*/
@property(nonatomic, assign) NSInteger bitrate;

/**
 视频质量
 */
@property(nonatomic, assign) AliyunVideoQuality videoQuality;

/**
 帧率,这里指的是平均帧率 默认:30 
*/
@property(nonatomic, assign) CGFloat fps;

/**
 关键帧间隔 默认:5 
*/
@property(nonatomic, assign) NSInteger gop;

创建视频轨道

配置项 配置实例
创建轨道
/**
 初始化合拍视频轨道

@param trackDisplayFrame 该轨道的分辨率(参考坐标为视频导出分辨率,例如导出分辨率为960*960,trackDisplayFrame设置为(0,0,480,960)说明该轨道占据了左半部分区域)
@return AlivcMixTrack对象
 */
- (AliyunMixTrack *)createTrack:(CGRect)trackDisplayFrame;
指定参考时长
/**
 指定以某个轨道的时长作为最终合成视频的时长

@param referenceTrack 轨道
 */
- (void)setOutputDurationReferenceTrack:(AliyunMixTrack *)referenceTrack;
指定参考音轨
/**
 指定以某个轨道的音频作为最终合成视频的音频

 @param referenceTrack 轨道
 */
- (void)setOutputAudioReferenceTrack:(AliyunMixTrack *)referenceTrack;

添加视频流

AliyunMixStream对象解析如下所示。
/**
 视频文件路径
 */
@property(nonatomic, copy) NSString *filePath;

/**
 可选参数
 视频在所在轨道上展示的视频本身的裁剪范围,在裁剪模式下可用
 */
@property(nonatomic, assign) CGRect innerCropFrame;

/**
 视频在轨道上播放的开始时间
 单位:秒
 */
@property(nonatomic, assign) CGFloat streamStartTime;

/**
 视频在轨道上播放的结束时间
 单位:秒
 */
@property(nonatomic, assign) CGFloat streamEndTime;

/**
 视频在轨道上的内容填充模式
 分为填充模式和裁剪模式
 */
@property(nonatomic, assign) AlivcContentMode mode;
添加视频流代码如下所示。
/**
 向该轨道加入视频

 @param stream视频
 */
- (void)addStream:(AliyunMixStream *)stream;

合成、暂停、恢复和取消

配置项 配置实例
开始合成
/**
 开始合成
 @return 返回值
 */
- (int)start;
暂停合成
/**
 暂停合成
 @return 返回值 
*/
- (int)pause;
恢复合成
/**
 恢复以继续合成
 @return 返回值 
*/
- (int)resume;
取消合成
/**
 取消合成
 @return 返回值 
*/
- (int)cancel;

代码示例

// 第一步,创建mixComposer,并设置参数
AliyunMixComposer *mixComposer = [[AliyunMixComposer alloc] init];
    mixComposer.outputPath = self.outputPath;
    mixComposer.outputSize = CGSizeMake(720,720);
    mixComposer.fps = 30;
    mixComposer.bitrate = 10000000;
    mixComposer.videoQuality = AliyunVideoQualityHight;
    mixComposer.gop = 5;
    mixComposer.delegate = (id)self;

// 第二步,添加第一个轨道,并给轨道添加流
    AliyunMixTrack *recordTrack = [mixComposer createTrack:CGRectMake(0,0,360,720)];

  NSString *videoPath = [videoAbsPaths objectAtIndex:idx];
    AliyunMixStream *recordStream = [[AliyunMixStream alloc] init];
    recordStream.filePath = videoPath;
    recordStream.mode = AlivcContentModeScaleAspectFit;
    [recordTrack addStream:recordStream];

// 第三步,添加第二个轨道,并给轨道添加流
AliyunMixTrack *playerTrack = [mixComposer createTrack:CGRectMake(360,0,360,720)];
    AliyunMixStream *playerStream = [[AliyunMixStream alloc] init];
    playerStream.filePath = mixVideoFilePath;
    playerStream.mode = AlivcContentModeScaleAspectFit;
    [playerTrack addStream:playerStream];

// 第四步,设置第二个轨道音频输出
    [mixComposer setOutputAudioReferenceTrack:playerTrack];
// 最后一步,开始合并
    [mixComposer start];