实时音视频的修改也比较多,需要注意的是MHBeautyManager 参数要始终保持一致,也就是传入MHMeiyanMenusView和Zego的滤镜类的参数是一样的。
需要在下面的类中作如下修改。黑框中的部分为新加的,可以与即构的demo对比参考。
ZGVideoFilterAsyncDemo.h
```
@property (nonatomic, strong) MHBeautyManager *beautyManager;
```
ZGVideoFilterAsyncDemo.m
```
// SDK 回调。App 在此接口中获取 SDK 采集到的视频帧数据,并进行处理
- (void)queueInputBuffer:(CVPixelBufferRef)pixel_buffer timestamp:(unsignedlonglong)timestamp_100n {
// * 采集到的图像数据通过这个传进来,这个点需要异步处理
dispatch_async(queue_, ^ {
int imageWidth = (int)CVPixelBufferGetWidth(pixel_buffer);
int imageHeight = (int)CVPixelBufferGetHeight(pixel_buffer);
int imageStride = (int)CVPixelBufferGetBytesPerRowOfPlane(pixel_buffer, 0);
CVPixelBufferRef dst = [self->buffer_pool_dequeueInputBuffer:imageWidth height:imageHeight stride:imageStride];
```
![](https://img.kancloud.cn/19/f2/19f20e81181aba758c676121ca172bd2_1734x504.png)
```
//if (dst) {
// if(self.beautyManager){
// [self.beautyManager processZGWithPixelBuffer:pixel_buffer];
// }
CVPixelBufferRef output = pixel_buffer;
if ([ZGImageUtilscopyPixelBufferFrom:output to:dst]) {
// * 把从 buffer pool 中得到的 CVPixelBuffer 实例传进来
[self->buffer_pool_queueInputBuffer:dst timestamp:timestamp_100n];
}
}
self.pendingCount= self.pendingCount- 1;
CVPixelBufferRelease(pixel_buffer);
});
}
```
lZGVideoFilterAsyncDemo.h
```
@property (nonatomic, strong) MHBeautyManager *beautyManager;
```
lZGVideoFilterFactoryDemo.m
```
// 创建外部滤镜实例
- (id)zego_create {
if (g_filter_== nil) {
// 此处的 bufferType 对应四种滤镜类型,以创建不同的外部滤镜实例
switch (self.bufferType) {
case ZegoVideoBufferTypeAsyncPixelBuffer:
{
g_filter_ = [[ZGVideoFilterAsyncDemo alloc] init];
ZGVideoFilterAsyncDemo* g_filter =
///黑框部分开始
(ZGVideoFilterAsyncDemo*)g_filter_;
[g_filter setMHBeautyManager:self.beautyManager];
///黑框部分结束
}
break;
case ZegoVideoBufferTypeSyncPixelBuffer:
g_filter_ = [[ZGVideoFilterSyncDemo alloc] init];
break;
case ZegoVideoBufferTypeAsyncI420PixelBuffer:
g_filter_ = [[ZGVideoFilterI420Demo alloc] init];
break;
case ZegoVideoBufferTypeAsyncNV12PixelBuffer:
g_filter_ = [[ZGVideoFilterNV12Demo alloc] init];
break;
default:
break;
}
}
returng_filter_;
}
```
ZGExternalVideoFilterDemo.h
添加如下方法:
```
- (void)initFilterFactoryType:(ZegoVideoBufferType)type beautyManager:(MHBeautyManager*)beautyManager;
lZGExternalVideoFilterDemo.m实现该方法:
- (void)initFilterFactoryType:(ZegoVideoBufferType)type beautyManager:(MHBeautyManager*)beautyManager{
if (self.g_filterFactory== nil) {
self.g_filterFactory = [[ZGVideoFilterFactoryDemo alloc] init];
self.g_filterFactory.bufferType = type;
self.g_filterFactory.beautyManager = beautyManager;
}
[ZGApiManager releaseApi];
[ZegoExternalVideoFilter setVideoFilterFactory:self.g_filterFactorychannelIndex:ZEGOAPI_CHN_MAIN];
}
```
ZGVideoTalkLoginViewController
```
初始化MHBeautyManager
- (MHBeautyManager *)beautyManager {
if (!_beautyManager) {
_beautyManager = [[MHBeautyManageralloc] init];
}
return_beautyManager;
}
```
在ViewDidLoad方法中初始ZGExternalVideoFilterDemo:
```
self.demo = [[ZGExternalVideoFilterDemoalloc] init];
self.demo.delegate= self;
[self.demo initFilterFactoryType:ZegoVideoBufferTypeAsyncPixelBuffer beautyManager:self.beautyManager];
```
ZGVideoTalkViewController是实现视频通话的功能,将上一步中的beautyManager作为参数传入。
```
ZGVideoTalkViewController*vc = [sb instantiateViewControllerWithIdentifier:NSStringFromClass([ZGVideoTalkViewControllerclass])];
vc.roomID = roomID;
vc.videoTalkDemo= self.videoTalkDemo;
vc.beautyManager= self.beautyManager;
```
在ZGVideoTalkViewController.h文件中
```
@property (nonatomic, strong) MHBeautyManager *beautyManager;
```
ZGVideoTalkViewController .m 文件中对美颜UI初始化,并将传入的beautyManager传入MHMeiyanMenusView
```
- (MHMeiyanMenusView *)menusView {
if (!_menusView) {
_menusView = [[MHMeiyanMenusView alloc] initWithFrame:CGRectMake(0, window_height- MHMeiyanMenuHeight- BottomIndicatorHeight, window_width, MHMeiyanMenuHeight) superView:self.viewdelegate:self beautyManager:self.beautyManagerisTXSDK:NO];
}
return _menusView;
}
```
- 一、产品简介
- 1.功能说明
- 2.平台支持
- 3.官方链接
- 二、集成指引
- android集成指引
- 1.概述
- 2.接入说明
- 3.详细步骤
- 4.使用步骤
- 1.腾讯移动直播
- 2.金山云直播
- 3.三体云直播
- 4.阿里云直播
- 5.七牛云直播
- 6.七牛短视频
- 7.Movieous短视频
- 8.即构直播
- 9.腾讯实时音视频
- 10.网易视频云
- 11.即构实时视频
- 12.融云视频通话
- 13.声网视频互动直播
- 14.声网视频通话
- 15.即构新版实时音视频
- 16.不同直播SDK设置基础美颜方式
- 5.新版美狐集成
- iOS集成指引
- 1.申请MH授权Key
- 2.检查SDK资源
- 3.配置工程
- 4.使用MHUI
- 5. 腾讯直播SDK美颜
- 6.TTT 直播SDK美颜
- 7.TTT 实时互动直播
- 8.金山直播SDK 美颜
- 9.七牛直播SDK 美颜
- 10.七牛短视频SDK 美颜
- 11.Movieous短视频
- 12.Zego(即构)直播SDK 美颜
- 13. Zego(即构)实时音视频SDK 美颜
- 14. 网易直播SDK美颜
- 15. 腾讯互动直播SDK美颜
- 16. 腾讯实时音视频
- 17.融云实时音视频
- 18.声网视频通话
- 19.声网直播
- 20. 腾讯短视频录制
- 21.阿里直播 SDK 美颜
- 22.阿里音视频
- 2.4.X版本安卓集成指引
- 1.详细步骤
- 2.云直播平台具体接入
- 1.腾讯移动直播
- 2.阿里云音视频
- 三、MHSDK美颜相关接口部分
- andorid美颜相关接口文档说明
- 美颜相关接口说明文档
- 设置滤镜
- 设置贴纸
- iOS美颜相关接口说明文档
- 1.初始化
- 2.美颜相关接口说明文档
- 3.美颜功能说明
- 四、常见问题
- android常见问题
- 1.认证失败原因
- 2.调用美型、贴纸、特效、哈哈镜没有效果
- 3.MHBeautyManager的特别声明
- 4.使用MHUI的注意事项
- 5.卡顿问题
- 6.闪退问题
- 7. 贴纸无法下载
- 8.andriodX(腾讯云)环境集成问题:
- 9.导入新的sdk出现乱码
- 10.弹出的UI有阴影效果
- 11.安卓10出现获取网络资源失败请检查网络
- 12.美狐可以记录设置的各种参数吗?
- 13.(七牛云)替换sdk画面上下颠倒
- 14.贴纸可以自定义吗
- 15.您这边可以短视频录制吗
- 16.MHSDK必须本地依赖吗
- 17.找不到某个方法
- 18.环信不显示自己的头像框
- 19.如何取消特效
- 20.水印没有找到
- 21.声网视频通话大小屏切换问题
- iOS常见问题
- 1.iOS认证失败原因
- 2.美颜无效果
- 3.贴纸下载失败
- 4.贴纸可下载,无效果
- 5. IPA processing failed/上架打包失败
- 6.存储美颜默认数据
- 7.如果遇到了Failed to create IOSurface image (texture)
- 8.opencv.framework冲突
- 五、联系方式