RecordSDK 接口文档
短视频模块SDK, 用于录制视频,视频编辑,添加特效等功能。RecordSDK核心四大模块主要由基础模块,录制模块,视频编辑模块,图片编辑模块四大模块构成。包含了需要用到的工具类,滤镜,视频导出组件等重要基础功能。录制模块主要包含了视频录制相关操作,已经相关特效处理功能。视频编辑与图片编辑模块主要包含了视频(图片)编辑相关操作以及相关特效处理功能。
1. 基本功能
1.1. 初始化SDK (MDRecordManager)
- 设置APPID
+ (void)initSDK:(NSString *)appID;
- 拉取配置文件
+ (void)fetchConfigUsingAppId
- 获取SDK version
+ (NSString *)version;
- 获取Token
+ (NSString *)appToken;
- 配置打点服务 (2.3.0 新增)
// 注册logger
+ (void)configLogger:(id<MDRIRecordLogger>)logger;
- 输出SDK日志
+ (void)enableConsoleLog:(BOOL)enable;
2. 新版录制模块 MDRCameraEngine 替代 MDRecordingAdapter
新版录制模块基本重构之后,对MDRecordingAdapter的接口做了部分调整.
初始化
- (instancetype)initWithDelegate:(id<MDRCameraEngineDelegate> _Nullable)delegate;
- 录制设置
/// 开始录制
/// 1.默认视频编码配置:
/// 视频编码类型,default: MDRVideoEncodeType_H264
/// 视频编码分辨率,default: {720, 1280}
/// 视频码率,单位bit,default: 5 * 1000 * 1000 bit
/// 视频编码裁剪模式,default:MDRVideoEncodeScaleMode_ResizeAspectFill
/// 视频编码帧率,default:和采集帧率保持一致
/// 2.默认音频编码配置:
/// 音频编码类型,default: MDRAudioEncodeType_AAC
/// 音频采样信息,default: {sampleRate: 44100, sampleFormat: MDRAudioSampleFormatType_S16, channelCount: 1}
/// 音频码率,单位bit,default: 256 * 1000 bit
- (BOOL)startRecording;
/// 开始录制
/// @param flag 录制选项
- (BOOL)startRecordingWithFlag:(MDRRecordingFlagOption)flag;
/// 开始录制
/// @param flag 录制选项
/// @param encodeParams 编码参数配置,更多参数配置请参考 MDRCommonDefine.h
/// 例如:
/// NSMutableDictionary *encodeParams = [[NSMutableDictionary alloc] init];
/// encodeParams[MDRVideoEncodeFrameRateKey] = @15; //15FPS
/// encodeParams[MDRVideoEncodeBitRateKey] = @5000000; //5M bps
/// encodeParams[MDRVideoEncodeScaleModeKey] = @(MDRVideoEncodeScaleMode_Fit);
- (BOOL)startRecordingWithFlag:(MDRRecordingFlagOption)flag
andEncodeParams:(NSDictionary * _Nullable)encodeParams;
/// 开始录制
/// @param flag 录制选项
/// @param speedVaryFactor 变速因子 取值范围0.2 - 4.0 默认值为1
/// @param encodeParams 编码参数配置
- (BOOL)startRecordingWithFlag:(MDRRecordingFlagOption)flag
speedVaryFactor:(CGFloat)speedVaryFactor
andEncodeParams:(NSDictionary * _Nullable)encodeParams;
- 视频录制相关属性
/// 拍摄器的预览视图
@property (nonatomic, strong, readonly) UIView<MLPixelBufferDisplay> *previewView;
@property (nonatomic, strong) MDRCapturePreviewConfig *previewConfig;
/// 录制最大时长 (总时长,非单段),单位 秒 default: 60s
@property (nonatomic, assign) NSTimeInterval recordMaxDuration;
/// 单段录制最短时长,单位 秒 default: 1s
@property (nonatomic, assign) NSTimeInterval segmentMinDuration;
/// 是否存在变速片段
@property (nonatomic, assign, readonly) BOOL hasPerSpeedEffect;
/// 取值范围0.2 - 4.0 默认值为1, 只影响即将录制的片段
@property (nonatomic, assign) CGFloat speedVaryFactor;
/// 是否保存原始视频, YES 表明保存原始视频, NO 表示保存美颜后视频。 默认为NO
@property (nonatomic, assign) BOOL saveOrigin;
@property (nonatomic, assign) BOOL shouldRecordAudio;
@property (nonatomic, assign) BOOL shouldReverseVideoSample;
/// 采样帧率,默认30FPS,导出帧率默认和采样帧率一致
@property (nonatomic, assign) NSInteger captureFrameRate;
/// 使用固定帧率进行渲染
@property (nonatomic, assign, getter=isFixedFPS) BOOL fixedFPS;
/// 当前采集设备类型
@property (nonatomic, assign, readonly) MDRCaptureDeviceType currentDeviceType;
/// 当前的设备能力描述
@property (nonatomic, strong, readonly) MDRCaptureDeviceCapability *currentDeviceCapability;
/// 当前放大的倍数
@property (nonatomic, assign, readonly) CGFloat currentVideoZoomFactor;
@property (nonatomic, assign, readonly) MDRCameraEngineState engineState;
/// 录制片段数组
@property (nonatomic, assign, readonly) NSArray<MDRMediaSegmentInfo *> *segmentInfos;
/// 当前录制的总时长
@property (nonatomic, assign, readonly) NSTimeInterval currentRecordingDuration;
/// 变速后实际展示总时长
@property (nonatomic, assign, readonly) NSTimeInterval currentRecordingPresentDuration;
/// 是否正在合成视频
@property (nonatomic, assign, readonly) BOOL stopMerge;
/// 闪光灯
@property (nonatomic, assign) MDRecordCaptureFlashMode flashMode;
/// 闪光灯模式
- (NSArray *)supportFlashModes;
/// 设置背景音乐
@property (nonatomic, strong, nullable) AVAsset *backgroundAudio;
/// 是否准备开始播放配乐
@property (nonatomic, assign, readonly) BOOL isReadyToPlayMusic;
/// 屏幕旋转方向
@property (nonatomic, assign) UIDeviceOrientation outputOrientation;
/// 控制是否屏蔽自动配置audioSession,如果屏蔽会影响声音的采集。
/// fix : 主要是为了修复在录制过程中采集外放音频的音量过小的问题,建议在startCapture前调用
@property (nonatomic, assign) BOOL autoConfigAudioSessionDisable;
- 滤镜相关
/// 设置滤镜
/// @param filter 滤镜对象
- (void)configCurrentFilter:(MDRecordFilter *)filter;
/// 切换滤镜(用于左右/上下滑动滤镜时使用)
/// @param filterA 滤镜a
/// @param filterB 滤镜b
/// @param offset 所占百分比
- (void)configFilterA:(MDRecordFilter *)filterA configFilterB:(MDRecordFilter *)filterB offset:(float)offset;
/// 切换美颜/滤镜贴纸。 待完善:如果decoration里有美颜,和默认的美颜之间的设置逻辑
/// @param decoration FDKDecoration对象
- (void)updateDecoration:(FDKDecoration *)decoration;
/// 移除美颜/滤镜贴纸
- (void)removeDecoration;
- 美颜/美体相关接口
MDRMicroSurgeryType:
RUDDY; // 红润 0.0 - 1.0
SKIN_WHITENING; // 美白 0.0 - 1.0
SKIN_SMOOTH; // 磨皮 0.0 - 1.0
(SHARPEN)SKIN_SHARPEN; // 锐化 0.0 - 1.0
BIG_EYE; // 大眼 0.0 - 1.0
THIN_FACE; // 瘦脸 0.0 - 1.0
NOSE_WIDTH; // 鼻宽 -1.0 - 1.0
FACE_WIDTH; // 脸宽 0.0 - 1.0
JAW_SHAPE; // 削脸 -1.0 - 1.0
CHIN_LENGTH; // 下巴 -1.0 - 1.0;
FOREHEAD; // 额头 -1.0 - 1.0
SHORTEN_FACE; // 短脸 0.0 - 1.0;
NASOLABIALFOLDSAREA; // 祛法令纹 0.0 - 1.0
EYE_TILT; // 眼睛角度 -1.0 - 1.0
EYE_DISTANCE; // 眼距 -1.0 - 1.0
EYESAREA; // 眼袋 0.0 - 1.0
EYE_HEIGHT; // 眼高 0.0 - 1.0
NOSE_SIZE; // 鼻子大小 -1.0 - 1.0
NOSE_LIFT; // 鼻高 -1.0 - 1.0
NOSE_RIDGE_WIDTH; // 鼻梁 -1.0 - 1.0
NOSE_TIP_SIZE; //鼻尖 -1.0 - 1.0
LIP_THICKNESS; //嘴唇厚度 -1.0 - 1.0
MOUTH_SIZE; //嘴唇大小 -1.0 - 1.0
CHEEKBONE_WIDTH; // 颧骨 0.0 - 1.0
JAW2_WIDTH; //下颌骨 0.0 - 1.0
TEETHWHITEN; // 白牙 0.0 - 1.0
EYEBRIGHTEN; // 亮眼 0.0 - 1.0
/* 美体 */
THIN_BODY; // 瘦身 0.0 - 1.0
LONG_LEG; // 长腿 0.0 - 1.0
// 设置美颜-微整形 参见 MDRRenderBeautyKey
- (void)adjustBeauty:(CGFloat)value forKey:(MDRMicroSurgeryType)key;
/* 设置美体 */
/// @param value 取值范围0-1
- (void)setBeautyThinBodyValue:(float)value;
/// 设置长腿值
/// @param value 取值范围0-1
- (void)setBeautyLenghLegValue:(float)value;
/* 历史版本旧接口
/// 设置美白值
/// @param value 取值范围0-1
- (void)setSkinWhitenValue:(float)value;
/// 设置红润值
/// @param value 取值范围0-1
- (void)setSkinRuddyValue:(float)value;
/// 设置磨皮值
/// @param value 取值范围0-1
- (void)setSkinSmoothValue:(float)value;
/// 设置大眼值
/// @param value 取值范围0-1
- (void)setBeautyBigEyeValue:(float)value;
/// 设置瘦脸值
/// @param value 取值范围0-1
- (void)setBeautyThinFaceValue:(float)value;
/// 设置瘦身值
/// @param value 取值范围0-1
- (void)setBeautyThinBodyValue:(float)value;
/// 设置长腿值
/// @param value 取值范围0-1
- (void)setBeautyLenghLegValue:(float)value;
*/
- 美妆新接口(2.5.0 以上版本)
XEngineMakeupKey:
/* 美妆 */
MAKEUP_BLUSH; // 腮红 0 - 1
MAKEUP_FACIAL; // 修容 0 - 1
MAKEUP_EYEBROW; // 眼眉 0 - 1
MAKEUP_EYES; // 眼妆 0 - 1
MAKEUP_LIPS; // 口红 0 - 1
MAKEUP_PUPIL; // 瞳孔 0 - 1
/* 风格妆 */
MAKEUP_LUT; // 风格滤镜 0 - 1
MAKEUP_ALL; // 整妆 0 - 1
/// 添加美妆子项或整装风格妆
/// @params makeupEffect 美妆资源路径
- (void)addMakeupEffect:(NSString *)makeupEffect;
/// 设置美妆强度
/// @params intensity 强度 [0-1]
/// @params makeupType 美妆子项类型
- (void)setMakeupEffectIntensity:(CGFloat)intensity makeupType:(XEngineMakeupKey)makeupType;
/// 按美妆子项移除美妆
/// @params makeupType 美妆子项类型
- (void)removeMakeupEffectWithType:(XEngineMakeupKey)makeupType;
/// 移除所有美妆效果
- (void)removeAllMakeupEffect;
/// 美妆效果是否生效
- (BOOL)isMakeupEffectActive;
- 显示原图
// 设置渲染模块状态 NO : 显示原图
- (void)setRenderStatus:(BOOL)status;
- 引擎相关:
/// 启动3D引擎
/// @param path
- (void)runXESEngineWithDecorationRootPath:(NSString *)path;
******************给引擎传递事件******************************
- (BOOL)hitTestTouch:(CGPoint)point withView:(UIView *)view;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
- 算法数据相关
/// 是否开启光膀子检测
/// @param enable rue 开启 false 不开启
- (void)activateBarenessDetectorEnable:(BOOL)enable;
/// 视频帧,脸部,身体数据回调
@property (nonatomic, copy) void(^ _Nullable faceFeatureHandler)(CVPixelBufferRef _Nonnull pixelbuffer, NSArray<MMFaceFeature *> * _Nullable faceFeatures, NSArray<MMBodyFeature *> * _Nullable bodyFeatures)
DEPRECATED_MSG_ATTRIBUTE("use didOutputFaceFeatureInfo");
/// 人脸关键信息回调
/// @param cameraEngineC引擎对象
/// @param faceFeatureInfo 人脸特征信息
- (void)cameraEngine:(MDRCameraEngine *)cameraEngine didOutputFaceFeatureInfo:(MDRFaceFeatureInfo *)faceFeatureInfo;
/**
是否使用AI美颜功能
x.x.x版本以后可用 2.2.9版本建议使用useAIBigEyeThinFace
useAISkinWhiten useAISkinSmooth 代替
*/
/// 是否使用AI美颜功能 待完善: 建议iOS 10以上开启,还是只能iOS10以上开启?
/// 2.2.9版本建议使用useAIBigEyeThinFace useAISkinWhiten useAISkinSmooth 代替
@property (nonatomic, assign) BOOL canUseAIBeautySetting;
/// 是否启用瘦身长腿功能
@property (nonatomic, assign) BOOL canUseBodyThinSetting;
/// 是否检测到人脸
@property (nonatomic, readonly) BOOL isFaceCaptured;
3. 录制模块 MDRecordingAdapter(即将废弃, 由MDRCameraEngine替代)
3.1. 基本设置
- 设置生成视屏编码格式, 参数参考
AVVideoCodecType
, 需要在setupRecorder
之前调用
- (void)setVideoCodecKey:(AVVideoCodecType)codeckey;
- 设置生成视频码率, 单位为M. 默认值为
5.0 * 1024 * 1024
, 需要在setupRecorder
之前调用
- (void)setVideoBitRate:(float)bitrate;
- 设置生成视频帧率, 默认为30帧. 需要在
setupRecorder
之前调用
- (void)setVideoFrameRate:(NSInteger)frameRate;
- 设置生成视频分辨率, 当分辨率与视频大小不一致时候,以等比填充方式导出。需要在
setupRecorder
之前调用
- (void)setVideoResolution:(CGSize)resolution;
- 设置生成视频填充模式(等比适应/等比填充/拉伸),参数参考
AVVideoScalingModeKey
, 需要在setupRecorder
之前调用
- (void)setVideoScaleMode:(NSString *)scaleMode;
- 设置摄像头采样分辨率, 参考
AVCaptureSessionPreset
, 默认为AVCaptureSessionPreset1280x720
, 需要在setupRecorder
之前调用
- (void)setCameraPreset:(AVCaptureSessionPreset)preset;
- 设置摄像头初始位置, 默认为
AVCaptureDevicePositionFront
. 需要在setupRecorder
之前调用
- (void)setCameraPosition:(AVCaptureDevicePosition)position;
- 设置摄像头采样帧率 (iPhone 6 默认为15, iphone 6s及以上默认为30). 需要在
setupRecorder
之前调用 (2.2.3 新增)
- (void)setCameraFrameRate:(NSInteger)frameRate;
- 初始化相机, 注意: 除上述函数,其余函数均需在setupRecorder之后调用
- (void)setupRecorder;
- 获取显示视图
@property (nonatomic, strong, readonly) UIView<MLPixelBufferDisplay> *previewView;
- 设置最大录制时长
- (void)setMaxRecordDuration:(NSTimeInverval)duration;
- 设置最小录制时长
- (void)setMinRecordDuration:(NSTimeInterval)duration;
- 获取录制最大时长
- (NSTimeInterval)recordDuration;
- 麦克风初始是否启用/禁用. (需要在
setupRecorder
之前调用)
@property (nonatomic, assign) BOOL shouldRecordAudio; (2.2.2 新增)
- (void)disableAudioRecording; (删除)
- 麦克风启用/禁用 (2.2.2 新增)
// enable: YES 启用, NO 禁用
- (void)enableAudioRecording:(BOOL)enable;
- 获取水平镜像输出流, YES 输出水平镜像数据流,NO返回非水平镜像数据流 (2.2.10新增)
- (void)enableReverseVideoSampleBuffer:(BOOL)enable;
3.2. 新增美妆接口(旧美妆接口废弃不可用)
- 添加美妆素材
/// 美妆、风格妆
/// 添加美妆子项或整装风格妆
/// @params makeupEffect 美妆资源路径
- (void)addMakeupEffect:(NSString *)makeupEffect;
- 移除单个美妆素材
/// 按美妆子项移除美妆
/// @params makeupType 美妆子项类型
- (void)removeMakeupEffectWithType:(XEngineMakeupKey)makeupType;
- 移除全部美妆素材
/// 移除所有美妆效果
- (void)removeAllMakeupEffect;
3.3. 录制操作
- 调整焦距 factor 在 1 - 6 之取值,最大支持6倍放大
- (void)setVideoZoomFactor:(CGFloat)factor;
- (CGFloat)videoZoomFactor;
- 设置闪光灯模式
// 是否支持闪光灯
- (BOOL)hasFlash;
// 闪光灯模式
- (NSArray *)supportFlashModes;
// 设置闪光灯模式
@property (nonatomic, assign) MDRecordCaptureFlashMode flashMode;
- 设置曝光补偿 (范围 -3.0 - 3.0) (2.3.2新增)
- (void)updateExposureTargetBias:(float)bias;
- 是否存在相机输入源
- (BOOL)hasVideoInput;
- 切换摄像头
- (void)switchCameraPosition;
- 获取当前摄像头位置
@property (nonatomic, assign, readonly) AVCaptureDevicePosition cameraPosition;
- 摄像头聚焦, 输入实际点击Camera显示View的坐标值
- (void)focusCameraInPoint:(CGPoint)pointInCamera;
- 开启预览
- (void)startCapturing;
- 暂停预览
- (void)pauseCapturing;
- 结束预览
- (void)stopCapturing;
- 拍照
- (void)takePhoto;
- 拍照回调
// 即将开始拍照
@property (nonatomic, copy) void (^captureStillImageWillHandler)(void);
// 拍照结果回调
@property (nonatomic, copy) void (^captureStillImageHandler)(UIImage *image);
- 设置设备方向
@property (nonatomic, assign) UIDeviceOrientation outputOrientation;
- 是否保存原始视频, YES 表明保存原始视频, NO 表示保存美颜后视频。 默认为NO
@property (nonatomic, assign) BOOL saveOrigin;
- 是否可以录制
- (BOOL)canStartRecording;
- 开始录制
- (void)startRecording;
- 完成一段录制
- (void)pauseRecording;
- 取消当前段录制
- (void)cancelRecording;
- 结束录制
- (void)stopVideoCaptureWithOutputURL:(NSURL *)URL
completionHandler:(void (^)(NSURL *videoFileURL, NSError *error))completionHandler;
- 获得分段数量
- (NSInteger)savedSegmentCount;
- 删除最后一个分段
- (void)deleteLastSavedSegment;
- 重置录制操作(移除所有已录制的视频片段以及录制状态)
- (void)resetRecorder;
- 清除暂存文件
- (void)cleanStashFile;
- 是否正在录制
@property (nonatomic, readonly) BOOL isRecording;
- 获取当前录制时长
@ property (nonatomic, readonly) NSTimeInterval currentRecordingDuration;
- 获取变速后实际展示时长
@property (nonatomic, readonly) NSTimeInterval currentRecordingPresentDuration;
- 是否正在合成视频
@property (nonatomic, assign, readonly) BOOL stopMerge;
- 录制进度回调
@property (nonatomic, copy) void (^recordProgressChangedHandler)(double progress);
- 到达最大录制时长回调
@property (nonatomic, copy) void (^recordDurationReachedHandler)(void);
- 导出视频进度回调
@property (nonatomic, copy) void (^completeProgressUpdateHandler)(double progress);
- 录制片段增加/删除
@property (nonatomic,copy) void (^recordSegmentsChangedHandler)(NSArray *durations, NSArray *presentDurations, BOOL valid , MDRecordSegmentStatus segmentStatus)
- 设置滤镜切换动画方向(横向或者纵向), 需要在
setupRecorder
之前调用
- (void)configSlidingFilterMode:(MDRGPUImageSlidingFilterMode)mode;
- 切换滤镜(有动画)
- (void)configFilterA:(MDRecordFilter *)filterA configFilterB:(MDRecordFilter *)filterB offset:(float)offset;
- 切换滤镜(无动画)
- (void)configCurrentFilter:(MDRecordFilter *)filter;
- 滤镜链插槽,canUseAIBeautySetting 为 false 有效。每次配置decoration后调用一次,不可重复调用
- (void)configDecorationFilterAttachment:(MDGPUImageMediaFiltersAttachment *)filtersAttachment;
- 增加美颜滤镜/贴纸
- (void)updateDecoration:(FDKDecoration *)decoration;
- 移除美颜/贴纸
- (void)removeDecoration;
- 调整贴纸自带音效音量, 范围 0.0 - 1.0
- (void)adjustStikcerVolume:(float)volume;
- 光膀子检测
// 是否开启光膀子检测
- (void)activateBarenessDetectorEnable:(BOOL)enable;
// 是否存在光膀子
- (BOOL)hasDetectorBareness;
// 发现光膀子时候的回调
- (void)setDetectBareness:(void (^)(void))detectBareness;
- 是否使用AI美颜功能 (iOS 10以上开启)
@property (nonatomic, assign) BOOL canUseAIBeautySetting;
- 是否启用AI美颜的大眼瘦脸(默认关闭)(2.2.9新增)
@property (nonatomic, assign) BOOL useAIBigEyeThinFace;
- 是否启用AI美颜的美白(默认关闭)(2.2.9新增)
@property (nonatomic, assign) BOOL useAISkinWhiten;
- 是否启用AI美颜的磨皮(默认关闭)(2.2.9新增)
@property (nonatomic, assign) BOOL useAISkinSmooth;
- 是否启用瘦身长腿功能
@property (nonatomic, assign) BOOL canUseBodyThinSetting;
- 是否检测到人脸
@property (nonatomic, readonly) BOOL isFaceCaptured;
- 重置检测器状态
- (void)resetState;
- 清除贴纸缓存
- (void)clean;
- 向滤镜链中添加自定义滤镜
- (void)addCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
- (void)removeCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
- 配乐
// 音乐资源
@property (nonatomic, strong, nullable) AVAsset *backgroundAudio;
美颜/美体(已废弃,使用新接口替代)// 美颜设置 - (void)setBeautyConfiguration:(CXBeautyConfiguration *)config; // 美白 - (void)setSkinWhitenValue:(float)value; // 磨皮 - (void)setSkinSmoothValue:(float)value; // 大眼 - (void)setBeautyBigEyeValue:(float)value; // 瘦脸 - (void)setBeautyThinFaceValue:(float)value; // 瘦身 - (void)setBeautyThinBodyValue:(float)value; // 长腿 - (void)setBeautyLenghLegValue:(float)value;
启用3D引擎
- (void)runXESEngineWithDecorationRootPath:(NSString *)path;
- 变速
// 设置变速因子 (0.2 - 4.0)
- (void)setNextRecordSegmentSpeedVaryFactor:(CGFloat)factor;
// 获取当前变速因子
- (CGFloat)nextRecordSegmentSpeedVaryFactor;
// 当前段是否允许变速
- (void)speedVaryShouldAllow:(BOOL)isAllow;
// 当前段是否存在变速效果
- (BOOL)hasPerSpeedEffect;
美妆(已废弃,使用新接口替代)
/**
启用美妆功能
@param enable YES启用,NO禁用
*/
- (void)enableMakeup:(BOOL)enable;
/**
增加美妆效果
@param resouceURL 资源文件路径
@return 该效果identifier
*/
- (NSString *)addMakeUpEffectWithResourceURL:(NSURL *)resouceURL;
/**
根据identifier移除美妆效果
@param identifiter 要移除的美妆效果的identifier
*/
- (void)removeMakeUpEffectWithIdentifier:(NSString *)identifiter;
/**
移除所有的美妆效果
*/
- (void)removeAllMakeUpEffect;
/**
调整美妆效果程度
@param intensity 程度(0-1)
@param identifier 美妆效果
*/
- (void)setIntensity:(CGFloat)intensity forIdentifiler:(NSString *)identifier;
/**
是否启用背景模糊
@param enable YES启用,NO禁用
*/
- (void)enableBackgroundBlur:(BOOL)enable;
/**
设置背景模糊效果
@param mode 背景模糊样式
*/
- (void)setBackgroundBlurMode:(CXBackgroundBlurMode)mode;
// 背景模糊程度(0-1)
- (void)setBackgroundBlurIntensity:(CGFloat)intensity;
添加/移除礼物 ((2.2.0)新增)(2.5.0 废弃)实时获取视频流 (2.2.2 新增)
@property (nonatomic, copy, nullable) void(^cameraDidOutputVideoSampleBuffer)(CMSampleBufferRef sampleBuffer);
- 实时获取音频流 (2.2.0 新增)
@property (nonatomic, copy, nullable) void(^cameraDidOutputAudioSampleBuffer)(CMSampleBufferRef sampleBuffer);
4. 视频编辑模块 MDVideoEditorAdapter
4.1. 视频编辑模块基本设置
- 自动合成
// 默认为NO,当置为YES时候,调用 `loadVideo` 方法会自动调用 `compositeVideoWithError:`方法合成视频
@property (nonatomic, assign) BOOL autoComposite;
- 加载视频, 如果
autoComposite
为NO
, 则需要调用compositeVideoWithError:
之后生效; 若autoComposite
为YES
则自动生效
- (void)loadVideo:(AVAsset *)asset;
- 视频裁剪, 需要调用
compositeVideoWithError:
之后生效
- (void)setVideoTimeRange:(CMTimeRange)timeRange;
- 设置变速效果, 需要调用
compositeVideoWithError:
之后生效
- (void)setTimeRangeMappingEffects:(NSArray<id<MLTimeRangeMappingEffect>> *)timeRangeMappingEffects;
- 这是重复片段, 需要调用
compositeVideoWithError:
之后生效
- (void)setMediaSourceRepeatRange:(CMTimeRange)timeRange;
- 设置配乐, 需要调用
compositeVideoWithError:
之后生效
@property (nonatomic, strong, nullable) NSURL *backgroundAudioURL;
- 裁剪配乐, 需要调用
compositeVideoWithError:
之后生效
@property (nonatomic, assign) CMTimeRange backgroundAudioRange;
- 设置变换矩阵, 默认为视频轨道的
preferredTransform
. 需要调用compositeVideoWithError
后生效
- (void)setVideoPerferredTransform:(CGAffineTransform)videoPerferredTransform;
- 设置原音量 范围 0.0 - 1.0, 有配乐时,默认0.5; 无配乐时默认 1.0. 需要调用
compositeVideoWithError:
生效量
- (void)setSourceVolume:(float)volume;
- 设置配乐音量 范围 0.0 - 1.0, 默认0.5. 需要调用
compositeVideoWithError:
生效
- (void)setBackgroundMusicVolume:(float)volume;
- 设置视频显示效果
- (void)setVideoGravity:(AVLayerVideoGravity)videoGravity;
- 合成视频
- (BOOL)compositeVideoWithError:(NSError **)error;
- 更新音频音量
- (void)updateAudioMix;
4.2. 播放控制
- 开始播放
- (void)play;
- 停止播放
- (void)stop;
- 暂停播放
- (void)pause;
- 重新开始播放
- (void)replay;
- 获得视频展示页面
@property (nonatomic, readonly) UIViewController *playerViewController;
- 获取播放器
@property (nonatomic, readonly) AVPlayer *player;
- 是否正在播放
@property (nonatomic, readonly) BOOL isPlaying;
- seek到某一时间点
- (void)seekTime:(float)time;
- 获取总时长
- (NSTimeInverval)duration;
- 获得当前播放时间
- (NSTimeInterval)getCurrentPlayTime;
- 设置播放器刷新频率(默认30帧每秒)
- (void)setPlayerPerferredFPS:(int)fps;
- 获得视频渲染frame
@property (nonatomic, readonly) CGRect videoRenderFrame;
- 获得当前合成的视频
@property (nonatomic, readonly) AVComposition *composition;
- 等待视频渲染队列中所有任务完成
- (void)waitUntilAllOperationsAreFinished;
- 播放结束
@property (nonatomic, copy) void(^ _Nullable playToEndTime)(AVPlayer *player);
- 播放进度
@property (nonatomic, copy) void(^ _Nullable playerPeriodicTimeCallback)(CMTime time);
- 切换滤镜(无动画)
- (void)configCurrentFilter:(MDRecordFilter *)filter;
- 切换滤镜(无动画)
- (void)configFilterA:(MDRecordFilter *)filterA configFilterB:(MDRecordFilter *)filterB offset:(float)offset;
- 翻转特效滤镜
- (void)setReverse:(BOOL)reverse;
- 添加特效滤镜
- (void)addSpecialFilter:(id<MDRTimeFilter>)newTarget timeRange:(CMTimeRange)range;
/* 废弃接口 */
// - (void)addSpecialFilter:(GPUImageOutput<GPUImageInput, MDSpecialFilterLifeStyleProtocol> *)newTarget timeRange:(CMTimeRange)range;
- 移除最后一个特效滤镜
- (void)deleteLastSpecialFilter;
- 移除所有特效滤镜
- (void)deleteAllSpecialFilters;
- 更新某时刻特效滤镜起作用是时段
- (void)updateCurrentFilterWithTime:(CMTime)time timeRange:(CMTimeRange)timeRange;
- 获得当前所有添加的特效滤镜
- (NSArray<id<MDRTimeFilter>>*)specialFilters;
/* 废弃接口 */
- (NSArray<GPUImageOutput<GPUImageInput, MDSpecialFilterLifeStyleProtocol> *> *)specialFilters;
- 是否有添加特效滤镜
- (BOOL)hasSpecialFilter;
- 添加动态贴纸
- (void)addDynamicSticker:(MDRecordDynamicSticker *)dynamicSticker;
- 删除动态贴纸
- (void)removeDynamicSticker:(MDRecordDynamicSticker *)dynamicSticker;
- 增加美颜滤镜(2.5.0 以上直接使用美颜新接口)
- (void)updateDecoration:(FDKDecoration *)decoration;
- 移除美颜(2.5.0 以上直接使用美颜新接口)
- (void)removeDecoration;
- 基础美颜 微整形 美体
MDRMicroSurgeryType:
/* 基础美颜 */
RUDDY; // 红润 0.0 - 1.0
SKIN_WHITENING; // 美白 0.0 - 1.0
SKIN_SMOOTH; // 磨皮 0.0 - 1.0
(SHARPEN)SKIN_SHARPEN; // 锐化 0.0 - 1.0
BIG_EYE; // 大眼 0.0 - 1.0
THIN_FACE; // 瘦脸 0.0 - 1.0
/* 微整形 */
NOSE_WIDTH; // 鼻宽 -1.0 - 1.0
FACE_WIDTH; // 脸宽 0.0 - 1.0
JAW_SHAPE; // 削脸 -1.0 - 1.0
CHIN_LENGTH; // 下巴 -1.0 - 1.0;
FOREHEAD; // 额头 -1.0 - 1.0
SHORTEN_FACE; // 短脸 0.0 - 1.0;
NASOLABIALFOLDSAREA; // 祛法令纹 0.0 - 1.0
EYE_TILT; // 眼睛角度 -1.0 - 1.0
EYE_DISTANCE; // 眼距 -1.0 - 1.0
EYESAREA; // 眼袋 0.0 - 1.0
EYE_HEIGHT; // 眼高 0.0 - 1.0
NOSE_SIZE; // 鼻子大小 -1.0 - 1.0
NOSE_LIFT; // 鼻高 -1.0 - 1.0
NOSE_RIDGE_WIDTH; // 鼻梁 -1.0 - 1.0
NOSE_TIP_SIZE; //鼻尖 -1.0 - 1.0
LIP_THICKNESS; //嘴唇厚度 -1.0 - 1.0
MOUTH_SIZE; //嘴唇大小 -1.0 - 1.0
CHEEKBONE_WIDTH; // 颧骨 0.0 - 1.0
JAW2_WIDTH; //下颌骨 0.0 - 1.0
TEETHWHITEN; // 白牙 0.0 - 1.0
EYEBRIGHTEN; // 亮眼 0.0 - 1.0
/* 美体 */
THIN_BODY; // 瘦身 0.0 - 1.0
LONG_LEG; // 长腿 0.0 - 1.0
// 设置美颜-微整形 参见 MDRRenderBeautyKey
- (void)adjustBeauty:(CGFloat)value forKey:(MDRMicroSurgeryType)key;
/* 历史版本旧接口
// 美白
- (void)setSkinWhitenValue:(float)value;
// 磨皮
- (void)setSkinSmoothValue:(float)value;
// 大眼
- (void)setBeautyBigEyeValue:(float)value;
// 瘦脸
- (void)setBeautyThinFaceValue:(float)value;
// 瘦身值
- (void)setBeautyThinBodyValue:(float)value;
//长腿值
- (void)setBeautyLenghLegValue:(float)value;
*/
- 美妆新接口(2.5.0 以上版本)
XEngineMakeupKey:
/* 美妆 */
MAKEUP_BLUSH; // 腮红 0 - 1
MAKEUP_FACIAL; // 修容 0 - 1
MAKEUP_EYEBROW; // 眼眉 0 - 1
MAKEUP_EYES; // 眼妆 0 - 1
MAKEUP_LIPS; // 口红 0 - 1
MAKEUP_PUPIL; // 瞳孔 0 - 1
/* 风格妆 */
MAKEUP_LUT; // 风格滤镜 0 - 1
MAKEUP_ALL; // 整妆 0 - 1
/// 添加美妆子项或整装风格妆
/// @params makeupEffect 美妆资源路径
- (void)addMakeupEffect:(NSString *)makeupEffect;
/// 设置美妆强度
/// @params intensity 强度 [0-1]
/// @params makeupType 美妆子项类型
- (void)setMakeupEffectIntensity:(CGFloat)intensity makeupType:(XEngineMakeupKey)makeupType;
/// 按美妆子项移除美妆
/// @params makeupType 美妆子项类型
- (void)removeMakeupEffectWithType:(XEngineMakeupKey)makeupType;
/// 移除所有美妆效果
- (void)removeAllMakeupEffect;
/// 美妆效果是否生效
- (BOOL)isMakeupEffectActive;
- 获取当前涂鸦图片
@property (nonatomic, readonly) UIImage *mosaicCanvasImage;
- 设置涂鸦或者马赛克
- (void)setGraffitiCanvasImage:(UIImage * _Nullable)graffitiCanvasImage mosaicCanvasImage:(UIImage * _Nullable)mosaicCanvasImage;
添加自定义滤镜(废弃)
- (void)addCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
- (void)removeCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
4.3. 视频导出
- 图片融合
@property (nonatomic, strong) UIImage * _Nullable overlayImage;
- 设置导出码率
@property (nonatomic, assign) float targetBitRate;
- 设置导出分辨率
@property (nonatomic, assign) CGSize presentationSize;
- 设置导出帧率
@property (nonatomic, assign) NSInteger targetFrameRate;
- 设置视频Perferred Transform 矩阵. (已在2.2.4版本后弃用, 请参考
setVideoPerferredTransform:
方法)
@property (nonatomic, assign) CGAffineTransform videoPerferredTransform;
- 设置是否使用滤镜效果
- (void)enableFilterEffect:(BOOL)enable;
- 开始导出
- (id<MDCancellable>)exportToURL:(NSURL *)url
progressHandler:(void(^ _Nullable)(double progress))progressHandler
completion:(void(^ _Nullable)(NSURL *url))completion
failure:(void(^ _Nullable)(NSError * _Nullable error))failure;
美妆(旧版接口已废弃)
/**
启用美妆功能
@param enable YES启用,NO禁用
*/
- (void)enableMakeup:(BOOL)enable;
/**
增加美妆效果
@param resouceURL 资源文件路径
@return 该效果identifier
*/
- (NSString *)addMakeUpEffectWithResourceURL:(NSURL *)resouceURL;
/**
根据identifier移除美妆效果
@param identifiter 要移除的美妆效果的identifier
*/
- (void)removeMakeUpEffectWithIdentifier:(NSString *)identifiter;
/**
移除所有的美妆效果
*/
- (void)removeAllMakeUpEffect;
/**
调整美妆效果程度
@param intensity 程度(0-1)
@param identifier 美妆效果
*/
- (void)setIntensity:(CGFloat)intensity forIdentifiler:(NSString *)identifier;
@end
@interface MDVideoEditorAdapter (MDRBackgroundBlur)
/**
是否启用背景模糊
@param enable YES启用,NO禁用
*/
- (void)enableBackgroundBlur:(BOOL)enable;
/**
设置背景模糊效果
@param mode 背景模糊样式
*/
- (void)setBackgroundBlurMode:(CXBackgroundBlurMode)mode;
// 背景模糊程度(0-1)
- (void)setBackgroundBlurIntensity:(CGFloat)intensity;
5. 图片编辑模块 (MDImageEditorAdapter)
5.1. 图片编辑模块基本设置
- 加载图片
- (void)loadImage:(UIImage *)image completionHander:(void(^)(CVPixelBufferRef _Nullable, NSError * _Nullable))completion;
- 更新加载图片
- (void)reloadImage:(UIImage *)image;
- 处理图片
- (void)startProcess;
- 停止处理并释放资源
- (void)stopProcess;
- 切换滤镜(无动画)
- (void)configCurrentFilter:(MDRecordFilter *)filter;
- 切换滤镜(无动画)
- (void)configFilterA:(MDRecordFilter *)filterA configFilterB:(MDRecordFilter *)filterB offset:(float)offset;
增加美颜滤镜(2.5.0 以上直接使用美颜新接口)
- (void)updateDecoration:(FDKDecoration *)decoration;
移除美颜(2.5.0 以上直接使用美颜新接口)
- (void)removeDecoration;
- 基础美颜 微整形 美体
MDRMicroSurgeryType:
/* 基础美颜 */
RUDDY; // 红润 0.0 - 1.0
SKIN_WHITENING; // 美白 0.0 - 1.0
SKIN_SMOOTH; // 磨皮 0.0 - 1.0
(SHARPEN)SKIN_SHARPEN; // 锐化 0.0 - 1.0
BIG_EYE; // 大眼 0.0 - 1.0
THIN_FACE; // 瘦脸 0.0 - 1.0
/* 微整形 */
NOSE_WIDTH; // 鼻宽 -1.0 - 1.0
FACE_WIDTH; // 脸宽 0.0 - 1.0
JAW_SHAPE; // 削脸 -1.0 - 1.0
CHIN_LENGTH; // 下巴 -1.0 - 1.0;
FOREHEAD; // 额头 -1.0 - 1.0
SHORTEN_FACE; // 短脸 0.0 - 1.0;
NASOLABIALFOLDSAREA; // 祛法令纹 0.0 - 1.0
EYE_TILT; // 眼睛角度 -1.0 - 1.0
EYE_DISTANCE; // 眼距 -1.0 - 1.0
EYESAREA; // 眼袋 0.0 - 1.0
EYE_HEIGHT; // 眼高 0.0 - 1.0
NOSE_SIZE; // 鼻子大小 -1.0 - 1.0
NOSE_LIFT; // 鼻高 -1.0 - 1.0
NOSE_RIDGE_WIDTH; // 鼻梁 -1.0 - 1.0
NOSE_TIP_SIZE; //鼻尖 -1.0 - 1.0
LIP_THICKNESS; //嘴唇厚度 -1.0 - 1.0
MOUTH_SIZE; //嘴唇大小 -1.0 - 1.0
CHEEKBONE_WIDTH; // 颧骨 0.0 - 1.0
JAW2_WIDTH; //下颌骨 0.0 - 1.0
TEETHWHITEN; // 白牙 0.0 - 1.0
EYEBRIGHTEN; // 亮眼 0.0 - 1.0
/* 美体 */
THIN_BODY; // 瘦身 0.0 - 1.0
LONG_LEG; // 长腿 0.0 - 1.0
// 设置美颜-微整形 参见 MDRRenderBeautyKey
- (void)adjustBeauty:(CGFloat)value forKey:(MDRMicroSurgeryType)key;
/* 历史版本旧接口
// 美白
- (void)setSkinWhitenValue:(float)value;
// 磨皮
- (void)setSkinSmoothValue:(float)value;
// 大眼
- (void)setBeautyBigEyeValue:(float)value;
// 瘦脸
- (void)setBeautyThinFaceValue:(float)value;
// 瘦身
- (void)setBeautyThinBodyValue:(float)value;
// 长腿
- (void)setBeautyLenghLegValue:(float)value;
*/
- 美妆新接口(2.5.0 以上版本)
XEngineMakeupKey:
/* 美妆 */
MAKEUP_BLUSH; // 腮红 0 - 1
MAKEUP_FACIAL; // 修容 0 - 1
MAKEUP_EYEBROW; // 眼眉 0 - 1
MAKEUP_EYES; // 眼妆 0 - 1
MAKEUP_LIPS; // 口红 0 - 1
MAKEUP_PUPIL; // 瞳孔 0 - 1
/* 风格妆 */
MAKEUP_LUT; // 风格滤镜 0 - 1
MAKEUP_ALL; // 整妆 0 - 1
/// 添加美妆子项或整装风格妆
/// @params makeupEffect 美妆资源路径
- (void)addMakeupEffect:(NSString *)makeupEffect;
/// 设置美妆强度
/// @params intensity 强度 [0-1]
/// @params makeupType 美妆子项类型
- (void)setMakeupEffectIntensity:(CGFloat)intensity makeupType:(XEngineMakeupKey)makeupType;
/// 按美妆子项移除美妆
/// @params makeupType 美妆子项类型
- (void)removeMakeupEffectWithType:(XEngineMakeupKey)makeupType;
/// 移除所有美妆效果
- (void)removeAllMakeupEffect;
/// 美妆效果是否生效
- (BOOL)isMakeupEffectActive;
添加自定义滤镜(废弃)
- (void)addCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
- (void)removeCustomFilter:(GPUImageOutput<GPUImageInput> *)filter;
6. 影集模块(2.5.0废弃)
6.1. 影集导出 MDGPUImageAlbumMovieExport
- 初始化
- (instancetype)initWithItems:(NSArray<MDPictureInputItem *> *)items
sizeInPixels:(CGSize)sizeInPixels
audioAsset:(AVAsset * _Nullable)asset
audioMix:(AVAudioMix * _Nullable)audioMix
- 设置动画效果
@property (nonatomic, strong) MDAlbumPlayerAnimationKey animationType;
- 设置导出路径
@property (nonatomic, copy) NSURL *exportURL
- 设置导出分辨率
@property (nonatomic, readonly) CGSize preferedSize;
- 获取进度值
@property(readonly, nonatomic) float progress;
- 设置代理
@property (readwrite, nonatomic, assign, nullable) id <MDGPUImageAlbumMovieExportDelegate>delegate;
- 导出视频
- (void)exportVideo;
- 取消导出
- (void)cancel;