Skip to content

easemob/FUEMiOSDemo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FUEMiOSDemo 快速接入文档

FUEMiOSDemo 是集成了 Faceunity 面部跟踪和虚拟道具功能 和 EMiOSDemo 音视频功能的 Demo。

本文是 FaceUnity SDK 快速对接环信EMiOSDemo 的导读说明,关于 FaceUnity SDK 的详细说明,请参看 FULiveDemo

快速集成方法

一、导入 SDK

将 FaceUnity 文件夹全部拖入工程中,并且添加依赖库 OpenGLES.frameworkAccelerate.frameworkCoreMedia.frameworkAVFoundation.frameworkstdc++.tbd

二、快速加载道具

在 Call1v1VideoViewController viewDidLoad 中调用快速加载道具函数,该函数会创建一个美颜道具及指定的贴纸道具。

[[FUManager shareManager] loadItems];

注:FUManager 的 shareManager 函数中会对 SDK 进行初始化,并设置默认的美颜参数。

三、图像处理

DemoCallManager 类中设置自定义视频采集options.enableCustomizeVideoData = YES,获取视频数据,对图像进行处理,并发送给环信sdk:

-(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer {
//    NSLog(@"自采集视频数据.....");
    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) ;
//    [[FUManager shareManager] renderItemsToPixelBuffer:pixelBuffer];
    
    if (pixelBuffer != NULL) {
        CMTime cmTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
        
      /* 视频处理 */
        [[FUManager shareManager] renderItemsToPixelBuffer:pixelBuffer];
        
        /* 自采集预览 */
        [_glView displayPixelBuffer:pixelBuffer];
        
        [EMClient.sharedClient.callManager inputVideoPixelBuffer:pixelBuffer sampleBufferTime:cmTime rotation:0 callId:self.currentCall.callId completion:^(EMError *aError) {
            //NSLog(@"发送完成");
        }];
    
    }
}

四、切换道具及调整美颜参数

本例中通过添加 FUAPIDemoBar 来实现切换道具及调整美颜参数的具体实现,FUAPIDemoBar 是快速集成用的UI,客户可自定义UI。

1、在 Call1v1VideoViewController.m 中添加头文件,并创建 demoBar 属性

#import <FUAPIDemoBar/FUAPIDemoBar.h>

@property (nonatomic, strong) FUAPIDemoBar *demoBar ;

2、在 demoBar 的 get 方法中对其进行初始化,并遵循代理 FUAPIDemoBarDelegate,实现代理方法 demoBarDidSelectedItem:demoBarBeautyParamChanged以进一步实现道具的切换及美颜参数的调整。

初始化

// demobar 初始化
-(FUAPIDemoBar *)demoBar {
    if (!_demoBar) {
        
        _demoBar = [[FUAPIDemoBar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 164 - 44, self.view.frame.size.width, 164)];
        
        _demoBar.itemsDataSource = [FUManager shareManager].itemsDataSource;
        _demoBar.selectedItem = [FUManager shareManager].selectedItem ;
        
        _demoBar.filtersDataSource = [FUManager shareManager].filtersDataSource ;
        _demoBar.beautyFiltersDataSource = [FUManager shareManager].beautyFiltersDataSource ;
        _demoBar.filtersCHName = [FUManager shareManager].filtersCHName ;
        _demoBar.selectedFilter = [FUManager shareManager].selectedFilter ;
        [_demoBar setFilterLevel:[FUManager shareManager].selectedFilterLevel forFilter:[FUManager shareManager].selectedFilter] ;
        
        _demoBar.skinDetectEnable = [FUManager shareManager].skinDetectEnable;
        _demoBar.blurShape = [FUManager shareManager].blurShape ;
        _demoBar.blurLevel = [FUManager shareManager].blurLevel ;
        _demoBar.whiteLevel = [FUManager shareManager].whiteLevel ;
        _demoBar.redLevel = [FUManager shareManager].redLevel;
        _demoBar.eyelightingLevel = [FUManager shareManager].eyelightingLevel ;
        _demoBar.beautyToothLevel = [FUManager shareManager].beautyToothLevel ;
        _demoBar.faceShape = [FUManager shareManager].faceShape ;
        
        _demoBar.enlargingLevel = [FUManager shareManager].enlargingLevel ;
        _demoBar.thinningLevel = [FUManager shareManager].thinningLevel ;
        _demoBar.enlargingLevel_new = [FUManager shareManager].enlargingLevel ;
        _demoBar.thinningLevel_new = [FUManager shareManager].thinningLevel ;
        _demoBar.jewLevel = [FUManager shareManager].jewLevel ;
        _demoBar.foreheadLevel = [FUManager shareManager].foreheadLevel ;
        _demoBar.noseLevel = [FUManager shareManager].noseLevel ;
        _demoBar.mouthLevel = [FUManager shareManager].mouthLevel ;
        
        _demoBar.delegate = self;
    }
    return _demoBar ;
}

切换贴纸代理方法

/**      FUAPIDemoBarDelegate       **/

// 切换贴纸
- (void)demoBarDidSelectedItem:(NSString *)itemName {
    
    [[FUManager shareManager] loadItem:itemName];
}

更新美颜参数方法

// 更新美颜参数
- (void)demoBarBeautyParamChanged {
    
    [FUManager shareManager].skinDetectEnable = _demoBar.skinDetectEnable;
    [FUManager shareManager].blurShape = _demoBar.blurShape;
    [FUManager shareManager].blurLevel = _demoBar.blurLevel ;
    [FUManager shareManager].whiteLevel = _demoBar.whiteLevel;
    [FUManager shareManager].redLevel = _demoBar.redLevel;
    [FUManager shareManager].eyelightingLevel = _demoBar.eyelightingLevel;
    [FUManager shareManager].beautyToothLevel = _demoBar.beautyToothLevel;
    [FUManager shareManager].faceShape = _demoBar.faceShape;
    [FUManager shareManager].enlargingLevel = _demoBar.enlargingLevel;
    [FUManager shareManager].thinningLevel = _demoBar.thinningLevel;
    [FUManager shareManager].enlargingLevel_new = _demoBar.enlargingLevel_new;
    [FUManager shareManager].thinningLevel_new = _demoBar.thinningLevel_new;
    [FUManager shareManager].jewLevel = _demoBar.jewLevel;
    [FUManager shareManager].foreheadLevel = _demoBar.foreheadLevel;
    [FUManager shareManager].noseLevel = _demoBar.noseLevel;
    [FUManager shareManager].mouthLevel = _demoBar.mouthLevel;
    
    [FUManager shareManager].selectedFilter = _demoBar.selectedFilter ;
    [FUManager shareManager].selectedFilterLevel = _demoBar.selectedFilterLevel;
}

3、在 viewDidLoad: 中将 demoBar 添加到页面上

[self.view addSubview:self.demoBar];

、道具销毁

视频录制结束时需要调用 [[FUManager shareManager] destoryItems] 销毁道具。

快速集成完毕,关于 FaceUnity SDK 的更多详细说明,请参看 FULiveDemo

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Objective-C 95.8%
  • C 3.4%
  • Other 0.8%