功能介绍

短视频SDK提供基础视频录制功能,支持添加配乐,变速录制,人脸贴纸等录制效果,核心类AliyunIRecorder。

版本差异

版本 功能描述
专业版 支持所有功能。
标准版 支持基础录制和音乐功能,不支持人脸识别。
基础版 支持基础录制,不支持音乐和人脸识别。

相关类功能

名称 功能
AliyunIRecorder 录制功能核心类
AliyunClipManager 录制片段管理器,获取片段信息,对视频片段进行删除操作等
AliyunIRecorderDelegate 录制代理回调

录制流程

说明 录制功能需要获取摄像头和麦克风权限,否则无法录制。
录制流程如下:录制流程

初始化设置

说明
  • taskPath表示文件夹路径,用来存放录制相关配置。
  • preview长宽比和videoSize保持一致。
配置项 配置实例
初始化
- (instancetype)initWithDelegate:(id<AliyunIRecorderDelegate>)delegate videoSize:(CGSize)videoSize;
设置文件夹路径
@property (nonatomic, copy) NSString *taskPath;
设置录制视频输出路径
@property (nonatomic, copy) NSString *outputPath;
设置预览视图
@property (nonatomic, strong) UIView *preview;

开启预览视图

配置项 配置实例
开始预览
- (void)startPreview;
- (void)startPreviewWithPositon:(AliyunIRecorderCameraPosition)cameraPosition;
停止预览

录制完成或退后台需要停止预览。

- (void)stopPreview;
销毁对象

预览结束后销毁对象,释放录制相关资源。

- (void)destroyRecorder;

录制参数设置

说明 录制模块支持多种参数配置,需要注意的是,只能在预览视图时设置参数,录制过程中不能设置。
配置项 配置实例
设置曝光值
@property (nonatomic, assign) CGFloat exposureValue;
设置前置摄像头采集分辨率

默认值:AVCaptureSessionPreset640x480,更多参数请从AVCaptureSession.h中获取。

@property (nonatomic, copy) NSString *frontCaptureSessionPreset;
设置后置摄像头采集分辨率

默认值:AVCaptureSessionPreset1280x720,更多参数请从AVCaptureSession.h中获取。

@property (nonatomic, copy) NSString *backCaptureSessionPreset;
设置摄像头角度
@property (nonatomic, assign) int cameraRotate;
设置手动对焦点
@property (nonatomic, assign) CGPoint focusPoint;
设置变焦倍数

每次调用videoZoomFactor接口,实际变焦值zoom为设定的1/100。例:设置videoZoomFactor = 10.0f,实际zoom += 0.1f。

如果您开启前置摄像头录制,那么当前设置无效。

@property (nonatomic, assign) CGFloat videoZoomFactor;
设置编码方式
/**
0软编  1硬编*/
@property (nonatomic, assign) int encodeMode;
设置关键帧间隔

默认值:5,建议设置值:1-300。

@property (nonatomic, assign) int GOP;
设置录制帧率

默认值:25。

@property (nonatomic, assign) int recordFps;
设置是否静音

如果您在录制过程中添加音乐,那么当前设置无效。

@property (nonatomic, assign) BOOL mute;
设置视频质量

如果设置了bitrate参数,那么当前设置无效。

@property (nonatomic, assign) AliyunVideoQuality videoQuality;
设置输出视频码率(bps)
@property (nonatomic, assign) int bitrate;
设置采集视频格式
SDK提供了三种视频格式:
  • kCVPixelFormatType_420YpCbCr8BiPlanarFullRange。
  • kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange。
  • kCVPixelFormatType_32BGRA。
默认格式:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange。
@property (nonatomic, assign) AliyunIRecorderVideoOutputPixelFormatType outputType;
异步获取拍摄图片
/**
image 采集的渲染后图片
rawImage 采集的原始图片
*/
- (void)takePhoto:(void (^)(UIImage *image, UIImage *rawImage))handler;
切换摄像头
/**
@return 切换后的摄像头位置
*/
- (AliyunIRecorderCameraPosition)switchCameraPosition;
循环切换手电筒
手电筒模式有三种:分别是off,on和auto。切换顺序:off —-> on —-> auto。默认值:off。
/**
@return 切换后的手电筒模式
*/
- (AliyunIRecorderTorchMode)switchTorchMode;
切换指定手电筒模式
/**
@param torchMode 指定模式
@return  return YES if success
*/
- (BOOL)switchTorchWithMode:(AliyunIRecorderTorchMode)torchMode;

