# 修改原始视频数据

# 简介

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

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

# 前提条件

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

# 集成步骤

  1. 创建 JCVideoFrameCallbackImpl 继承 JCVideoFrameCallback 接口。重写 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 接口
public interface JCVideoFrameCallback {

    /**
     * 获得采集的视频
     *
     * @param captureId     采集源id
     * @param face          镜头朝向
     * - @ref JCMediaDevice#CAMERA_FRONT "CAMERA_FRONT" : 前置摄像头
     * - @ref JCMediaDevice#CAMERA_BACK "CAMERA_BACK" : 后置摄像头
     * @param imageAngle    图像正立所需角度
     * @param captureOrient 镜头固定角度
     * @param widthHeight   图像宽高
     * @param data          图像数据
     */
    void onVideoCaptureFrame(String captureId, @JCMediaDevice.CameraType int face, int imageAngle, int captureOrient, int[] widthHeight, ByteBuffer data);

    /**
     * 获得播放的视频
     *
     * @param renderId    渲染id
     * @param sourceType  视频源类型
     * - @ref JCMediaDevice#VIDEO_SOURCE_PEER "VIDEO_SOURCE_PEER" : 用户
     * - @ref JCMediaDevice#VIDEO_SOURCE_CAPTURE "VIDEO_SOURCE_CAPTURE" : 采集设备
     * - @ref JCMediaDevice#VIDEO_SOURCE_FILE "VIDEO_SOURCE_FILE" : 文件
     * @param angle       图像正立所需角度
     * @param mirror      镜像类型
     * - @ref JCMediaDevice#MIRROR_NONE "MIRROR_NONE" : 不镜像
     * - @ref JCMediaDevice#MIRROR_HORIZONTAL "MIRROR_HORIZONTAL" : 水平方向镜像
     * - @ref JCMediaDevice#MIRROR_VERTICAL "MIRROR_VERTICAL" : 竖直方向镜像
     * - @ref JCMediaDevice#MIRROR_VERTICAL "MIRROR_AUTO" : 自动选择
     * - @ref JCMediaDevice#MIRROR_VERTICAL "MIRROR_FLIP_FROM_LEFT" : 转场动画,从左侧翻转
     * - @ref JCMediaDevice#MIRROR_VERTICAL "MIRROR_FLIP_FROM_TOP" : 转场动画,从上侧翻转
     * @param width       图像宽
     * @param height      图像高
     * @param data        图像数据
     * @param timeStampMs 渲染时间戳
     */
    void onVideoRenderFrame(String renderId, @JCMediaDevice.VideoSourceType int sourceType, int angle, @JCMediaDevice.MirrorType int mirror, int width, int height, ByteBuffer data, int timeStampMs);
}

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