SDK接入文档

1. 工程配置

1.1. 系统版本

支持iOS 9.0 及以上版本

1.2. 开发环境

建议您使用macOS High Sierra 10.13 Xcode9.0及以上版本的开发环境。

1.3. 项目配置

打开工程info.Plist,添加以下权限:

  • Privacy - Media Library Usage Description
  • Privacy - Camera Usage Description
  • Privacy - Microphone Usage Description
  • Privacy - Photo Library Additions Usage Description
  • Privacy - Photo Library Usage Description

配置Build Setting — Build Options — Enable Bitcode, 设置为NO。

2. 基本信息

2.1. 获取SDK版本

短视频SDK提供了MDRecordManager来获取SDK版本的信息。

  • 获取版本号
+ (NSString *)version;

2.2. 视频分辨率

视频分辨率指的是视频横向和纵向上的有效像素,理论上视频分辨率越高,图像越清晰。但分辨率越高也意味着文件越大,处理越耗时。移动端考虑到不同设备性能差异,建议设置分辨率720p及以下。

注意, 不要直接使用屏幕像素值作为视频分辨率。

2.3. 编码方式

目前SDK只支持硬编码。

2.4. 支持格式

类型 格式
视频 MP4, MOV, FLV
音频 MP3, AAC, PCM
图片 JPG, PNG

3. SDK初始配置

  • 首先通过MDRecordManger类调用
+ (void)initSDK:(NSString *)appID;

方法传入appID完成SDK初始化。然后通过

+ (void)fetchConfigUsingAppId;

拉取配置文件。可通过

+ (void) addCommandListener: (SEL) mSelctor target:(id) mTarget;

方法注册回调函数,其中 mSelctor 需携带一个CallbackMessage类型的参数。 当 CallbackMessagecommand 属性值为 COMMAND_REGISTER时, message属性携带的便是Token.

之后可通过 MDRecordManger

+ (NSString *)appToken;

方法获取Token. 该Token用于初始化相关功能类句柄。

  • 调用MDRecordDetectorManger
- (void)config;

初始化模型加载器, 用于模型下载以及创建。

4. 视频录制

4.1. 功能介绍

短视频SDK提供基础视频录制功能,支持添加配乐,变速录制,人脸贴纸,特效滤镜等。核心类是 MDRCameraEngine(2.5.0 以上版本支持), 历史版本接口类 MDRecordingAdapter 即将废弃.

4.2. 录制流程

