# 修改原始视频数据

# 简介

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

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

# 前提条件

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

# 集成步骤

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

# 示例代码

// 创建 JCVideoFrameCallbackImpl 遵守 JCVideoFrameCallback 协议。
// 实现 onVideoCaptureFrame, onVideoRenderFrame 接口。
@interface JCVideoFrameCallbackImpl : NSObject <JCVideoFrameCallback>
@end
/**
 * 获得采集的视频
 *
 * @param captureId     采集源id
 * @param face      镜头朝向
 * - JCMediaDeviceCameraTypeFront 前置摄像头
 * - JCMediaDeviceCameraTypeBack  后置摄像头
 * @param imageAngle    图像正立所需角度
 * @param captureOrient     镜头固定角度
 * @param width     图像宽
 * @param height    图像高
 * @param buf       图像数据
 */
- (void)onVideoCaptureFrame:(NSString *_Nonnull)captureId 
					   face:(JCMediaDeviceCameraType)face 
                 imageAngle:(int)imageAngle 
              captureOrient:(int)captureOrient 
              		  width:(int*_Nonnull)width 
                     height:(int*_Nonnull)height 
                     	buf:(unsigned char *_Nonnull)buf;
/**
 * 获得播放的视频
 *
 * @param renderId      渲染id
 * @param sourceType    视频源类型
 * - JCMediaDeviceVideoSourcePeer  用户
 * - JCMediaDeviceVideoSourceCapture  采集设备
 * - JCMediaDeviceVideoSourceFile  文件
 * @param angle     图像正立所需角度
 * @param mirror    镜像类型
 * - JCMediaDeviceMirrorNone  不镜像
 * - JCMediaDeviceMirrorHorizontal  水平方向镜像
 * - JCMediaDeviceMirrorVertical  竖直方向镜像
 * - JCMediaDeviceMirrorAuto  自动选择
 * - JCMediaDeviceMirrorFromLeft  转场动画,从左侧翻转
 * - JCMediaDeviceMirrorFromTop  转场动画,从上侧翻转
 * @param width     图像宽
 * @param height    图像高
 * @param buf     图像数据
 * @param timeStamp    渲染时间戳
 */
- (void)onVideoRenderFrame:(NSString *_Nonnull)renderId 
				sourceType:(JCMediaDeviceVideoSource)sourceType
                	 angle:(int)angle 
                    mirror:(JCMediaDeviceMirror)mirror 
                     width:(int*_Nonnull)width 
                    height:(int*_Nonnull)height 
                       buf:(unsigned char *_Nonnull)buf 
                 timeStamp:(unsigned long)timeStamp;

// 创建 JCVideoFrameCallbackImpl 实例对象
JCVideoFrameCallbackImpl *callback = [[JCVideoFrameCallbackImpl alloc] init];
// 设置视频数据监听
[_mediaDevice registerVideoFrameCallback:callback];
// 取消视频数据监听
[_mediaDevice registerVideoFrameCallback:nil];
最后更新时间: 2021/4/1下午4:54:25