录制特效设置

  • 美颜
    配置项 配置实例
    设置是否开启美颜状态
    @property (nonatomic, assign) BOOL beautifyStatus;
    设置美颜度

    范围:[0,100]。

    @property (nonatomic, assign) int beautifyValue;
  • 滤镜
    短视频SDK的滤镜资源存放在滤镜文件夹,滤镜文件夹包含配置文件和相关资源。AliyunEffectFilter代表一个滤镜资源,可以通过初始化方法构造一个滤镜实例,参数path是滤镜资源文件夹路径。
    配置项 配置实例
    生成滤镜对象
    - (id)initWithFile:(NSString *)path;
    添加滤镜

    由于滤镜无法叠加,因此每次调用applyFilter:方法都会替换滤镜。

    - (int)applyFilter:(AliyunEffectFilter *)filter;
    删除滤镜
    - (void)deleteFilter;
  • 特效滤镜
    特效滤镜和滤镜都使用AliyunEffectFilter,但是两者用的资源不同。demo中提供了几组特效滤镜的资源文件,如抖动、幻影、科幻、朦胧、重影。
    配置项 配置实例
    添加特效滤镜
    - (int)applyAnimationFilter:(AliyunEffectFilter *)filter;
    删除特效滤镜
    - (void)deleteAnimationFilter;
  • 音乐特效
    AliyunEffectMusic代表一个音乐资源,可以通过初始化方法构造一个音乐实例,参数path是音乐资源文件路径。
    配置项 配置实例
    生成音乐对象
    - (id)initWithFile:(NSString *)path;
    添加音乐
    - (int)applyMusic:(AliyunEffectMusic *)music;
    说明 只能在录制开始前调用添加音乐接口,录制过程中或录制结束后不能调用该接口。
  • MV特效
    短视频SDK的MV资源存放在MV文件夹中,MV文件夹包含了配置文件和相关资源。下载的MV压缩包中有四种长宽比的MV文件夹,用来适配不同的输出分辨率。AliyunEffectMV代表一个MV资源,可以通过初始化方法构造一个MV实例,参数path是MV资源文件夹路径。
    配置项 配置实例
    生成MV对象
    - (id)initWithFile:(NSString *)path;
    添加一个MV
    - (int)applyMV:(AliyunEffectMV *)mv;
    删除MV
    [recorder applyMV:nil]
  • 贴纸/人脸识别特效
    贴纸的基类是AliyunEffectPaster。
    配置项 配置实例
    添加动图
    /**
    @param paster 动图
    */
    - (int)applyPaster:(AliyunEffectPaster *)paster;
    设置是否开启人脸识别

    开启该功能后,当系统检测有人脸动图加入时将自动追踪。

    @property (nonatomic, assign) BOOL useFaceDetect;
    设置人脸个数
    /**
    最大设置3个,最小设置1个。如果不需要检测人脸,请使用:useFaceDetect = NO
    */
    @property (nonatomic, assign) int faceDetectCount;
    设置是否同步贴合人脸

    默认值:YES。同步贴合人脸的贴合性强,但是性能差的设备可能卡顿。非同步贴合人脸的画面流畅,但是贴合性差。

    建议iphoe6及以上机型设置为YES,iphoe6以下机型建议设置为NO。

    @property (nonatomic, assign) BOOL faceDectectSync;
    删除动图
    `- (void)deletePaster:(AliyunEffectPaster *)paster;`
  • 水印特效

    设置水印本质指加入一张图片进行渲染。

    设置动图、水印的位置
    /**
    @param rect 位置(x,y,width,height)均为比例值
    @param effect 指定的效果 (目前支持水印和普通动图)
    */
    - (void)setEffectView:(CGRect)rect effect:(AliyunEffect *)effect;
    说明 rect表示位置(x,y,width,height),x,y,width和height的值都是比例值。例:播放视频view的size为(400,400),动图位置为(50,50,100,100),那么rect参数为(0.125,0.125,0.25,0.25);effect表示指定的效果(目前支持水印和普通动图)。
  • 自定义渲染
    SDK提供了多种渲染回调,包括音频的回调(用于音频渲染业务等),视频的回调(包括数据回调或纹理回调)。
    配置项 配置实例
    返回原始视频数据
    /**
    @param sampleBuffer 视频数据
    */
    - (void)recorderOutputVideoRawSampleBuffer:(CMSampleBufferRef)sampleBuffer;
    返回原始音频数据
    /**
    @param sampleBuffer 音频数据
    */
    - (void)recorderOutputAudioRawSampleBuffer:(CMSampleBufferRef)sampleBuffer;
    自定义渲染1
    /**
    @param sampleBuffer 原始数据
    @return 用户自渲染后的PixelBuffer
    */
    - (CVPixelBufferRef)customRenderedPixelBufferWithRawSampleBuffer:(CMSampleBufferRef)sampleBuffer;
    自定义渲染2

    开放pixelBuffer和纹理id(仅支持BGRA格式)。

    /**
    @param pixelBuffer 摄像头数据
    @param textureName 摄像头数据纹理
    @return 自定义渲染后的纹理id
    */
    - (NSInteger)recorderOutputVideoPixelBuffer:(CVPixelBufferRef)pixelBuffer textureName:(NSInteger)textureName;
    自定义渲染3
    /**
    @param srcTexture 原始视频帧纹理id
    @param size 原始视频帧纹理size@return 返回纹理id
    */
    - (int)customRender:(int)srcTexture size:(CGSize)size;
    自定义渲染4
    /**
    摄像头数据格式为BGRA、YUV时都需实现
    @param textureName 原始纹理ID
    @return 处理后的纹理ID
    */
    - (NSInteger)recorderOutputVideoTextureName:(NSInteger)textureName textureSize:(CGSize)textureSie;
    /**
    摄像头数据格式仅为YUV时须实现,反之不实现
    @param textureName  原始UV分量的纹理ID
    @return 处理后的纹理ID
    */
    - (NSInteger)recorderOutputVideoUVTextureName:(NSInteger)textureName;

