菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# 修改原始视频数据

# 简介

原始视频数据,又称视频裸数据,是指音视频传输过程中获取到的纯视频数据。常见的原始视频数据格式为 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);
最后更新时间: 8/7/2024, 5:15:00 PM