对接第三方插件
提示
在基于 SDK 建立通话基础上,使用 GPUImage 库可以实现本地视频滤镜和水印等视频纹理的渲染处理。
对接三方插件(实现美颜、水印)(≧ 5.2.3)
在 RCRTCCameraOutputStream 的父类 RCRTCVideoOutputStream 中的属性 streamEventDelegate
中 outputVideoStream:captureVideoFrame:
方法,会同步返回采集的视频帧 RCRTCVideoFrame,开发者可以直接对该视频帧的内存数据 pixelBuffer
进行美颜、水印处理。
-
设置代理。
[RCRTCEngine sharedInstance].defaultVideoStream.streamEventDelegate = self;
-
在
outputVideoStream:captureVideoFrame:
方法中对该视频帧的内存数据pixelBuffer
进行美颜、水印处理。/*!
采集视频数据回调
@param videoFrame 采集的视频数据
@param stream 采集的视频帧数据所属接收到的流
@discussion
采集的视频数据,如果修改该视频帧,会影响本地渲染和编码发送的视频帧数据,不支持修改数据格式
@remarks 代理
added from 5.2.3
*/
- (void)outputVideoStream:(RCRTCVideoOutputStream *)stream captureVideoFrame:(nullable RCRTCVideoFrame *)videoFrame {
//美颜、水印处理 videoFrame 中的 pixelBuffer
}输入参数 类型 说明 stream RCRTCVideoOutputStream 当前流对象 videoFrame RCRTCVideoFrame * 当前采集的视频帧
对接三方插件(实现美颜、水印)(< 5.2.3)
在 RCRTCCameraOutputStream 类中的 videoSendBufferCallback
中,处理后同步返回的视频 CMSampleBufferRef
会作用于本地视频显示和发送的视频数据。如果用户传正常数据,则内部会自行释放 CFRelease(CMSampleBufferRef)
对象,上层不需要再考虑释放问题。
参考 RTC Quick Demo(GitHub · Gitee)下 /RCRTCQuickDemo/Living/GPUImage/GPUImageHandle.m
对美颜的处理。
@property (nonatomic, copy, nullable) RCRTCVideoCMSampleBufferCallback videoSendBufferCallback;
输入参数
参数 | 类型 | 说明 |
---|---|---|
videoSendBufferCallback | RCRTCVideoCMSampleBufferCallback | 引擎底部开始视频编码并发送之前会往上层抛一个回调,用户可以修改和调整 CMSampleBufferRef 数据,然后返回一个 CMSampleBufferRef 数据,实现美颜与水印效果。如果返回空或者没有实现该回调,则会使用默认视频数据传输 |
示例代码
[RCRTCEngine sharedInstance].defaultVideoStream.videoSendBufferCallback =
^CMSampleBufferRef _Nullable(BOOL valid, CMSampleBufferRef _Nullable sampleBuffer) {
if ( !strongSelf.openBeauty&&!strongSelf.openWaterMark ) {
return sampleBuffer;
}
// 返回处理后的 CMSampleBufferRef 数据
CMSampleBufferRef processedSampleBuffer = [strongSelf.gpuImageHandler onGPUFilterSource:sampleBuffer];
return processedSampleBuffer ?: sampleBuffer;
};