# 修改原始视频数据

# 简介

原始视频数据,又称视频裸数据,是指音视频传输过程中获取到的纯视频数据。常见的原始视频数据格式为 RGB 和 YUV420。这些视频采样数据经过视频编码压缩成为视频码流,从而降低视频的数据量,便于存储和传输。

菊风提供修改原始视频数据的功能。当有自行处理视频数据的需求时,您可以在将采集到的视频数据进行处理;也可以将即将渲染的数据进行处理。

# 前提条件

在修改原始视频数据前,确保已经初始化了 JCMediaDevice 模块。

# 集成步骤

  1. 创建 JCVideoFrameCallbackImpl 继承 JCVideoFrameCallback (opens new window) 接口。重写 onVideoCaptureFrame, onVideoRenderFrame 接口。
  2. 在开始通话前调用 setVideoFrameCallback (opens new window) 。在该函数中实例化回调接口 JCVideoFrameCallback。
  3. 发起通话或者加入频道。
  4. 在收到 onLeave (opens new window)onStop (opens new window)onCallItemRemove (opens new window) 后调用 setVideoFrameCallback (opens new window),传入 null 来释放语音观测器对象。

# 示例代码

// 创建 JCVideoFrameCallbackImpl 继承 JCVideoFrameCallback
// 实现 onVideoCaptureFrame, onVideoRenderFrame 接口
class JCVideoFrameCallbackImpl : public JCVideoFrameCallback
{
	/**
	* 获得采集的视频数据
	*
	* @param captureId     采集源id
	* @param face          镜头朝向
	* @param imageAngle    图像正立所需角度
	* @param captureOrient 镜头固定角度
	* @param width		   图像宽
	* @param height        图像高
	* @param paddingWidth  图像内边距宽
	* @param paddingHeight 图像内边距高
	* @param data          图像数据
	*/	
	virtual void onVideoCaptureFrame(const char* captureId, int face, int imageAngle, int captureOrient, int* iWidth, int* iHeight,
		int paddingWidth, int paddingHeight, unsigned char * data);
	/**
	* 获得渲染的视频数据
	*
	* @param renderId    渲染id
	* @param sourceType  渲染源
	* - @ref JCMediaDeviceVideoTypePeer : 用户
	* - @ref JCMediaDeviceVideoTypeCapture : 采集设备
	* - @ref JCMediaDeviceVideoTypeFile : 文件
	* @param angle       图像正立所需角度
	* @param mirror      镜像类型
	* - @ref JCMediaDeviceVideoMirrorNone : 无镜像
	* - @ref JCMediaDeviceVideoMirrorHorizontal : 水平镜像
	* - @ref JCMediaDeviceVideoMirrorVertical : 垂直镜像
	* - @ref JCMeidaDeviceVideoMirrorAuto : 自动选择
	* - @ref JCMediaDeviceVideoMirrorFlipFromLeft : 转场动画,从左侧翻转
	* - @ref JCMediaDeviceVideoMirrorFlipFromTop : 转场动画,从上侧翻转
	* @param width       图像宽
	* @param height      图像高
	* @param data        图像数据
	* @param timeStampMs 渲染时间戳
	*/
    virtual void onVideoRenderFrame(const char* renderId, JCMediaDeviceVideoType sourceType, int angle, JCMediaDeviceVideoMirror mirror,
		int* width, int* height, unsigned char * data, int timeStampMs);
};

JCVideoFrameCallbackImpl mVideoFrameCallbackImpl;
// 设置视频数据监听
mediaDevice->setVideoFrameCallback(mVideoFrameCallbackImpl);
// 取消视频数据监听
mediaDevice->setVideoFrameCallback(NULL);
最后更新时间: 2021/3/30 14:57:27