代码拉取完成,页面将自动刷新
FUEMiOSDemo 是集成了 Faceunity 面部跟踪和虚拟道具功能 和 EMiOSDemo 音视频功能的 Demo。
本文是 FaceUnity SDK 快速对接环信EMiOSDemo 的导读说明,关于 FaceUnity SDK
的详细说明,请参看 FULiveDemo
将 FaceUnity 文件夹全部拖入工程中,并且添加依赖库 OpenGLES.framework
、Accelerate.framework
、CoreMedia.framework
、AVFoundation.framework
、libc++.tbd
、CoreML.framework
备注: Cocoapods 管理无需添加依赖库
-FUManager //nama 业务类
-FUCamera //视频采集类
-authpack.h //权限文件
+FUAPIDemoBar //美颜工具条,可自定义
+items //贴纸和美妆资源 xx.bundel文件
1、在 Call1v1VideoViewController.m
中添加头文件,并创建页面属性
/** faceU */
#import "FUManager.h"
#import "FUAPIDemoBar.h"
@property (nonatomic, strong) FUAPIDemoBar *demoBar;
2、初始化 UI,并遵循代理 FUAPIDemoBarDelegate ,实现代理方法 demoBarDidSelectedItem:
切换贴纸 和 demoBarBeautyParamChanged
更新美颜参数。
/// 初始化 demoBar
- (FUAPIDemoBar *)demoBar {
if (!_demoBar) {
_demoBar = [[FUAPIDemoBar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 164 -250, self.view.frame.size.width, 164)];
_demoBar.mDelegate = self;
}
return _demoBar ;
}
// 切换贴纸
-(void)bottomDidChange:(int)index{
if (index < 3) {
[[FUManager shareManager] setRenderType:FUDataTypeBeautify];
}
if (index == 3) {
[[FUManager shareManager] setRenderType:FUDataTypeStrick];
}
if (index == 4) {
[[FUManager shareManager] setRenderType:FUDataTypeMakeup];
}
if (index == 5) {
[[FUManager shareManager] setRenderType:FUDataTypebody];
}
}
// 更新美颜参数
- (void)filterValueChange:(FUBeautyParam *)param{
[[FUManager shareManager] filterValueChange:param];
}
viewDidLoad:
初始化SDK,并将demoBar
添加到页面上/**faceU */
[[FUManager shareManager] loadFilter];
[FUManager shareManager].isRender = YES;
[FUManager shareManager].flipx = YES;
[FUManager shareManager].trackFlipx = YES;
[[FUManager shareManager] setAsyncTrackFaceEnable:NO];
[self.view addSubview:self.demoBar];
在 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(@"发送完成");
}];
}
}
1 视图控制器生命周期结束时,销毁道具
[[FUManager shareManager] destoryItems];
2 切换摄像头需要调用,切换摄像头
[[FUManager shareManager] onCameraChange];
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。