跳到主要内容

视频流处理

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

视频流的处理需要您设置对应的代理:

Objective C
[RCRTCEngine sharedInstance].defaultVideoStream.streamEventDelegate = self;

在发送前处理本地视频流

您可以在 SDK 发送视频流前处理视频流数据,修改会对发送到远端以及本地视频显示的视频数据生效。

实现视频发送处理代理

接口原型

Objective C
- (void)outputVideoStream:(RCRTCVideoOutputStream *)stream willEncodeVideoFrame:(nullable RCRTCVideoFrame *)videoFrame;

参数说明

参数类型是否必填说明
streamRCRTCVideoOutputStream *即将编码发送的视频帧数据所属接收到的流
videoFrameRCRTCVideoFrame *即将编码发送的视频帧数据,类型为 RCRTCVideoFrameFormatI420

代码示例

Objective C
#import <RongRTCLib/RongRTCLib.h>

// 设置视频流事件代理
[RCRTCEngine sharedInstance].defaultVideoStream.streamEventDelegate = self;

// 实现视频发送处理代理方法
- (void)outputVideoStream:(RCRTCVideoOutputStream *)stream willEncodeVideoFrame:(nullable RCRTCVideoFrame *)videoFrame {
// 在这里进行美颜、水印等处理
// 可以修改 videoFrame 的数据
if (videoFrame) {
// 对视频帧进行自定义处理
}
}

在本地预览前处理视频流

您可以在 SDK 本地显示视频流前处理视频流,修改仅作用于本地视频显示,SDK 仍然发送摄像头采集的原始数据。

实现视频预览处理代理

接口原型

Objective C
- (void)outputVideoStream:(RCRTCVideoOutputStream *)stream willRenderVideoFrame:(nullable RCRTCVideoFrame *)videoFrame;

参数说明

参数类型是否必填说明
streamRCRTCVideoOutputStream *即将渲染预览的视频帧数据所属的流
videoFrameRCRTCVideoFrame *即将渲染预览的视频帧数据,类型为 RCRTCVideoFrameFormatI420

代码示例

Objective C
#import <RongRTCLib/RongRTCLib.h>

// 设置视频流事件代理
[RCRTCEngine sharedInstance].defaultVideoStream.streamEventDelegate = self;

// 实现视频预览处理代理方法
- (void)outputVideoStream:(RCRTCVideoOutputStream *)stream willRenderVideoFrame:(nullable RCRTCVideoFrame *)videoFrame {
// 在这里进行仅影响本地预览的处理
// 可以修改 videoFrame 的数据
if (videoFrame) {
// 对视频帧进行自定义处理(仅影响本地预览)
}
}

处理收到的远端流

您可以在 SDK 收到远端视频流后处理视频流。远端用户流 RCRTCVideoInputStream 中定义了 RCRTCVideoInputStreamEventDelegate 代理,实现此代理后可以获取远端用户流中的视频 RCRTCVideoFrame 数据。

实现远端视频流代理

接口原型

Objective C
- (void)inputVideoStream:(RCRTCVideoInputStream *)stream willRenderVideoFrame:(nullable RCRTCVideoFrame *)videoFrame;

参数说明

参数类型是否必填说明
streamRCRTCVideoInputStream *远端视频输入流对象
videoFrameRCRTCVideoFrame *远端视频帧数据,类型为 RCRTCVideoFrameFormatI420

代码示例

Objective C
#import <RongRTCLib/RongRTCLib.h>

// 设置远端视频流代理
remoteVideoInputStream.streamEventDelegate = self;

// 实现代理方法
- (void)inputVideoStream:(RCRTCVideoInputStream *)stream willRenderVideoFrame:(nullable RCRTCVideoFrame *)videoFrame {
// 在这里处理远端视频数据
// 可以进行录制、截图、美颜等操作
if (videoFrame) {
// 对远端视频帧进行自定义处理
}
}