4.2.1. 初始化设置

  • 初始化
    _cameraEngine = [[MDRCameraEngine alloc] initWithDelegate:self];
    /* 对应历史版本旧接口
    _adapter = [[MDRecordingAdapter alloc] initWithToken:@"Token"]; */
  • 设置相机参数并初始化相机
    // @param encodeParams 编码参数配置,更多参数配置请参考 MDRCommonDefine.h
    NSMutableDictionary *encodeParams = [[NSMutableDictionary alloc] init];
    encodeParams[MDRVideoEncodeFrameRateKey] = @30;       // 30FPS
    encodeParams[MDRVideoEncodeBitRateKey] = @5000000;    // 5M bps
    encodeParams[MDRVideoEncodeScaleModeKey] = @(MDRVideoEncodeScaleMode_Fit); // 编码适配模式

    // 设置参数并开始录制
    [self.cameraEngine startRecordingWithFlag:flag andEncodeParams:encodeParams];


    /* 对应历史版本旧接口
    [adapter setVideoCodecKey:AVVideoCodecH264];  // 设置编码格式
    [adapter setVideoBitRate:5.0 * 1024 * 1024];  // 设置码率
    [adapter setVideoResolution:CGSizeMake(720, 1280)]; // 设置视频分辨率
    [adapter setVideoScaleMode:AVVideoScalingModeResizeAspectFill]; // 设置视频缩放模式
    [adapter setCameraPreset:AVCaptureSessionPreset1280x720]; // 设置采样分辨率
    [adapter setCameraPosition:AVCaptureDevicePositionFront]; // 设置摄像头位置
    [adapter setupRecorder];  // 初始化摄像机    */
  • 相机设备特性配置: 在设置相机特性前建议先参考MDRCaptureDeviceCapability,在开启预览之后配置相机特性才会生效,SDK内部不会记录开始预览前业务的设置.
    //设置对焦
    [self.cameraEngine focusCameraInPoint:pointInCamera];
    // 设置曝光 
    [self.cameraEngine focusCameraInPoint:pointInCamera];
    // 更新曝光补偿 
    [self.cameraEngine updateExposureTargetBias:bias];
    // 设置闪光灯
    self.cameraEngine.flashMode = MDCaptureFlashModeOn;
    // 设置变焦倍数
    [self.cameraEngine setVideoZoomFactor:factor];
  • 获得预览视图, 并添加到view层级中
    UIView<MLPixelBufferDisplay> *previewView = self.cameraEngine.previewView;
    previewView.frame = containerView.bounds;
    [containerView addSubview:previewView];

    /* 对应历史版本旧接口
    UIView<MLPixelBufferDisplay> *previewView = self.adapter.previewView;
    previewView.frame = containerView.frame;
    [containerView addSubview:previewView]; */
  • 开启相机
    // 开启相机
    [self.cameraEngine startCapturing];
    // 关闭相机
    [self.cameraEngine stopCapturing];

    /* 对应历史版本旧接口
    // 开启相机
    [self.adapter startCapturing];
    // 关闭相机
    [self.adapter stopCapturing];    */
  • 拍照
    [self.cameraEngine takePhotoWithCompletionHandler:^(UIImage * _Nonnull image, NSDictionary * _Nonnull metaInfo, NSError * _Nonnull error) {
        // Coding
    }];

    /* 对应历史版本旧接口
    // 设置即将拍照回调
    self.adapter.captureStillImageWillHandler = self.captureStillImageWillHandler;
    // 设置拍照完成的回调
    self.adapter.captureStillImageHandler = self.captureStillImageHandler;
    // 拍照
    [self.adapter takePhoto];    */
  • 切换摄像头
    [self.cameraEngine switchCameraPosition];
    /* 对应历史版本旧接口
    [self.adapter switchCameraPosition]; */
  • 设置最大录制时长
    self.cameraEngine.recordMaxDuration = 60;
    /* 对应历史版本旧接口
    [self.adapter setMaxRecordDuration:60]; */
  • 录制一段视频,多次调用可以录制多段视频
    [self.cameraEngine startRecording]; // 开始录制
    [self.cameraEngine pauseRecording]; // 完成一段录制

    /* 对应历史版本旧接口
    [self.adapter startRecording];  // 开始录制
    [self.adapter pauseRecording];  // 完成一段录制   */
  • 结束录制
    // 结束录制,并将录制的多段视频合并后导出整个视频文件
    [self.cameraEngine exportVideoWithCompletionHandler:^(NSURL * _Nonnull videoFileURL, NSError * _Nonnull error) {

    }];

    /* 对应历史版本旧接口
    // 结束录制,并将录制的多段视频合并后导出整个视频文件
    [self.adapter stopVideoCaptureWithOutputURL:destUrl completionHandler:completionHandler];    */
  • 删除已录制片段
    // 删除最新录制的一段,多次调用,直到删除所有已录制的视频
    [self.cameraEngine deleteLastSavedSegment];
    // 删除所有录制片段
    [self.cameraEngine deleteAllSegments];

    /* 对应历史版本旧接口
    [self.recorder deleteLastVideoSegment]; // 删除最后一段录制内容
    [self.recorder reset];  // 清空所有已录制的视频段    */
  • 获取录制相关信息
    // 是否能开始录制 
    // YES: 可以开始录制, NO:1.已经达到了最大时长 2.还未获取到第一帧buffer
    [self.cameraEngine canStartRecording];
    self.cameraEngine.currentRecordingDuration; // 当前录制的总时长
    self.cameraEngine.segmentInfos.count;       // 分段数组

    /* 对应历史版本旧接口
    self.adapter.isRecording;                   // 能否启用录制
    [self.adapter currentRecordingDuration];    // 获得已录制的视频时长
    // 获得真实展示时长(因为有变速效果,因此这个时间跟已录制的视频真实时长可能不同)
    [self.adapter currentRecordingPresentDuration];
    [self.adapter savedSegmentCount];           // 获得录制的视频段数    */
  • 变速
    // 当前段是否有变速效果
    [self.cameraEngine hasPerSpeedEffect];
    // 设置变速 需要在启动之前设置:
    [self.cameraEngine startRecordingWithFlag:flag speedVaryFactor:speedVaryFactor andEncodeParams:encodeParams];

    /* 对应历史版本旧接口
    // 是否允许当前段变速, 允许传入YES
    [self.adapter speedVaryShouldAllow:isAllow];
    // 设置当前段变速因子, 取值范围 0.2 - 4.0
    [self.adapter setNextRecordSegmentSpeedVaryFactor:factor];
    // 当前段是否有变速效果
    [self.adapter hasPerSpeedEffect];   */
  • 设置配乐
    self.cameraEngine.backgroundAudio = backgroundAudio;
    /* 对应历史版本旧接口
    self.adapter.backgroundAudio = backgroundAudio;     */
  • 贴纸
    // 添加贴纸
    [self.cameraEngine updateDecoration:decoration];
    // 移除贴纸
    [self.cameraEngine removeDecoration];
    // 调整贴纸音效(对于有音效的贴纸而言)
    [self.cameraEngine adjustStikcerVolume:mute ? .0f : 1.0f];

    /* 对应历史版本旧接口
    [self.adapter updateDecoration:decoration]; // 添加贴纸
    [self.adapter removeDecoration];            // 移除贴纸
    // 调整贴纸音效(对于有音效的贴纸而言)
    [self.adapter adjustStikcerVolume:mute ? .0f : 1.0f];   */
  • 切换滤镜
    [self.cameraEngine configFilterA:filterA configFilterB:filterB offset:filterOffset];

    /* 对应历史版本旧接口
    [self.adapter configFilterA:filterA configFilterB:filterB offset:filterOffset];    */
  • 设置美颜参数
    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;
    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
    NASOLABIALFOLDSAREA;// 祛法令纹           0.0 - 1.0
    EYE_TILT;           // 眼睛角度          -1.0 - 1.0

    /* 美体 */
    THIN_BODY;          // 瘦身              0.0 - 1.0
    LONG_LEG;           // 长腿              0.0 - 1.0

    // 设置接口(美白)
    [self.cameraEngine adjustBeauty:value forKey:SKIN_WHITENING];

    /* 对应历史版本旧接口
    [self.adapter setSkinSmoothValue:skinSmoothFactor]; // 磨皮, 参数范围0-1
    [self.adapter setSkinWhitenValue:skinWhitenFactor]; // 美白, 参数范围0-1
    [self.adapter setBeautyBigEyeValue:bigEyeFactor];   // 大眼, 参数范围0-1
    [self.adapter setBeautyThinFaceValue:thinFaceFactor];  // 瘦脸, 参数范围0-1
    [self.adapter setBeautyThinBodyValue:thinBodyFactor];  // 瘦身, 参数范围0-1
    [self.adapter setBeautyLenghLegValue:longLegFactor];   // 长腿, 参数范围0-1 */
  • 美妆-风格妆
    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 美妆资源绝对路径
    [self.cameraEngine addMakeupEffect:makeupEffect];

    // 设置美妆强度
    // @params intensity 强度 [0-1]
    [self.cameraEngine setMakeupEffectIntensity:1.0  makeupType:(XEngineMakeupKey)makeupType];

    // 按美妆子项移除美妆
    [self.cameraEngine removeMakeupEffectWithType:(XEngineMakeupKey)makeupType];

    // 移除所有美妆效果
    [self.cameraEngine removeAllMakeupEffect];
  • 显示原图
    // 设置渲染是否可用  YES : 显示美颜效果  NO : 显示原图
    [self.cameraEngine setRenderStatus:YES];

