流处理
SDK 支持应用程序获取视频流数据,自行进行美颜、录像等处理后,再把数据再返回给 SDK 进行发送或渲染。
在发送前处理本地视频流
应用程序可以在 SDK 发送视频流前处理视频流数据,修改会对发送到远端以及本地视频显示的视频数据生效。请在 RCRTCCameraOutputStream
类中的 videoSendBufferCallback
中,处理后同步返回的视频 CMSampleBufferRef
。如果用户传正常数据,则内部会自行释放 CFRelease(CMSampleBufferRef)
对象,上层不需要再考虑释放问题。
[RCRTCEngine sharedInstance].defaultVideoStream.videoSendBufferCallback =
^CMSampleBufferRef _Nullable(BOOL valid, CMSampleBufferRef _Nullable sampleBuffer) {
//直接修改 sampleBuffer 内存数据或者返回一个新生成的 CMSampleBufferRef
};
参数 | 类型 | 说明 |
---|---|---|
videoSendBufferCallback | RCRTCVideoCMSampleBufferCallback | 引擎底部开始视频编码并发送之前会往上层抛一个回调,用户可以修改和调整 CMSampleBufferRef 数据,然后返回一个 CMSampleBufferRef 数据,如果返回空或者没有实现该回调,则会使用默认视频数据传输 |
在本地预览前处理视频流
应用程序可以在 SDK 本地显示视频流前处理视频流,修改仅作用于本地视频显示,SDK 仍然发送摄像头采集的原始数据。请在 videoDisplayBufferCallback
中,处理后同步返回的 CMSampleBufferRef
。如果用户传正常数据,则内部会自行 CFRelease CMSampleBufferRef
对象,上层不需要再考虑释放问题。
[RCRTCEngine sharedInstance].defaultVideoStream.videoDisplayBufferCallback =
^CMSampleBufferRef _Nullable(BOOL valid, CMSampleBufferRef _Nullable sampleBuffer) {
//直接修改 sampleBuffer 内存数据或者返回一个新生成的 CMSampleBufferRef
};
参数 | 类型 | 说明 |
---|---|---|
videoDisplayBufferCallback | RCRTCVideoCMSampleBufferCallback | 本地摄像头采集的视频在即将预览前会往上层抛一个视频帧回调,用户可以处理视频帧数据之后然后回传给 RTC,RTC 使用用户处理的视频帧进行预览 |
处理收到的远端流
应用程序可以在 SDK 收到远端视频流后处理视频流。远端用户流 RCRTCVideoInputStream 中定义了 RCRTCVideoInputStreamDelegate代理,实现此代理后可以将远端用户流中的视频 CVPixelBufferRef
数据返回。
- (void)willRenderCVPixelBufferRef:(CVPixelBufferRef)ref stream:(RCRTCInputStream *)stream;
参数 | 类型 | 说明 |
---|---|---|
ref | CVPixelBufferRef | 远端视频数据 |
stream | RCRTCInputStream | 远端视频流 |