# 修改原始视频数据

# 简介

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

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

# 前提条件

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

# 集成步骤

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

# 示例代码

// 创建 JCVideoFrameCallbackImpl 继承 JCVideoFrameCallback
// 实现 onVideoCaptureFrame, onVideoRenderFrame 接口
public interface JCVideoFrameCallback
{
    /**
    * 获得采集的视频
    *
    * @param captureId     采集源id
    * @param face          镜头朝向
    * - @ref JCMediaDeviceFaceType#FaceUnknown "FaceUnknown" : 未获取到摄像头
    * - @ref JCMediaDeviceFaceType#FaceFront "FaceFront" : 前置摄像头
    * - @ref JCMediaDeviceFaceType#FaceBack "FaceBack" : 后置摄像头
    * @param imageAngle    图像正立所需角度
    * @param captureOrient 镜头固定角度
    * @param widthHeight   图像宽高
    * @param data          图像数据
    */
    void onVideoCaptureFrame(string captureId, JCMediaDeviceFaceType face, int imageAngle, int captureOrient, IntPtr width, IntPtr height, int paddingWidth, int paddingHeight, IntPtr buf, IntPtr encoder);

    /**
    * 获得播放的视频
    *
    * @param renderId    渲染id
    * @param sourceType  视频源类型
    * - @ref JCMediaDeviceVideoSourceType#VideoSourcePeer "VideoSourcePeer" : 用户
    * - @ref JCMediaDeviceVideoSourceType#VideoSourceCapture "VideoSourceCapture" : 采集设备
    * - @ref JCMediaDeviceVideoSourceType#VideoSourceFile "VideoSourceFile" : 文件
    * @param angle       图像正立所需角度
    * @param mirror      镜像类型
    * - @ref JCMediaDeviceMirrorType#MirrorAuto "MirrorAuto" : 自动选择
    * - @ref JCMediaDeviceMirrorType#MirrorHorizontal "MirrorHorizontal" : 水平方向镜像
    * - @ref JCMediaDeviceMirrorType#MirrorVertical "MirrorVertical" : 竖直方向镜像
    * @param width       图像宽
    * @param height      图像高
    * @param data        图像数据
    * @param timeStampMs 渲染时间戳
    */
    void onVideoRenderFrame(string renderId, JCMediaDeviceVideoSourceType sourceType, int angle, JCMediaDeviceMirrorType mirror, IntPtr width, IntPtr height, IntPtr buf, uint timeStamp);
}

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