IVideoFrameObserver

最近更新时间:2022-09-20 05:17:40

structVideoFrame
Public 类型
enumVIDEO_FRAME_TYPE { FRAME_TYPE_YUV420 = 0, FRAME_TYPE_YUV422 = 1, FRAME_TYPE_RGBA = 2 }
enumVIDEO_OBSERVER_POSITION { POSITION_POST_CAPTURER = 1 << 0, POSITION_PRE_RENDERER = 1 << 1, POSITION_PRE_ENCODER = 1 << 2 }
Public 成员函数
virtual boolonCaptureVideoFrame (VideoFrame &videoFrame)=0
virtual boolonPreEncodeVideoFrame (VideoFrame &videoFrame)
virtual boolonRenderVideoFrame (unsigned int uid, VideoFrame &videoFrame)=0
virtual VIDEO_FRAME_TYPEgetVideoFormatPreference ()
virtual boolgetRotationApplied ()
virtual boolgetMirrorApplied ()
virtual boolgetSmoothRenderingEnabled ()

详细描述

IVideoFrameObserver 类

成员枚举类型说明

VIDEO_FRAME_TYPE

enum VIDEO_FRAME_TYPE

视频帧类型

枚举值

枚举值描述
**FRAME_TYPE_YUV420 **0: YUV420
**FRAME_TYPE_YUV422 **1: YUV422
**FRAME_TYPE_RGBA **2: RGBA

VIDEO_OBSERVER_POSITION

enum VIDEO_OBSERVER_POSITION

视频观测位置

枚举值

枚举值描述
**POSITION_POST_CAPTURER **1: 本地采集视频数据后的位置,对应 onCaptureVideoFrame 回调。
**POSITION_PRE_RENDERER **2: 接收远端发送视频前的位置,对应 onRenderVideoFrame 回调。
**POSITION_PRE_ENCODER **4: 本地视频编码前的位置,对应 onPreEncodeVideoFrame 回调。

成员函数说明

onCaptureVideoFrame

virtual bool onCaptureVideoFrame(VideoFrame& videoFrame)

获取本地摄像头采集到的视频数据

成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取本地摄像头采集到的视频数据,然后根据场景需要,对视频数据进行前处理。

完成前处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。

参数

参数描述
videoFrame视频帧数据。详见: VideoFrame

返回值

如果视频前处理失败,是否忽略该帧视频:

  • true:不忽略
  • false:忽略,则该帧数据不再发送回 SDK

注意事项:

如果你获取到的视频数据类型为 RGBA,anyRTC 不支持将处理后的 RGBA 数据通过该回调再发送回 SDK。

onPreEncodeVideoFrame

virtual bool onPreEncodeVideoFrame(VideoFrame& videoFrame)

获取本地视频编码前的视频数据

成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取编码前的视频数据,然后根据场景需要,对视频数据进行处理。

完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。

参数

参数描述
videoFrame视频帧数据。详见: VideoFrame

返回值

如果视频前处理失败,是否忽略该帧视频:

  • true:不忽略
  • false:忽略,该帧数据不再发送回 SDK

注意事项:

必须通过 getObservedFramePosition 设置观测 POSITION_PRE_ENCODER(1 << 2) 后, 才能使用该回调获取本地视频编码前的视频数据。 此处获取的视频数据已经过前处理,如裁剪、旋转和美颜等。 如果你获取到的视频数据类型为 RGBA,anyRTC 不支持将处理后的 RGBA 数据通过该回调再发送回 SDK。

onRenderVideoFrame

virtual bool onRenderVideoFrame(const char* uid, VideoFrame& videoFrame)

获取远端发送的视频数据

成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的视频数据,然后根据场景需求,对视频数据进行后处理。

完成后处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。

参数

参数描述
uid发送该帧视频的远端用户 ID
videoFrame视频帧数据,详见 VideoFrame

返回值

如果视频后处理失败,是否忽略该帧视频:

  • true:不忽略
  • false:忽略,则该帧数据不再发送回SDK

注意事项:

如果你获取到的视频数据类型为 RGBA,AR 不支持将处理后的 RGBA 数据通过该回调再发送回 SDK。

getVideoFormatPreference

virtual VIDEO_FRAME_TYPE getVideoFormatPreference()

请求视频数据格式

如果你想获取 420 格式以外的视频数据,需要在调用 registerVideoFrameObserver 方法时注册该回调。 成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调返回值中设置期望的视频数据格式。

返回值

设置 SDK 输出的原始数据格式 VIDEO_FRAME_TYPE

getRotationApplied

virtual bool getRotationApplied()

设置视频数据旋转

如果你希望获取的视频数据已根据 VideoFrame 中的旋转信息 rotation 进行旋转,需要在调用 registerVideoFrameObserver 方法时注册该回调。 成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置是否对采集到的视频数据进行旋转。

返回值

设置 SDK 输出视频数据时是否作旋转处理:

  • true:旋转
  • false:(默认)不旋转

注意事项:

该功能仅支持 RGBA 格式的视频数据。

getMirrorApplied

virtual bool getMirrorApplied()

设置视频数据镜像

如果你希望获取的视频数据为原始视频的镜像,需要在调用 registerVideoFrameObserver 方法时注册该回调,成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置是否对原始视频数据作镜像处理。

返回值

设置 SDK 输出视频数据时是否作镜像处理:

  • true:镜像
  • false:(默认)不镜像

注意事项:

该功能仅支持 RGBA 格式的视频数据。

getSmoothRenderingEnabled

virtual bool getSmoothRenderingEnabled()

设置获取的视频帧是否平滑输出

如果你希望从 onRenderVideoFrame 获取的视频帧出帧时间间隔更均匀,可以在 调用 registerVideoFrameObserver 方法时 注册 getSmoothRenderingEnabled 回调,并将该回调的返回值设为 true。

返回值

设置是否对获取的视频帧平滑处理:

  • true:平滑处理
  • false:(默认)不平滑处理

注意事项:

该回调需要在加入频道前注册。 该回调适用于对获取的视频帧处理后自渲染的场景,不适用于处理后传回 SDK 的场景