关于录制其它操作请参考接口文档。

5. 视频编辑

5.1. 功能介绍

短视频SDK提供基础的视频编辑相关功能。可以进行视频裁剪,添加水印,静态贴纸,配乐,时间特化,画面特效等功能。核心类是MDVideoEditorAdapter

5.2. 视频编辑流程

  • 初始化
    _adapter = [[MDVideoEditorAdapter alloc] initWithToken:@"Token"];
  • 获取播放视图
   self.adapter.playerViewController.view.frame = self.viewController.view.bounds;
   [self.viewController addChildViewController:self.adapter.playerViewController];
   [self.viewController.view insertSubview:self.adapter.playerViewController.view atIndex:0];
   [self.adapter.playerViewController didMoveToParentViewController:self.viewController];
  • 视频播放
    // 播放
    [self.adapter play];
    // 暂停
    [self.adapter pause];
    // 停止
    [self.adapter stop];
    // 重播
    [self.adapter replay];
  • 播放事件处理
    // 播放结束回调
    __weak typeof(self) weakself = self;
    self.adapter.playToEndTime = ^(AVPlayer * _Nonnull player) {
        __strong typeof(self) self = weakself;
        if (![self.speedVaryVc isViewVisible] && self.exportTask == nil && !self.specialEffectsVc.isShow) {
            [player seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
            [self play];
        }
    };
    // 播放进度回调
    self.adapter.playerPeriodicTimeCallback = ^(CMTime time) {
        __strong typeof(self) self = weakself;
        if ([self.musicSelectPicker viewIsShowing]) {
            [self.musicSelectPicker periodicTimeCallback:time];
        }
    };
  • 视频处理
    MDVideoEditorAdapter *adapter = self.adapter;
    // 视频裁剪时间段
    [adapter setVideoTimeRange:videoInsertTimeRange];
    // 视频旋转方向
    [adapter setVideoPerferredTransform:ideoPreferredTransform];
    // 设置重复
    [adapter setMediaSourceRepeatRange:repeatTimeRange];
    // 设置变速效果
    [adapter setTimeRangeMappingEffects:timerangeMappingEffects];
    // 设置背景音乐
    adapter.backgroundAudioURL = backgroundMusicURL;
    // 设置背景音乐截取时间
    adapter.backgroundAudioRange = backgroundMusicTimeRange;
    // 设置原音音量
    [adapter setSourceVolume:sourceAudioVolume];
    // 设置背景音音量
    [adapter setBackgroundMusicVolume:backgroundMusicVolume];
    // 设置视频源
    [adapter loadVideo:videoAsset];
    // 合成视频
    [self.adapter compositeVideoWithError:NULL];

注意: 在调用compositeVideoWithError:方法前,所有对视频或者配乐的编辑行为均不生效。

    // 设置原音音量
    [adapter setSourceVolume:sourceAudioVolume];
    // 设置背景音音量
    [adapter setBackgroundMusicVolume:backgroundMusicVolume];
    // 合成音效.
    [self.adapter updateAudioMix];

注意: 如果仅合成音效,则调用updateAudioMix方法效率更高。

  • 贴纸
    // 添加贴纸
    [self.adapter updateDecoration:decoration];
    // 移除贴纸
    [self.adapter removeDecoration];
    // 调整贴纸音效(对于有音效的贴纸而言)
    [self.adapter adjustStikcerVolume:mute ? .0f : 1.0f];
  • 切换滤镜
    [self.adapter configFilterA:filterA configFilterB:filterB offset:filterOffset];
  • 设置美颜参数
    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;
    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
    NASOLABIALFOLDSAREA;// 祛法令纹           0.0 - 1.0
    EYE_TILT;           // 眼睛角度          -1.0 - 1.0

    /* 美体 */
    THIN_BODY;          // 瘦身              0.0 - 1.0
    LONG_LEG;           // 长腿              0.0 - 1.0

    // 设置美颜接口(示例美白)
    [self.cameraEngine adjustBeauty:value forKey:SKIN_WHITENING];

    /* 对应历史版本旧接口
    [self.adapter setSkinSmoothValue:skinSmoothFactor]; // 磨皮, 参数范围0-1
    [self.adapter setSkinWhitenValue:skinWhitenFactor]; // 美白, 参数范围0-1
    [self.adapter setBeautyBigEyeValue:bigEyeFactor];   // 大眼, 参数范围0-1
    [self.adapter setBeautyThinFaceValue:thinFaceFactor];  // 瘦脸, 参数范围0-1
    [self.adapter setBeautyThinBodyValue:thinBodyFactor];  // 瘦身, 参数范围0-1
    [self.adapter setBeautyLenghLegValue:longLegFactor];   // 长腿, 参数范围0-1 */
  • 美妆
    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 美妆资源绝对路径  
    [self.cameraEngine addMakeupEffect:makeupEffect];

    // 设置美妆强度  
    // @params intensity 强度 [0-1]  
    [self.cameraEngine setMakeupEffectIntensity:1.0  makeupType:(XEngineMakeupKey)makeupType];

    // 按美妆子项移除美妆  
    [self.cameraEngine removeMakeupEffectWithType:(XEngineMakeupKey)makeupType];

    // 移除所有美妆效果  
    [self.cameraEngine removeAllMakeupEffect];
  • 显示原图
    // 设置渲染是否可用  YES : 显示美颜效果  NO : 显示原图
    [self.cameraEngine setRenderStatus:YES];
  • 融合涂鸦图片
    [self.adapter setGraffitiCanvasImage:canvasImage mosaicCanvasImage:mosaicCanvasImage];
  • 动态贴纸
    // 添加贴纸
    [self.adapter addDynamicSticker:(id)sticker];
    // 移除贴纸(与添加时候需要是同一个对象)
    [self.adapter removeDynamicSticker:(id)aSticker];
  • 特效滤镜
    // 在某一时间段内添加特效滤镜
    [self.adapter addSpecialFilter:filter timeRange:timeRange];
    // 移除最后一个特效滤镜
    [self.adapter deleteLastSpecialFilter];
    // 移除所有特效滤镜
    [self.adapter deleteAllSpecialFilters];
    // 更新选中时间的特效滤镜起作用的时长
    [self.adapter updateCurrentItemWithTime:time timeRange:timeRange];
    // 是否存在特效滤镜
    [self.adapter hasSpecialFilter];
    // 所有特效滤镜
    [self.adapter specialFilters];

注意: 目前SDK默认支持 雨窗,灵魂出窍,抖动,故障,四宫格五中特效滤镜。分别为:

    MDRecordRainWindowFilter
    MDRecordSoulOutFilter
    MDRecordShakeFilter
    MDRecordTVArtifactFilter
    MDRecordMirrImageFrameFilter

自定义特效滤镜可以通过实现 MDFilterLifeStyle 协议的 GPUImageFilter 实现。

  • 导出
    // 设置导出时候要融合的图片
    self.adapter.overlayImage = customOverlay;
    // 设置导出码率
    [self.adapter setTargetBitRate:sourceBitRate];
    // 设置导出视频大小
    [self.adapter setPresentationSize:presentationSize];
    // 更新builder设置
    [self updateBuilderSetting];
    // 设置是否需要经过滤镜(建议有改动时候再设为YES以便优化效率)
    [self.adapter enableFilterEffect:YES];
    // 导出编辑后视频
    __weak typeof(self) weakSelf = self;
    self.exportTask = [self.adapter exportToURL:url progressHandler:^(double progress) {
        [weakSelf.delegate exportingWithProgress:progress];
    } completion:^(NSURL * _Nonnull url) {
        [weakSelf handleExportFinishWithUrl:url error:nil];
        completionHandler(url);
    } failure:^(NSError * _Nullable error) {
        [weakSelf handleExportFinishWithUrl:url error:error];
        failHandler(error);
    }];
    // 取消导出
    [self.exportTask cancel];

6. 图片编辑

6.1. 图片编辑功能介绍

图片编辑提供了图片添加滤镜,增加水印等效果。核心类是MDImageEditorAdapter

6.2. 图片编辑

  • 初始化
    _adapter = [[MDImageEditorAdapter alloc] initWithToken:@"Token"];
  • 加载图片
    // 加载图片并设置回调,回调函数返回处理完成的结果
    [self.adapter loadImage:originImage completionHander:^(CVPixelBufferRef renderedPixelBuffer, NSError * error) {
            __strong typeof(self) strongself = weakself;
            // save to renderredPixelBuffer
            if (strongself.renderedPixelBuffer) {
                CVPixelBufferRelease(strongself.renderedPixelBuffer);
                strongself.renderedPixelBuffer = NULL;
            }
            strongself.renderedPixelBuffer = renderedPixelBuffer;
            CVPixelBufferRetain(strongself.renderedPixelBuffer);
            // show image
            [strongself.previewView presentPixelBuffer:renderedPixelBuffer];

        }];
  • 处理图片
    // 开始处理
    [self.adapter startProcess];

    // 结束处理并释放资源(仅在dealloc中调用一次即可)
    [self.adapter stopProcess];
  • 切换滤镜
    [self.adapter configFilterA:filterA configFilterB:filterB offset:filterOffset];
  • 设置美颜参数
    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;
    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
    NASOLABIALFOLDSAREA;// 祛法令纹           0.0 - 1.0
    EYE_TILT;           // 眼睛角度          -1.0 - 1.0

    /* 美体 */
    THIN_BODY;          // 瘦身              0.0 - 1.0
    LONG_LEG;           // 长腿              0.0 - 1.0

    // 设置接口(美白)
    [self.cameraEngine adjustBeauty:value forKey:SKIN_WHITENING];


    /* 对应历史版本旧接口
    [self.adapter setSkinSmoothValue:skinSmoothFactor]; // 磨皮, 参数范围0-1
    [self.adapter setSkinWhitenValue:skinWhitenFactor]; // 美白, 参数范围0-1
    [self.adapter setBeautyBigEyeValue:bigEyeFactor];   // 大眼, 参数范围0-1
    [self.adapter setBeautyThinFaceValue:thinFaceFactor];  // 瘦脸, 参数范围0-1
    [self.adapter setBeautyThinBodyValue:thinBodyFactor];  // 瘦身, 参数范围0-1
    [self.adapter setBeautyLenghLegValue:longLegFactor];   // 长腿, 参数范围0-1 */
  • 美妆
    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 美妆资源绝对路径
    [self.cameraEngine addMakeupEffect:makeupEffect];

    // 设置美妆强度
    // @params intensity 强度 [0-1]
    [self.cameraEngine setMakeupEffectIntensity:1.0  makeupType:(XEngineMakeupKey)makeupType];

    // 按美妆子项移除美妆
    [self.cameraEngine removeMakeupEffectWithType:(XEngineMakeupKey)makeupType];

    // 移除所有美妆效果
    [self.cameraEngine removeAllMakeupEffect];

其它功能请参考图片处理接口文档。

Copyright © momo 2019 all right reserved,powered by Gitbook修订时间: 2021-11-24 10:49:42

results matching ""

    No results matching ""