视频前处理是介于采集和编码之间的一个流程,开发者自行采集视频数据,获取到 SDK 采集的视频数据后,可以通过 SDK 自带的基础美颜和水印功能,进行视频前处理。如果 SDK 无法满足开发者需求(例如美颜效果无法达到预期),还可以搭配 ZEGO Effects SDK 对视频进行一些特殊处理,例如美颜、添加挂件等,该过程即为自定义视频前处理。
自定义视频前处理与自定义视频采集相比,优势在于无需开发者管理设备输入源,仅需对 ZEGO Express SDK 抛出来的原始数据进行操作,然后发回 ZEGO Express SDK 即可。
对于比较复杂的场景,例如想通过摄像头画面做图层混合,建议开发者使用 自定义视频采集 功能实现,该方式性能优化的空间更大。
ZEGO 提供了一个通过 Effects SDK 实现美颜功能的示例源码,请参考 实时音视频和 AI 美颜的搭配使用。
在进行自定义视频前处理前,请确保:
自定义视频前处理的流程与接口调用,如下所示:
创建自定义视频前处理 ZegoCustomVideoProcessConfig 对象,设置 bufferType 属性,用于提供视频帧数据类型。
目前 iOS SDK 支持如下 2 种 bufferType 数据类型,设置其他枚举值将无法正常使用:
Buffer 类型 | 枚举值 | 说明 |
---|---|---|
CVPixelBuffer | ZegoVideoBufferTypeCVPixelBuffer | 表示 CVPixelBufferRef 类型的原始视频数据,格式为 BGRA32。 |
NV12CVPixelBuffer | ZegoVideoBufferTypeNV12CVPixelBuffer | 表示 CVPixelBufferRef 类型的原始视频数据,格式为 NV12。 |
在开始预览和开始推流前,调用 enableCustomVideoProcessing 接口,开启自定义视频前处理功能。
下文以 “ZegoVideoBufferTypeCVPixelBuffer” 为例演示自定义视频前处理的用法。
ZegoCustomVideoProcessConfig *processConfig = [[ZegoCustomVideoProcessConfig alloc] init];
// 选择 CVPixelBuffer 类型视频帧数据
processConfig.bufferType = ZegoVideoBufferTypeCVPixelBuffer;
[[ZegoExpressEngine sharedEngine] enableCustomVideoProcessing:YES config:processConfig channel:ZegoPublishChannelMain];
将 “ViewController” 作为自定义视频前处理回调对象,遵循 ZegoCustomVideoProcessHandler 协议。
@interface ViewController () <ZegoEventHandler, ZegoCustomVideoProcessHandler>
......
@end
调用 setCustomVideoProcessHandler 接口,设置自定义视频采集回调。
// 将自身作为自定义视频前处理回调对象
[[ZegoExpressEngine sharedEngine] setCustomVideoProcessHandler:self];
使用 “ZegoVideoBufferTypeCVPixelBuffer” 类型的视频前处理方式,需要实现 onCapturedUnprocessedCVPixelBuffer 回调方法。当 SDK 获取到原始视频数据后,会通过 onCapturedUnprocessedCVPixelBuffer 方法通知开发者。
开发者可以使用 Express SDK 自带的基础美颜、水印等功能处理视频数据,详情请参考 推流视频增强;也可以与 Effects SDK 搭配实现更多处理效果,详情请参考 实时音视频和 AI 美颜的搭配使用。
- (void)onCapturedUnprocessedCVPixelBuffer:(CVPixelBufferRef)buffer timestamp:(CMTime)timestamp channel:(ZegoPublishChannel)channel {
// 自定义前处理:此处使用 Effects SDK 进行视频处理
[self.effects processImageBuffer:buffer];
// 将处理后的 buffer 发回 Express SDK 里
[[ZegoExpressEngine sharedEngine] sendCustomVideoProcessedCVPixelBuffer:buffer timestamp:timestamp channel:channel];
}
联系我们
文档反馈