
# 自定义视频渲染
#### 功能描述
实时音视频传输过程中，上层应用可以不用SDK默认的渲染功能，选择对视频帧数据进行自定义渲染。
 #### 接口调用流程
![](https://support.huaweicloud.com/bestpractice-rtc/zh-cn_image_0000001180683356.png)
#### 实现过程
1. **加入房间前开启视频自渲染**
   加入房间前调用接口setExternalVideoFrameOutput打开视频自渲染功能。
   ```
   //开启远端或者本地的视频自渲染
   HRTCImageBufferFormat fileFormat;
   fileFormat.format = HRTC_VIDEO_IMAGE_FORMAT_YUV420P;
   fileFormat.bufferType = HRTC_VIDEO_IMAGE_BUFFER_BYTE_ARRAY;
   rtcEngine->setExternalVideoFrameOutput(true, true, fileFormat);
   ```
   
2. **加入房间**
   参考[接口调用流程]中加入房间的时序图步骤加入房间。
   
3. **渲染远端视频流**
   当远端用户加入房间后会触发onRemoteUserOnline回调，在该回调中使用pullRemoteVideo方法开启接收远端用户的视频流，如果不开启，无法渲染远端视频流。
   ```
   //远端用户加入房间后触发的回调
   void HWEngineEventHandler::onRemoteUserOnline(const char* roomId, const char* userId, const char* userName) {
       // 开启远端视频流接收
       rtcEngine->pullRemoteVideo(userId, true);
   }
   ```
   
4. **触发回调**
   加入房间后sdk会根据前面的参数设置调用onVideoFrameRender回调函数上报本地和远端视频帧数据给上层应用处理。
   ```
   //自渲染回调
   void HWEngineEventHandler::onVideoFrameRender(const char* roomId, HRTCMediaDirection direction, const char* userId, HRTCVideoFrame& videoFrame) {
       //获取videoFrame，进行数据处理
   }
   ```
   
 
#### API参考
[setExternalVideoFrameOutput](https://support.huaweicloud.com/csdk-rtc/rtc_05_0105.html#section2)
[onRemoteUserOnline](https://support.huaweicloud.com/csdk-rtc/rtc_05_0115.html#section59)
[startRemoteStreamView](https://support.huaweicloud.com/csdk-rtc/rtc_05_0101.html#section14)
[onVideoFrameRender](https://support.huaweicloud.com/csdk-rtc/rtc_05_0123.html#section0)
