#include <IAgoraMediaEngine.h>
类 | |
struct | VideoFrame |
Public 类型 | |
enum | VIDEO_FRAME_TYPE { FRAME_TYPE_YUV420 = 0 , FRAME_TYPE_YUV422 = 1 , FRAME_TYPE_RGBA = 2 } |
enum | VIDEO_OBSERVER_POSITION { POSITION_POST_CAPTURER = 1 << 0 , POSITION_PRE_RENDERER = 1 << 1 , POSITION_PRE_ENCODER = 1 << 2 } |
Public 成员函数 | |
virtual bool | onCaptureVideoFrame (VideoFrame &videoFrame)=0 |
virtual bool | onPreEncodeVideoFrame (VideoFrame &videoFrame) |
virtual bool | onRenderVideoFrame (unsigned int uid, VideoFrame &videoFrame)=0 |
virtual VIDEO_FRAME_TYPE | getVideoFormatPreference () |
virtual bool | getRotationApplied () |
virtual bool | getMirrorApplied () |
virtual bool | getSmoothRenderingEnabled () |
virtual uint32_t | getObservedFramePosition () |
virtual bool | isMultipleChannelFrameWanted () |
virtual bool | onRenderVideoFrameEx (const char *channelId, unsigned int uid, VideoFrame &videoFrame) |
视频观测位置
枚举值 | |
---|---|
POSITION_POST_CAPTURER | 1: 本地采集视频数据后的位置,对应 onCaptureVideoFrame 回调。 |
POSITION_PRE_RENDERER | 2: 接收远端发送视频前的位置,对应 onRenderVideoFrame 回调。 |
POSITION_PRE_ENCODER | 4: 本地视频编码前的位置,对应 onPreEncodeVideoFrame 回调。 |
|
pure virtual |
获取本地摄像头采集到的视频数据。
成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取本地摄像头采集到的视频数据,然后根据场景需要,对视频数据进行前处理。
完成前处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
videoFrame | 视频帧数据,详见 VideoFrame |
|
inlinevirtual |
获取本地视频编码前的视频数据。
成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取编码前的视频数据,然后根据场景需要,对视频数据进行处理。
完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
POSITION_PRE_ENCODER(1 << 2)
后, 才能使用该回调获取本地视频编码前的视频数据。videoFrame | 视频帧数据,详见 VideoFrame |
|
pure virtual |
获取远端发送的视频数据。
成功注册视频数据观测器后,如果你将 isMultipleChannelFrameWanted 的返回值设为 false
,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的视频数据, 然后根据场景需求,对视频数据进行后处理。
完成后处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
uid | 发送该帧视频的远端用户 ID |
videoFrame | 视频帧数据,详见 VideoFrame |
|
inlinevirtual |
请求视频数据格式。
如果你想获取 YUV 420 格式以外的视频数据,需要在调用 registerVideoFrameObserver 方法时注册该回调。 成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调返回值中设置期望的视频数据格式。
|
inlinevirtual |
设置视频数据旋转。
如果你希望获取的原始视频数据已根据 VideoFrame 中的旋转信息 rotation
进行旋转,需要在调用 registerVideoFrameObserver 方法时注册该回调。 成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置是否对采集到的视频数据进行旋转。
|
inlinevirtual |
设置视频数据镜像。
如果你希望获取的视频数据为原始视频的镜像,需要在调用 registerVideoFrameObserver 方法时注册该回调,成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值 中设置是否对原始视频数据作镜像处理。
|
inlinevirtual |
设置获取的视频帧是否平滑输出。
如果你希望从 onRenderVideoFrame 或 onRenderVideoFrameEx 获取的视频帧出帧时间间隔更均匀,可以在 调用 registerVideoFrameObserver 方法时 注册 getSmoothRenderingEnabled
回调,并将该回调的返回值设为 true
。
|
inlinevirtual |
设置视频观测位置。
成功注册视频数据观测器后,SDK 会在每个特定的视频帧处理节点通过该回调来判断是否 触发 onCaptureVideoFrame、 onRenderVideoFrame 和 onPreEncodeVideoFrame 回调,供你观测本地采集视频数据、远端发送的视频数据以及编码前的视频数据。你可以根据场景需求,通过修改 getObservedFramePosition
的返回值,设置你需要观测的某个或多个位置:
POSITION_POST_CAPTURER(1 << 0)
,本地采集视频数据后的位置,对应 onCaptureVideoFrame
回调。POSITION_PRE_RENDERER(1 << 1)
,接收远端发送视频前的位置,对应 onRenderVideoFrame
回调。POSITION_PRE_ENCODER(1 << 2)
,本地视频编码前的位置,对应 onPreEncodeVideoFrame
回调。POSITION_POST_CAPTURER(1 << 0)
和 POSITION_PRE_RENDERER(1 << 1)
。
|
inlinevirtual |
多频道场景下,设置是否获取多个频道的视频数据。
成功注册视频观测器后,SDK 会在捕捉到每个视频帧的时候触发该回调。
在多频道场景下,如果你希望从多个频道获取视频数据,则需要将该回调的返回值设为 true
。成功设置后,SDK 会触发 onRenderVideoFrameEx 回调, 向你发送接收的远端视频帧,并报告该视频帧来自哪个频道。
true
,则 SDK 只触发 onRenderVideoFrameEx
来返回接收到的视频数据。 onRenderVideoFrame 将不会被触发。在多频道场景下,我们建议你将该回调的返回值设为 true
。false
,则 SDK 只触发 onRenderVideoFrame
来返回接收到的视频数据。true
: 获取多个频道的视频数据。false
: 不获取多个频道的视频数据。
|
inlinevirtual |
获取各频道的视频播放数据。
成功注册视频观测器后,如果你将 isMultipleChannelFrameWanted 的返回值设为 true
,则 SDK 会在捕捉到各频道内的视频数据时,触发该回调,将视频数据发送给你。
获取该回调中的视频数据后,你可以根据场景需要,对视频数据进行美颜、滤镜等后处理,然后将处理后 的视频数据再通过该回调的 videoFrame
参数发送回 SDK。
channelId | 该视频帧所在的频道名 |
uid | 发送该帧视频的用户 ID |
videoFrame | VideoFrame |