AliyunMixComposer提供了对多个视频进行拼接的能力,属于底层实现类,能够实现多视频同画面效果,比如左右分屏、画中画、九宫格等效果。

AliyunMixStream(视频流)

视频流是指具体用来合成拼接的视频,将加入到视频轨道中。

初始化及参数设置

/**
 合成的回调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;

代码示例

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];