录制视频

配置项 配置实例
开始录制一段视频

SDK支持录制单段或多段,预览状态下,调用录制接口开始录制。

- (int)startRecording;
停止录制一段视频
- (void)stopRecording;
说明
  • 调用stopRecording停止录制后,SDK内部会执行保存视频相关操作,收到AliyunIRecorderDelegate的- (void)recorderDidStopRecording回调后才能继续执行其他操作。
  • startRecording和stopRecording需要成对出现,可以调用一次或多次,对应SDK内部会生成一段或多段临时视频文件。

完成录制

完成录制
- (void)finishRecording;
说明 收到AliyunIRecorderDelegate的- (void)recorderDidFinishRecording回调后,录制操作完成,输出视频文件保存在outputPath中。

事件处理

对于锁屏,来电,退后台等事件,需要进行特殊处理。

页面需要监听UIApplicationWillResignActiveNotification事件,当进入Inactive状态前需要调用stopRecording和stopPreview方法停止预览。还需要监听UIApplicationDidBecomeActiveNotification事件,当进入Active状态后调用startPreview方法重新开启预览。

示例

- (void)viewDidLoad {

    // 初始化配置recorder
    self.recorder = [[AliyunIRecorder alloc] initWithDelegate:self videoSize:CGSizeMake(720,1280)];
    self.recorder.preview = self.previewView;
    self.recorder.outputPath = `视频输出沙盒路径`;
    self.recorder.outputType = AliyunIRecorderVideoOutputPixelFormatType420f;//人脸识别只支持YUV格式
    self.recorder.taskPath = `taskPath路径`;
    // 录制片段设置
    self.clipManager = self.recorder.clipManager;
    self.clipManager.maxDuration = 15;
    self.clipManager.minDuration = 0.5;
}

- (void)recordButtonTouchesBegin {
    // 点击录制button开始录制
    [self.recorder startRecording];
}

- (void)recordButtonTouchesEnd {
    // 点击录制button停止录制
    [self.recorder stopRecording];
}

- (void)recorderDidStopRecording {
    // 收到录制停止回调,调用完成录制
    [self.recorder finishrecording]
}

- (void)recorderDidStopWithMaxDuration {
    // 收到录制达到最大时长回调,调用完成录制
    [self.recorder finishrecording]
}

- (void)recorderDidFinishRecording {
    // 收到完成录制回调,视频已经保存到初始化设置的`视频输出沙盒路径`路径下
}