實時音視頻的修改也比較多,需要注意的是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];
```

```
//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沖突
- 五、聯系方式