跳到主要内容

流处理

SDK 支持应用程序获取视频流数据,自行进行美颜、录像等处理后,再把数据再返回给 SDK 进行发送或渲染。

在发送前处理本地视频流

应用程序可以在 SDK 发送视频流前处理视频流数据,修改会对发送到远端以及本地视频显示的视频数据生效。请在 RCRTCCameraOutputStream 类中的 videoSendBufferCallback 中,处理后同步返回的视频 CMSampleBufferRef。如果用户传正常数据,则内部会自行释放 CFRelease(CMSampleBufferRef) 对象,上层不需要再考虑释放问题。

[RCRTCEngine sharedInstance].defaultVideoStream.videoSendBufferCallback =
^CMSampleBufferRef _Nullable(BOOL valid, CMSampleBufferRef _Nullable sampleBuffer) {
//直接修改 sampleBuffer 内存数据或者返回一个新生成的 CMSampleBufferRef
};
参数类型说明
videoSendBufferCallbackRCRTCVideoCMSampleBufferCallback引擎底部开始视频编码并发送之前会往上层抛一个回调,用户可以修改和调整 CMSampleBufferRef 数据,然后返回一个 CMSampleBufferRef 数据,如果返回空或者没有实现该回调,则会使用默认视频数据传输

在本地预览前处理视频流

应用程序可以在 SDK 本地显示视频流前处理视频流,修改仅作用于本地视频显示,SDK 仍然发送摄像头采集的原始数据。请在 videoDisplayBufferCallback 中,处理后同步返回的 CMSampleBufferRef。如果用户传正常数据,则内部会自行 CFRelease CMSampleBufferRef 对象,上层不需要再考虑释放问题。

[RCRTCEngine sharedInstance].defaultVideoStream.videoDisplayBufferCallback =
^CMSampleBufferRef _Nullable(BOOL valid, CMSampleBufferRef _Nullable sampleBuffer) {
//直接修改 sampleBuffer 内存数据或者返回一个新生成的 CMSampleBufferRef
};
参数类型说明
videoDisplayBufferCallbackRCRTCVideoCMSampleBufferCallback本地摄像头采集的视频在即将预览前会往上层抛一个视频帧回调,用户可以处理视频帧数据之后然后回传给 RTC,RTC 使用用户处理的视频帧进行预览

处理收到的远端流

应用程序可以在 SDK 收到远端视频流后处理视频流。远端用户流 RCRTCVideoInputStream 中定义了 RCRTCVideoInputStreamDelegate代理,实现此代理后可以将远端用户流中的视频 CVPixelBufferRef 数据返回。

- (void)willRenderCVPixelBufferRef:(CVPixelBufferRef)ref stream:(RCRTCInputStream *)stream;
参数类型说明
refCVPixelBufferRef远端视频数据
streamRCRTCInputStream远端视频流