
# 原始视频数据（视频前后处理）
#### 功能描述
音视频传输过程中，我们可以对采集到的音视频数据进行前处理和后处理，获取想要的播放效果。
对于有自行处理音视频数据需求的场景，HWRtcEngine SDK 提供原始数据功能，您可以在将数据发送给编码器前进行前处理，对捕捉到的音频信号或视频帧进行修改，也可以在将数据发送给解码器后进行后处理，对接收到的音频信号或视频帧进行修改。
原始音频数据可以进行视频前处理，然后发送给远端。也可以进行视频后处理。
#### 注意事项
当前只支持YUV420数据格式处理。
 #### 接口调用流程
![](https://support.huaweicloud.com/bestpractice-rtc/zh-cn_image_0000001182240910.png)
#### 注册视频前后处理
获取HWRtcEngine的HWRtcMediaEngine对象。
```
[HWRtcEngine sharedEngine].mediaEngine
```
注册视频前后处理
```
[[HWRtcEngine sharedEngine].mediaEngine setVideoFrameObserver:self];
```
每次入会都需要重新注册。取消注册，则传nil。
self （当前类）要签署HWRtcMediaEngineVideoDelegate。
和实现
```
requireCaptureVideoFrame：
```
```
requireRenderVideoFrame：
```
回调，通过回调的返回值来决定对应视频帧的处理是否生效。
实现
```
onVideoFrameCapture：
```
```
onVideoFrameRender：
```
回调，从回调中获取视频帧并进行处理。
**注意**：所有回调的返回值为false，说明对视频帧的处理无效。
```
/// 视频前处理
- (BOOL)onVideoFrameCapture:(HWRtcVideoFrame* _Nonnull)videoFrame {
    return YES;
}
 
//后处理
- (BOOL)onVideoFrameRender:(NSString *_Nonnull)userid
                videoFrame:(HWRtcVideoFrame* _Nonnull)videoFrame
 {
    return YES;
}
 
- (BOOL)requireCaptureVideoFrame {
    return YES;
}
 
- (BOOL)requireRenderVideoFrame {
    Return YES;
}
```
#### 加入房间
参考[接口调用流程]中加入房间的时序图步骤加入房间。
#### API参考
[setVideoFrameObserver](https://support.huaweicloud.com/csdk-rtc/rtc_05_0076.html#section0)
[requireCaptureVideoFrame](https://support.huaweicloud.com/csdk-rtc/rtc_05_0077.html#section2)
[requireRenderVideoFrame](https://support.huaweicloud.com/csdk-rtc/rtc_05_0077.html#section3)
[onVideoFrameCapture](https://support.huaweicloud.com/csdk-rtc/rtc_05_0077.html#section0)
[onVideoFrameRender](https://support.huaweicloud.com/csdk-rtc/rtc_05_0077.html#section1)
